找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机控制74hc595数码管静态显示会闪?

查看数: 5211 | 评论数: 7 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-3-18 07:51

正文摘要:

#include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar count,second,min; sbit lclk=P1^0; sbit sclk=P1^1; sbit Data=P1^2; uchar dis[4]; uchar code displayhex[ ...

回复

ID:476644 发表于 2019-4-5 14:58
延时函数可以调到100微秒
ID:366559 发表于 2019-4-5 10:36
有时候proteus因为仿真速度的问题会把实际情况下不会闪烁的动态扫描显示成闪烁的
ID:164604 发表于 2019-4-4 20:30
wulin 发表于 2019-3-19 09:53
程序没有大毛病,是语句排序错误导致闪烁和乱码。你对比一下就知道哪里错了。

谢谢,非常感谢!
ID:485458 发表于 2019-3-19 21:20
延时调小一点
ID:424598 发表于 2019-3-19 16:12
闪烁的话,调整下延时,我之前有遇到同样的问题
ID:213173 发表于 2019-3-19 09:53
程序没有大毛病,是语句排序错误导致闪烁和乱码。你对比一下就知道哪里错了。



  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar count,second,min;
  5. sbit lclk=P1^0;
  6. sbit sclk=P1^1;
  7. sbit Data=P1^2;
  8. uchar dis[4];
  9. uchar code displayhex[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  10.                  0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  11. /*
  12. void delay(uint z)
  13. {
  14.    uint x,y;
  15.    for(x=z;x>0;x--)
  16.       for(y=100;y>0;y--);
  17. }*/
  18. void send595(uchar *pdat)
  19. {
  20.         uchar i,j;
  21.         j=0x80;
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 if((*pdat)&j) Data=1;
  25.                 else Data=0;
  26. //                sclk=0;
  27.                 sclk=1;
  28.                 sclk=0;
  29.                 j>>=1;
  30.         }
  31. }
  32. void display595( uchar *pdat)
  33. {
  34.         uchar i;
  35.         for(i=0;i<4;i++)
  36.         {
  37. //                lclk=0;
  38.                 send595(&displayhex[*(pdat+i)]);
  39.         }
  40.         lclk=0;
  41.         lclk=1;
  42. }
  43. void init()
  44. {
  45.         TMOD=0X01;
  46.         TH0=(65536-50000)/256;
  47.         TL0=(65536-50000)%256;
  48.         EA=1;
  49.         ET0=1;
  50.         TR0=1;
  51. }
  52. void main()
  53. {
  54.         init();
  55.         while(1)
  56.         {
  57.                 if(count==20)
  58.                 {
  59.                         count=0;
  60.                         second++;
  61.                         if(second==60)
  62.                         {
  63.                                 second=0;
  64.                                 min++;
  65.                                 if(min==24)
  66.                                 {
  67.                                         min=0;
  68.                                 }
  69.                         }
  70.                         dis[0]=second%10;
  71.                         dis[1]=second/10;
  72.                         dis[2]=min%10;
  73.                         dis[3]=min/10;
  74. //                        display595(dis);
  75. //                        delay(50);
  76.                 }
  77.                 display595(dis);
  78.         }
  79. }

  80. void timer0() interrupt 1
  81. {
  82.         TH0=(65536-50000)/256;
  83.         TL0=(65536-50000)%256;
  84.         count++;
  85. }
复制代码



ID:96682 发表于 2019-3-18 22:12
楼主是不是发错了?

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

Powered by 单片机教程网

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