找回密码
 立即注册

QQ登录

只需一步,快速开始

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

两片74HC595芯片控制8位数码管进阶版,源码+proteus.

[复制链接]
跳转到指定楼层
楼主
此次为  两个 595 芯片  串联 控制 8位数码管 , 仅用了3个 IO口。单片机为    5  1   芯片
仿真:


源码:(IO位定义及proteus在源文件中)
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;

  5. #define date P0
  6. #define count 50000
  7. #define TH_0 (65536-count)/256
  8. #define TL_0 (65536-count)%256

  9. uchar diss[8];
  10. uchar code distab[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  11.                                                                                                                                 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
  12. uint sec=0,min=0,hour=0;

  13. void delay(uint iii)
  14. {
  15.         while(iii--);
  16. }
  17. void hc595(uchar dat)
  18. {
  19.         uchar i;
  20.         for(i=0;i<8;i++)
  21.         {
  22.                 sh_cp=0;
  23.                 _nop_();
  24.                 _nop_();
  25.                
  26.                 ds=dat>>7;
  27.                 dat=dat<<1;
  28.                
  29.                 sh_cp=1;
  30.                 _nop_();
  31.                 _nop_();
  32.         }
  33. }

  34. void ds_dat_txd()//锁存发送
  35. {
  36.         st_cp=0;
  37.         _nop_();
  38.         _nop_();
  39.         st_cp=1;
  40.         _nop_();
  41.         _nop_();
  42. }

  43. void display()
  44. {
  45.         uchar i=0,dat=0;
  46.         for(dat=0xfe;dat!=0xff;dat=dat<<1|0x01)
  47.         {
  48.                 hc595(dat);//先发送位码
  49.                 hc595(distab[diss[i++]]);//段码,
  50.                 ds_dat_txd();  //发送
  51.                 if(i==8)i=0;
  52.                 delay(100);
  53.                 hc595(0x00);  //消隐
  54.                 ds_dat_txd();
  55.         }
  56. }
  57. void disss()
  58. {
  59.         diss[0]=hour/10;
  60.         diss[1]=hour%10;
  61.         diss[2]=16;
  62.         diss[3]=min/10;
  63.         diss[4]=min%10;
  64.         diss[5]=16;
  65.         diss[6]=sec/10;
  66.         diss[7]=sec%10;
  67. }
  68. void timer0_init()
  69. {
  70.         TMOD=0x01;
  71.         EA=1;ET0=1;TR0=1;
  72.         TH0=TH_0;TL0=TL_0;
  73. }
  74. void main()
  75. {
  76.         timer0_init();
  77.         while(1)
  78.         {       
  79.                 display();
  80.                 disss();
  81.         }
  82. }
  83. void timer0() interrupt 1
  84. {
  85.         static uchar j;
  86.         TH0=TH_0;TL0=TL_0;
  87.         if(++j==20)
  88.         {
  89.                 j=0;
  90.                 sec++;
  91.                 if(sec==60)
  92.                 {
  93.                         sec=0;
  94.                         min++;
  95.                         if(min==60)
  96.                         {
  97.                                 min=0;
  98.                                 hour++;
  99.                                 if(hour==24)
  100.                                 {
  101.                                         hour=0;
  102.                                 }
  103.                         }
  104.                 }
  105.         }
  106. }
复制代码
源文件 :
74HC595数码管.zip (128.5 KB, 下载次数: 68)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:417194 发表于 2019-1-29 10:48 | 只看该作者
楼主你好!请问一下,用了你的代码后我的数码管可以显示时钟了,但是任然有很多残影,这是为什么啊?我的也是两个595级联的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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