欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2242|回復(fù): 0
收起左側(cè)

51單片機(jī)編寫(xiě)74hc59數(shù)據(jù)傳輸功能,鐘表

[復(fù)制鏈接]
ID:334683 發(fā)表于 2018-5-21 10:12 | 顯示全部樓層 |閱讀模式
51 編寫(xiě)74hc59數(shù)據(jù)傳輸功能,鐘表

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit DAT=P1^1;                //數(shù)據(jù)傳送端口
  6. sbit CLK=P1^2;                //移位寄存器端口
  7. sbit STR=P1^3;                //儲(chǔ)存寄存器端口

  8. sbit K1=P3^0;       //移位按鍵
  9. sbit K2=P3^1;       //數(shù)字加1
  10. sbit K3=P3^2;       //數(shù)字減1

  11. sbit beep=P2^3;     //蜂鳴器
  12. void beepscan(void);

  13.                                          //0   1        2         3          4          5           6        7         8          9           -
  14. uchar code SMG[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //共陰極數(shù)碼管段選
  15. uchar code Wei[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                         //數(shù)碼管位選
  16. uchar num,num1,num2,num3,miao2,miao1,fen2,fen1,shi2,shi1;
  17. uchar i,j=0;
  18. /*===========
  19. ms級(jí)延時(shí)函數(shù)
  20. =============*/
  21. void delayms(uchar ms)
  22. {
  23.    uint i,j;
  24.    for(i=ms;i>0;i--)
  25.      for(j=115;j>0;j--);
  26. }

  27. /*================
  28. 寫(xiě)位碼數(shù)據(jù)到寄存器
  29. ==================*/
  30. void write_dat(uchar dat)          
  31. {
  32.    uchar i;
  33.    for(i=0;i<8;i++)
  34.    {
  35.            CLK=0;                                   //拉低移位寄存器
  36.            DAT=dat & 0x80;                   //將數(shù)據(jù)送入數(shù)據(jù)線
  37.            CLK=1;                                   //拉高移位寄存器,數(shù)據(jù)寄存器的數(shù)據(jù)可以移位
  38.            dat <<= 1;                           //數(shù)據(jù)左移到最高位
  39.    }
  40. }

  41. /*================
  42. 寫(xiě)位碼數(shù)據(jù)到寄存器
  43. ==================*/
  44. void write_dat1(uchar dat1)                  
  45. {
  46.    uchar i;
  47.    for(i=0;i<8;i++)
  48.    {
  49.            CLK=0;
  50.            DAT=dat1 & 0x80;
  51.            CLK=1;
  52.            dat1 <<= 1;
  53.    }
  54. }

  55. /*==========
  56. 輸出數(shù)據(jù)函數(shù)
  57. ============*/
  58. void out_dat()                  
  59. {
  60.    STR=0;                           //拉低儲(chǔ)存寄存器
  61.    _nop_();
  62.    STR=1;                           //拉高儲(chǔ)存寄存器
  63. }

  64. /*======
  65. 顯示函數(shù)
  66. ========*/
  67. void display(uchar miao1,uchar miao2,uchar fen1,uchar fen2,uchar shi1,uchar shi2)
  68. {
  69.                                              
  70.                  write_dat(Wei[0]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第一位
  71.                  delayms(1);                                //等待數(shù)據(jù)穩(wěn)定
  72.                  write_dat1(SMG[miao1]);        //寫(xiě)數(shù)碼管段碼數(shù)據(jù)秒個(gè)位
  73.                  delayms(1);                                //等待數(shù)據(jù)穩(wěn)定
  74.                  out_dat();                                          //發(fā)出數(shù)據(jù)

  75.                  write_dat(Wei[1]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第二位
  76.                  delayms(1);                                //等待數(shù)據(jù)穩(wěn)定
  77.                  write_dat1(SMG[miao2]);        //寫(xiě)數(shù)碼管段碼數(shù)據(jù)秒十位
  78.                  delayms(1);                                //等待數(shù)據(jù)穩(wěn)定
  79.          out_dat();                                        //發(fā)出數(shù)據(jù)

  80.                  write_dat(Wei[3]);
  81.                  delayms(1);
  82.                  write_dat1(SMG[fen1]);
  83.                  delayms(1);
  84.                  out_dat();

  85.                  write_dat(Wei[4]);
  86.                  delayms(1);
  87.                  write_dat1(SMG[fen2]);
  88.                  delayms(1);
  89.                  out_dat();

  90.                  write_dat(Wei[6]);
  91.                  delayms(1);
  92.                  write_dat1(SMG[shi1]);
  93.                  delayms(1);
  94.                  out_dat();

  95.                  write_dat(Wei[7]);                                  
  96.                  delayms(1);
  97.                  write_dat1(SMG[shi2]);
  98.                  delayms(1);
  99.                  out_dat();

  100.                  write_dat(Wei[2]);                                     //寫(xiě)數(shù)碼管第三位
  101.                  delayms(1);
  102.                  write_dat1(SMG[10]);                          //寫(xiě)數(shù)碼管第十一個(gè)斷碼 即‘-’
  103.                  delayms(1);
  104.                  out_dat();

  105.                  write_dat(Wei[5]);                                  //寫(xiě)數(shù)碼管第六位
  106.                  delayms(1);
  107.                  write_dat1(SMG[10]);                          //寫(xiě)數(shù)碼管第十一個(gè)斷碼 即‘-’
  108.                  delayms(1);
  109.                  out_dat();
  110. }
  111. void beepscan()
  112. {
  113.         beep=0;
  114.         delayms(100);
  115.         beep=1;
  116. }

  117. /*=========
  118.   按鍵函數(shù)
  119. ===========*/
  120. void keyscan()
  121. {
  122.         if(K1==0)                         //移位按鍵按下
  123.         {
  124.                 delayms(10);                  //消抖
  125.             if(K1==0)                     //再次檢測(cè)
  126.              {
  127.                          i++;
  128.                          while(!K1);                                                                
  129.                          beepscan();                         
  130.                          if(i==1)
  131.                          {
  132.                             TR0=0;  //關(guān)閉定時(shí)器
  133.                                 write_dat(Wei[0]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第一位
  134.                          }
  135.                          if(i==2)
  136.                          {
  137.                                 write_dat(Wei[1]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第二位                                 
  138.                          }
  139.                          if(i==3)
  140.                          {
  141.                                 write_dat(Wei[3]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第四位                                 
  142.                          }
  143.                          if(i==4)
  144.                          {
  145.                                 write_dat(Wei[4]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第五位                                 
  146.                          }
  147.                          if(i==5)
  148.                          {
  149.                                 write_dat(Wei[6]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第七位                                 
  150.                          }
  151.                          if(i==6)
  152.                          {
  153.                                 write_dat(Wei[7]);                        //寫(xiě)數(shù)碼管位碼數(shù)據(jù)第八位
  154.                 TR0=1;                      //打開(kāi)定時(shí)器                                  
  155.                          }
  156.          }
  157.     }
  158.         if(i!=0)
  159.         {       
  160.      if(K2==0)
  161.          {delayms(10);
  162.             if(K2==0)
  163.                 {
  164.                         beepscan();
  165.                         j++;
  166.                         if(j==9)
  167.                         j=0;
  168.                         write_dat1(SMG[j]);                            
  169.                     delayms(1);
  170.                     out_dat();
  171.         }
  172.         }
  173.     if(K3==0)
  174.                 delayms(10);
  175.             if(K3==0)
  176.                 {
  177.                         beepscan();
  178.                         j--;
  179.                         if(j==0)
  180.                         j=9;
  181.                         write_dat1(SMG[j]);                            
  182.                     delayms(1);
  183.                     out_dat();
  184.         }
  185.         }       
  186. }

  187. /*==============
  188. 定時(shí)器初始化函數(shù)
  189. ================*/
  190. void timer_init()
  191. {
  192.           TMOD=0x11;                //設(shè)置定時(shí)器0和1為工作方式1
  193.         TH0=(65536-45872)/256;          //裝初值50ms
  194.         TL0=(65536-45872)%256;
  195.         EA=1;                                          //開(kāi)總中斷
  196.         ET0=1;                                          //開(kāi)定時(shí)器0中斷                                          
  197.         TR0=1;                                          //啟動(dòng)定時(shí)器0
  198. }

  199. /*==================
  200. 時(shí)分秒轉(zhuǎn)換函數(shù)
  201. 轉(zhuǎn)換后送與數(shù)碼管顯示
  202. ====================*/
  203. void CH_time()
  204. {
  205.            if(num1==20)                 //num1加到20,表示一秒時(shí)間已到
  206.          {
  207.             num1=0;                         //將num1清零,重新計(jì)時(shí)
  208.                 num++;                         //秒開(kāi)始加
  209.             if(num==60)                 //秒加到60          
  210.          {    num=0;                 //將秒清零,重新計(jì)時(shí)
  211.               num2++;                 //分開(kāi)始加
  212.                 if(num2==60)
  213.                 {
  214.                   num2=0;
  215.                   num3++;
  216.                   if(num3==24)
  217.                   {
  218.                       num3=0;
  219.                   }

  220.         }       
  221.          }               
  222.         }
  223.             miao2=num/10;                //計(jì)算秒個(gè)位       
  224.                 miao1=num%10;                //計(jì)算秒十位
  225.             fen2=num2/10;
  226.             fen1=num2%10;
  227.             shi2=num3/10;
  228.                 shi1=num3%10;                                 
  229.             display(miao1,miao2,fen1,fen2,shi1,shi2);        //顯示時(shí)分秒
  230. }

  231. /*=======
  232.   主函數(shù)
  233. =========*/
  234. void main()
  235. {
  236.            timer_init();                //初始化函數(shù)          
  237.         while(1)
  238.         {
  239.            CH_time();                //轉(zhuǎn)換顯示函數(shù)
  240.            keyscan();

  241.     }
  242. }

  243. /*=======
  244. 中斷函數(shù)
  245. =========*/
  246. void T0_time() interrupt 1       
  247. {
  248.      TH0=(65536-45872)/256;                 
  249.          TL0=(65536-45872)%256;
  250.          num1++;
  251. }
復(fù)制代碼

所有資料51hei提供下載:
74hc595.zip (41.13 KB, 下載次數(shù): 4)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表