久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7998|回復: 11
打印 上一主題 下一主題
收起左側

74HC595驅動數碼管時鐘仿真

  [復制鏈接]
跳轉到指定樓層
樓主


/***以下是部分源碼,完整源碼見附件***
74HC595驅動數碼管時鐘仿真,8位共陽數碼管顯示88-88-88樣式,兩個“-”1秒閃爍1次;按鍵調時部分沒寫,有興趣的自己去添加;附件里有完整源碼和仿真文件。

單片機源程序如下:
  1. [code]#include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char


  4. uchar code Table[] =
  5. { // 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  6.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  7. };
  8. //-----------------------------------------------------------------------------

  9. sbit SER = P1^0;        //串行數據輸入端
  10. sbit STCP = P1^1;        //存儲寄存器時鐘端,并行輸出
  11. sbit SHCP = P1^2;        / /移位寄存器時鐘端

  12. sbit key1 = P3^0;        //選擇鍵
  13. sbit key2 = P3^1;        //加鍵
  14. sbit key3 = P3^2;        //減鍵
  15. sbit key4 = P3^3;

  16. uchar shan,A,K,C,D,E,F;
  17. uchar knum;                //選擇鍵計數變量

  18. void TimerInit();
  19. void KeyScan();
  20. void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao);        // 數碼管顯示
  21. void SMG_Int(uchar Dat);                // 數碼管單字節串行移位函數

  22. //*****************************************************************************
  23. // 主程序
  24. void main ()
  25. {
  26.         TimerInit();
  27.         while(1)
  28.         {
  29.                 Display (A,K,C,D,E,F);
  30.                 KeyScan();
  31.         }
  32. }

  33. void KeyScan()
  34. {
  35.         
  36. }


  37. void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao)
  38. {
  39.         uchar i;

  40.         //顯示第1位        小時10位
  41.         i = Table[shi10];

  42.         SMG_Int(i);                        
  43.         SMG_Int(0x01);               

  44.         STCP = 0;         //數據并行輸出,(借助上升沿)
  45.         _nop_();
  46.         _nop_();
  47.         STCP = 1;

  48.         //顯示第2位        小時個位
  49.         i = Table[shi];

  50.         SMG_Int(i);               
  51.         SMG_Int(0x02);               

  52.         STCP = 0;
  53.         _nop_();
  54.         _nop_();
  55.         STCP = 1;

  56.         //顯示第3位        -
  57.         if(shan<10)         //"-" 閃爍
  58.         i = Table[16];
  59.         else
  60.         i = Table[15];
  61.         SMG_Int(i);                        
  62.         SMG_Int(0x04);        

  63.         STCP = 0;
  64.         _nop_();
  65.         _nop_();
  66.         STCP = 1;

  67.         //顯示第4位        分鐘10位
  68.         i = Table[fen10];

  69.         SMG_Int(i);                        
  70.         SMG_Int(0x08);               

  71.         STCP = 0;
  72.         _nop_();
  73.         _nop_();
  74.         STCP = 1;

  75.         //顯示第5位        分鐘個位
  76.         i = Table[fen];

  77.         SMG_Int(i);                        
  78.         SMG_Int(0x10);        

  79.         STCP = 0;
  80.         _nop_();
  81.         _nop_();
  82.         STCP = 1;

  83.         //顯示第6位        -
  84.         if(shan<10)           //"-" 閃爍
  85.         i = Table[16];
  86.         else
  87.         i = Table[15];

  88.         SMG_Int(i);                        
  89.         SMG_Int(0x20);        

  90.         STCP = 0;
  91.         _nop_();
  92.         _nop_();
  93.         STCP = 1;

  94.         //顯示第7位        秒10位
  95.         i = Table[miao10];

  96.         SMG_Int(i);                        
  97.         SMG_Int(0x40);        

  98.         STCP = 0;
  99.         _nop_();
  100.         _nop_();
  101.         STCP = 1;

  102.         //顯示第8位        秒個位
  103.         i = Table[miao];

  104.         SMG_Int(i);               
  105.         SMG_Int(0x80);        

  106.         STCP = 0;
  107.         _nop_();
  108.         _nop_();
  109.         STCP = 1;
  110. }

  111. void SMG_Int(uchar Dat)         //通過8次循環將8位數據移入74HC595
  112. {
  113.         uchar i;
  114.         for(i=8;i>=1;i--)
  115.         {
  116.                 if (Dat & 0x80)
  117.                 {
  118.                         SER = 1;
  119.                 }
  120.                
  121.                 else
  122.                 {
  123.                         SER = 0;
  124.                 }
  125.                 Dat <<= 1;
  126.                 SHCP = 0;
  127.                 _nop_();
  128.                 _nop_();
  129.                 SHCP = 1;
  130.         }
  131. }

  132. void TimerInit()         //定時器0初始化
  133. {
  134.         TMOD = 0x01;
  135.         TH0 = (65536-50000)/256;        //50ms初值
  136.         TL0 = (65536-50000)%256;
  137.         EA = 1;
  138.         ET0 = 1;
  139.         TR0 = 1;

  140. }

  141. void Timer0() interrupt 1
  142. {
  143.         static uchar cnt,shi=12,fen=59,miao=30;
  144.         
  145.         TH0 = (65536-50000)/256;
  146.         TL0 = (65536-50000)%256;
  147.         
  148.         shan++;
  149.         if(shan==20)
  150.                 shan=0;

  151.         cnt++;
  152.         if(cnt==20)
  153.         {
  154.                 cnt = 0;
  155.                 miao++;
  156.                 if(miao == 60)
  157.                 {
  158.                         miao = 0;
  159.                         fen++;
  160.                         if(fen==60)
  161.                         {
  162.                                 fen = 0;
  163.                                 shi++;
  164.                                 if(shi==24)
  165.                                 {
  166.                                         shi=0;
  167.                                 }
  168.                         }
  169.                 }
  170.         }

  171.         A=shi/10;
  172.         K=shi%10;
  173.         C=fen/10;
  174.         D=fen%10;
  175.         E=miao/10;
  176.         F=miao%10;
  177. }

  178. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載(按鍵調時程序還沒有寫):
595數碼管時鐘資料.rar (20.57 KB, 下載次數: 198)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:140183 發表于 2017-9-27 05:57 | 只看該作者
謝謝分享!正需要 這個。
回復

使用道具 舉報

板凳
ID:111182 發表于 2018-5-17 19:23 | 只看該作者
不錯!!!
回復

使用道具 舉報

地板
ID:111182 發表于 2018-5-17 19:24 | 只看該作者
用上時鐘芯片就好了
回復

使用道具 舉報

5#
ID:358284 發表于 2018-6-25 17:30 | 只看該作者
謝謝分享!非常有用!
回復

使用道具 舉報

6#
ID:150257 發表于 2018-11-14 23:14 | 只看該作者
謝謝分享!正需要 這個。
回復

使用道具 舉報

7#
ID:880853 發表于 2021-2-17 20:34 | 只看該作者
按鍵完全沒用
回復

使用道具 舉報

8#
ID:476623 發表于 2021-2-19 22:26 | 只看該作者
下載了學習一下,謝謝樓主的資料,樓主辛苦了!
回復

使用道具 舉報

9#
ID:1011444 發表于 2022-11-29 20:23 | 只看該作者
希望補齊按鍵程序,不然就不是完整程序,按鍵等于虛設。
回復

使用道具 舉報

10#
ID:140489 發表于 2022-11-30 11:58 | 只看該作者
你們要的按鍵完整程序來了
回復

使用道具 舉報

11#
ID:140489 發表于 2022-11-30 14:58 | 只看該作者
kz0018 發表于 2022-11-29 20:23
希望補齊按鍵程序,不然就不是完整程序,按鍵等于虛設。

加按鍵調時的代碼
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char


  4. uchar code Table[] =
  5. { // 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    不顯    -
  6.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xFF,0xbf
  7. };
  8. //-----------------------------------------------------------------------------

  9. sbit SER = P1^0;        //串行數據輸入端
  10. sbit STCP = P1^1;        //時鐘脈沖信號——上升沿有效 存儲寄存器時鐘輸入端,并行輸出
  11. sbit SHCP = P1^2;        //輸入信號————上升沿有效 移位寄存器時鐘輸入端

  12. sbit key1 = P3^0;        //選擇鍵
  13. sbit key2 = P3^1;        //加鍵
  14. sbit key3 = P3^2;        //減鍵
  15. sbit key4 = P3^3;

  16. char shi=12,fen=59,miao=30;
  17. uchar shan,A,K,C,D,E,F;
  18. uchar knum;                //選擇鍵計數變量
  19. uchar keycont1,keycont2,keycont3;//消抖計時變量
  20. bit lock1,lock2,lock3;//按鍵自鎖標志

  21. void TimerInit();
  22. void KeyScan();
  23. void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao);        // 數碼管顯示
  24. void SMG_Int(uchar Dat);                // 數碼管單字節串行移位函數

  25. //*****************************************************************************
  26. // 主程序
  27. void main ()
  28. {
  29.         TimerInit();
  30.         while(1)
  31.         {
  32.                 Display (A,K,C,D,E,F);
  33.                 KeyScan();
  34.         }
  35. }

  36. void KeyScan()
  37. {
  38.         if(key1)
  39.         {
  40.                 keycont1=0;
  41.                 lock1=0;       
  42.         }
  43.         else if(lock1==0)
  44.         {
  45.                 keycont1++;
  46.                 if(keycont1>50)
  47.                 {
  48.                         keycont1=0;
  49.                         lock1=1;
  50.                         knum++;
  51.                         if(knum==4)
  52.                                 knum=0;                       
  53.                 }       
  54.         }
  55. /////////////////////////
  56.         if(key2)
  57.         {
  58.                 keycont2=0;
  59.                 lock2=0;       
  60.         }
  61.         else if(lock2==0)
  62.         {
  63.                 keycont2++;
  64.                 if(keycont2>50)
  65.                 {
  66.                         keycont2=0;
  67.                         lock2=1;
  68.                         switch(knum)
  69.                         {
  70.                                 case 0:  break;
  71.                                 case 1: shi++; if(shi==24)shi=0; break;
  72.                                 case 2: fen++; if(fen==60)fen=0; break;
  73.                                 case 3: miao++; if(miao==60)miao=0; break;

  74.                         }
  75.                                        
  76.                 }       
  77.         }
  78. /////////////////////////
  79.         if(key3)
  80.         {
  81.                 keycont3=0;
  82.                 lock3=0;       
  83.         }
  84.         else if(lock3==0)
  85.         {
  86.                 keycont3++;
  87.                 if(keycont3>50)
  88.                 {
  89.                         keycont3=0;
  90.                         lock3=1;
  91.                         switch(knum)
  92.                         {
  93.                                 case 0:  break;
  94.                                 case 1: shi--; if(shi<0)shi=23; break;
  95.                                 case 2: fen--; if(fen<0)fen=59; break;
  96.                                 case 3: miao--; if(miao<0)miao=59; break;
  97.                         }
  98.                 }
  99.         }
  100. }


  101. void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao)
  102. {
  103.         uchar i;

  104.         //顯示第1位        小時10位
  105.         if(knum==1)
  106.         {
  107.                 if(shan%4==0)         //
  108.                 i = Table[15];
  109.                 else
  110.                 i = Table[shi10];
  111.        
  112.                 SMG_Int(i);                       
  113.                 SMG_Int(0x01);               
  114.        
  115.                 STCP = 0;         //數據并行輸出,(借助上升沿)
  116.                 _nop_();
  117.                 _nop_();
  118.                 STCP = 1;
  119.        
  120.                 //顯示第2位        小時個位
  121.                 if(shan%4==0)         //
  122.                 i = Table[15];
  123.                 else
  124.                 i = Table[shi];
  125.        
  126.                 SMG_Int(i);               
  127.                 SMG_Int(0x02);               
  128.        
  129.                 STCP = 0;
  130.                 _nop_();
  131.                 _nop_();
  132.                 STCP = 1;
  133.         }
  134.         else
  135.         {
  136.                 i = Table[shi10];
  137.        
  138.                 SMG_Int(i);                       
  139.                 SMG_Int(0x01);               
  140.        
  141.                 STCP = 0;         //數據并行輸出,(借助上升沿)
  142.                 _nop_();
  143.                 _nop_();
  144.                 STCP = 1;
  145.        
  146.                 //顯示第2位        小時個位
  147.                 i = Table[shi];
  148.        
  149.                 SMG_Int(i);               
  150.                 SMG_Int(0x02);               
  151.        
  152.                 STCP = 0;
  153.                 _nop_();
  154.                 _nop_();
  155.                 STCP = 1;       
  156.         }
  157.         //顯示第3位        -
  158.         if(shan<10)         //"-" 閃爍
  159.         i = Table[16];
  160.         else
  161.         i = Table[15];
  162.         SMG_Int(i);                       
  163.         SMG_Int(0x04);       

  164.         STCP = 0;
  165.         _nop_();
  166.         _nop_();
  167.         STCP = 1;

  168.         //顯示第4位        分鐘10位
  169.         if(knum==2)
  170.         {
  171.                 if(shan%4==0)         //
  172.                 i = Table[15];
  173.                 else
  174.                 i = Table[fen10];       
  175.                 SMG_Int(i);                       
  176.                 SMG_Int(0x08);               
  177.        
  178.                 STCP = 0;
  179.                 _nop_();
  180.                 _nop_();
  181.                 STCP = 1;
  182.        
  183.                 //顯示第5位        分鐘個位
  184.                 if(shan%4==0)         //
  185.                 i = Table[15];
  186.                 else
  187.                 i = Table[fen];
  188.        
  189.                 SMG_Int(i);                       
  190.                 SMG_Int(0x10);       
  191.        
  192.                 STCP = 0;
  193.                 _nop_();
  194.                 _nop_();
  195.                 STCP = 1;
  196.         }
  197.         else
  198.         {
  199.                 i = Table[fen10];
  200.        
  201.                 SMG_Int(i);                       
  202.                 SMG_Int(0x08);               
  203.        
  204.                 STCP = 0;
  205.                 _nop_();
  206.                 _nop_();
  207.                 STCP = 1;
  208.        
  209.                 //顯示第5位        分鐘個位
  210.                 i = Table[fen];
  211.        
  212.                 SMG_Int(i);                       
  213.                 SMG_Int(0x10);       
  214.        
  215.                 STCP = 0;
  216.                 _nop_();
  217.                 _nop_();
  218.                 STCP = 1;       
  219.         }
  220.         //顯示第6位        -
  221.         if(shan<10)           //"-" 閃爍
  222.         i = Table[16];
  223.         else
  224.         i = Table[15];

  225.         SMG_Int(i);                       
  226.         SMG_Int(0x20);       

  227.         STCP = 0;
  228.         _nop_();
  229.         _nop_();
  230.         STCP = 1;

  231.         if(knum==3)
  232.         {
  233.                 //顯示第7位        秒10位
  234.                 if(shan%4==0)         //
  235.                 i = Table[15];
  236.                 else
  237.                 i = Table[miao10];
  238.        
  239.                 SMG_Int(i);                       
  240.                 SMG_Int(0x40);       
  241.        
  242.                 STCP = 0;
  243.                 _nop_();
  244.                 _nop_();
  245.                 STCP = 1;
  246.        
  247.                 //顯示第8位        秒個位
  248.                 if(shan%4==0)         //
  249.                 i = Table[15];
  250.                 else
  251.                 i = Table[miao];
  252.        
  253.                 SMG_Int(i);               
  254.                 SMG_Int(0x80);       
  255.        
  256.                 STCP = 0;
  257.                 _nop_();
  258.                 _nop_();
  259.                 STCP = 1;
  260.         }
  261.         else
  262.         {
  263.                 //顯示第7位        秒10位
  264.                 i = Table[miao10];
  265.        
  266.                 SMG_Int(i);                       
  267.                 SMG_Int(0x40);       
  268.        
  269.                 STCP = 0;
  270.                 _nop_();
  271.                 _nop_();
  272.                 STCP = 1;
  273.        
  274.                 //顯示第8位        秒個位
  275.                 i = Table[miao];
  276.        
  277.                 SMG_Int(i);               
  278.                 SMG_Int(0x80);       
  279.        
  280.                 STCP = 0;
  281.                 _nop_();
  282.                 _nop_();
  283.                 STCP = 1;       
  284.         }
  285. }

  286. void SMG_Int(uchar Dat)         //通過8次循環將8位數據移入74HC595
  287. {
  288.         uchar i;
  289.         for(i=8;i>=1;i--)
  290.         {
  291.                 if (Dat & 0x80)
  292.                 {
  293.                         SER = 1;
  294.                 }
  295.                
  296.                 else
  297.                 {
  298.                         SER = 0;
  299.                 }
  300.                 Dat <<= 1;
  301.                 SHCP = 0;
  302.                 _nop_();
  303.                 _nop_();
  304.                 SHCP = 1;
  305.         }
  306. }

  307. void TimerInit()         //定時器0初始化
  308. {
  309.         TMOD = 0x01;
  310.         TH0 = (65536-50000)/256;        //50ms初值
  311.         TL0 = (65536-50000)%256;
  312.         EA = 1;
  313.         ET0 = 1;
  314.         TR0 = 1;

  315. }

  316. void Timer0() interrupt 1
  317. {
  318.         static uchar cnt;
  319.        
  320.         TH0 = (65536-50000)/256;
  321.         TL0 = (65536-50000)%256;
  322.        
  323.         shan++;
  324.         if(shan==20)
  325.                 shan=0;
  326.         if(knum==0)
  327.         {
  328.                 cnt++;
  329.                 if(cnt==20)
  330.                 {
  331.                         cnt = 0;
  332.                         miao++;
  333.                         if(miao == 60)
  334.                         {
  335.                                 miao = 0;
  336.                                 fen++;
  337.                                 if(fen==60)
  338.                                 {
  339.                                         fen = 0;
  340.                                         shi++;
  341.                                         if(shi==24)
  342.                                         {
  343.                                                 shi=0;
  344.                                         }
  345.                                 }
  346.                         }
  347.                 }
  348.         }
  349.         A=shi/10;
  350.         K=shi%10;
  351.         C=fen/10;
  352.         D=fen%10;
  353.         E=miao/10;
  354.         F=miao%10;
  355. }



復制代碼
回復

使用道具 舉報

12#
ID:140489 發表于 2022-12-1 08:50 | 只看該作者
動畫演示

錄像2_轉.gif (1.39 MB, 下載次數: 97)

錄像2_轉.gif
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲97 | 日本天堂视频在线观看 | 亚洲精品区 | 亚洲精品视频在线看 | 成人免费视频网站在线看 | 黑色丝袜三级在线播放 | 日韩精品在线免费观看视频 | 亚洲一区二区三区四区五区中文 | 三级黄色片在线播放 | 国产色婷婷精品综合在线播放 | 久久精品综合网 | 国产视频精品在线观看 | 久产久精国产品 | 国产一区二区三区色淫影院 | 国产一区二区激情视频 | 国产香蕉视频 | 看真人视频一级毛片 | 日本一级淫片免费啪啪3 | 国产欧美在线播放 | 91高清在线 | 欧美色性| 在线播放国产视频 | 久久99精品久久久久久国产越南 | 欧美xxxx性xxxxx高清 | 欧美日韩国产一区 | 91午夜在线 | 日本一区二区三区精品视频 | 亚洲在线日韩 | 欧美一区二区三区在线 | 中文字幕精品视频 | 亚洲高清免费视频 | 精品少妇一区二区三区在线播放 | 一区二区av | 免费成人午夜 | 男人的天堂中文字幕 | 国产精品69毛片高清亚洲 | 成人精品视频99在线观看免费 | 天天色天天射天天干 | 区一区二区三在线观看 | 99成人| 久久综合久色欧美综合狠狠 |