标题: 萌新求教有关动态数码管的问题 [打印本页]

作者: 鱼粥与    时间: 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. }
复制代码



作者: wulin    时间: 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. }
复制代码

作者: angmall    时间: 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. }

复制代码

作者: hi毁人不倦    时间: 2019-11-30 08:00
i没清零?
作者: tyrl800    时间: 2019-11-30 09:00
程序要与硬件电路相适应,是教程的开发板吗?
作者: moluxiyan    时间: 2019-11-30 09:52
没电路图,不知道你怎么接线的,所以没法判断那有问题
作者: Eircly    时间: 2019-11-30 10:32
显示的程序有问题吧
作者: hange_v    时间: 2019-11-30 12:43
延时时间太短,肉眼分别不出来,把延时改大,LED亮是因为电路上LED和数码管是接在一起的,不用管
作者: yanguang123    时间: 2019-11-30 13:05
24行的大括号只有一个,27行有两个,大括号写错地方,逻辑关系就会改变,网上下载的程序许多都有错误,要仔细检查,判断,
作者: csmyldl    时间: 2019-11-30 13:36
把P0=smgduan[i];
delay(100);
P0=0x00;
上笑迎一个大括号
作者: stc89c51菜鸟    时间: 2019-11-30 20:08
"d3到d5还亮着",这种情况要看开发板原理图,我在我的原理图上看了一下,发现定义的两个口sbit LSB=P2^3; sbit LSC=P2^4;对应着led模块上D3和D4,所以会亮是正常的
作者: 图南o    时间: 2020-1-29 12:55
angmall 发表于 2019-11-30 07:05
你的程序这里错了,给你改了一下试试。

想问一下switch语句中给LSA,LSB,LSC赋值是什么意思,怎么赋值0和1的
作者: odfggf    时间: 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种状态




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1