找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2658|回复: 12
打印 上一主题 下一主题
收起左侧

萌新求教有关动态数码管的问题

  [复制链接]
跳转到指定楼层
楼主
ID:652769 发表于 2019-11-30 02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下(根据教程改的,非本人编写):想实现0-7的动态显示,只能显示8,不会动且led模块的d3到d5还亮着
  1. #include"reg51.h"
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;
  7. u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,
  8. 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};   
  9.       
  10. void delay(u16 i)
  11. {while(i--);}
  12. void DigDisplay()
  13. {  u8 i;
  14. for(i=0;i<8;i++)
  15. { switch(i)
  16. { case 0:LSA=0;LSB=0;LSC=0;break;
  17. case 1:LSA=1;LSB=0;LSC=0;break;
  18. case 2:LSA=0;LSB=1;LSC=0;break;
  19. case 3:LSA=1;LSB=1;LSC=0;break;
  20. case 4:LSA=0;LSB=0;LSC=1;break;
  21. case 5:LSA=1;LSB=0;LSC=1;break;
  22. case 6:LSA=0;LSB=1;LSC=1;break;
  23. case 7:LSA=1;LSB=1;LSC=1;break;
  24. }}
  25. P0=smgduan[i];
  26. delay(100);
  27. P0=0x00;}
  28. void main()
  29. {   
  30. while(1)
  31. {DigDisplay();}
  32. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-11-30 06:34 | 只看该作者
要把P0=smgduan[ i];delay(100);P0=0x00;这3条语句纳入for循环中,否则不能实现动态显示。
  1. void DigDisplay()
  2. {
  3.         u8 i;
  4.         for(i=0;i<8;i++)
  5.         {
  6.                 switch(i)
  7.                 {
  8.                         case 0:LSA=0;LSB=0;LSC=0;break;
  9.                         case 1:LSA=1;LSB=0;LSC=0;break;
  10.                         case 2:LSA=0;LSB=1;LSC=0;break;
  11.                         case 3:LSA=1;LSB=1;LSC=0;break;
  12.                         case 4:LSA=0;LSB=0;LSC=1;break;
  13.                         case 5:LSA=1;LSB=0;LSC=1;break;
  14.                         case 6:LSA=0;LSB=1;LSC=1;break;
  15.                         case 7:LSA=1;LSB=1;LSC=1;break;
  16.                 }
  17.                 P0=smgduan[ i];
  18.                 delay(100);
  19.                 P0=0x00;
  20.         }
  21. }
复制代码
回复

使用道具 举报

板凳
ID:155507 发表于 2019-11-30 07:05 | 只看该作者
你的程序这里错了,给你改了一下试试。
  1. void DigDisplay()
  2. {
  3.         u8 i;
  4.         for(i=0;i<8;i++)
  5.         {
  6.                 switch(i)         //位选,选择点亮的数码管,
  7.                 {
  8.                         case(0):
  9.                                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  10.                         case(1):
  11.                                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  12.                         case(2):
  13.                                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  14.                         case(3):
  15.                                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  16.                         case(4):
  17.                                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  18.                         case(5):
  19.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  20.                         case(6):
  21.                                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  22.                         case(7):
  23.                                 LSA=1;LSB=1;LSC=1; break;//显示第7位       
  24.                 }   //<--------
  25.                 P0=smgduan[i];//发送段码
  26.                 delay(100); //间隔一段时间扫描       
  27.                 P0=0x00;//消隐
  28.         }    //<--------
  29. }

复制代码
回复

使用道具 举报

地板
ID:645890 发表于 2019-11-30 08:00 | 只看该作者
i没清零?
回复

使用道具 举报

5#
ID:275826 发表于 2019-11-30 09:00 | 只看该作者
程序要与硬件电路相适应,是教程的开发板吗?
回复

使用道具 举报

6#
ID:470332 发表于 2019-11-30 09:52 | 只看该作者
没电路图,不知道你怎么接线的,所以没法判断那有问题
回复

使用道具 举报

7#
ID:372888 发表于 2019-11-30 10:32 | 只看该作者
显示的程序有问题吧
回复

使用道具 举报

8#
ID:190832 发表于 2019-11-30 12:43 | 只看该作者
延时时间太短,肉眼分别不出来,把延时改大,LED亮是因为电路上LED和数码管是接在一起的,不用管
回复

使用道具 举报

9#
ID:650297 发表于 2019-11-30 13:05 | 只看该作者
24行的大括号只有一个,27行有两个,大括号写错地方,逻辑关系就会改变,网上下载的程序许多都有错误,要仔细检查,判断,
回复

使用道具 举报

10#
ID:235200 发表于 2019-11-30 13:36 | 只看该作者
把P0=smgduan[i];
delay(100);
P0=0x00;
上笑迎一个大括号
回复

使用道具 举报

11#
ID:653047 发表于 2019-11-30 20:08 | 只看该作者
"d3到d5还亮着",这种情况要看开发板原理图,我在我的原理图上看了一下,发现定义的两个口sbit LSB=P2^3; sbit LSC=P2^4;对应着led模块上D3和D4,所以会亮是正常的
回复

使用道具 举报

12#
ID:688584 发表于 2020-1-29 12:55 | 只看该作者
angmall 发表于 2019-11-30 07:05
你的程序这里错了,给你改了一下试试。

想问一下switch语句中给LSA,LSB,LSC赋值是什么意思,怎么赋值0和1的
回复

使用道具 举报

13#
ID:642838 发表于 2020-1-29 14:09 | 只看该作者
图南o 发表于 2020-1-29 12:55
想问一下switch语句中给LSA,LSB,LSC赋值是什么意思,怎么赋值0和1的

swith的i值范围0--7,对应二进制000到111,就是case的8种状态
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表