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

標(biāo)題: 單片機(jī)74hc595串行數(shù)碼管時(shí)鐘顯示程序+Proteus仿真 [打印本頁(yè)]

作者: skcxks    時(shí)間: 2019-6-1 00:06
標(biāo)題: 單片機(jī)74hc595串行數(shù)碼管時(shí)鐘顯示程序+Proteus仿真
分享給大家 簡(jiǎn)要:本文主要內(nèi)容是用8051系列和74HC595構(gòu)成的的數(shù)字鐘的電路設(shè)計(jì)。
一、硬件設(shè)計(jì)
利用8951的端口進(jìn)行控制74HC595的RCK,SCK和/G腳,控制顯示部分的內(nèi)容。為了節(jié)約89X51的端口,采用兩片74HC595級(jí)聯(lián)的方式,一片595控制八位數(shù)碼管的段碼端,一片595控制八位數(shù)碼管的片選端,因此我們?cè)谶x不同位數(shù)碼管的同時(shí),加以輸入不一樣的內(nèi)容,這樣我們采用動(dòng)態(tài)顯示的方法,可以利用八位數(shù)碼管進(jìn)行時(shí)鐘顯示的目的。因?yàn)?95采用級(jí)聯(lián)的方式,我們?cè)诮o595數(shù)據(jù)的時(shí)候,應(yīng)該先進(jìn)行后聯(lián)一片595的數(shù)據(jù)傳輸。舉個(gè)例子,比方說(shuō)我們采用第一片進(jìn)行位選的控制,然后級(jí)聯(lián)的一片595進(jìn)行段碼的輸出。那么我們?cè)谙騼善?95采用數(shù)據(jù)傳輸?shù)臅r(shí)候,就應(yīng)該先進(jìn)行數(shù)據(jù)顯示的傳輸,而不是進(jìn)行位選數(shù)據(jù)的傳輸。總之,我們要根據(jù)兩片595的硬件設(shè)計(jì)不一樣,在軟件控制部分做好軟件部分的設(shè)計(jì)。



圖中共由三個(gè)部分構(gòu)成,即:?jiǎn)纹刂撇糠郑瑪?shù)據(jù)傳輸顯示部分和按鍵調(diào)整部分。
單片控制部分核心器件由8051系列構(gòu)成,外圍部分這里不給出。
數(shù)據(jù)傳輸顯示部分又由兩片74HC595和兩個(gè)四位的數(shù)碼管組成。
按鍵調(diào)整部分主要是三個(gè)按鍵,對(duì)秒,分,小時(shí)的校準(zhǔn)和調(diào)節(jié)。

二、軟件部分
  1. #include <AT89X51.H>
  2. unsigned int tcount;
  3. unsigned char m;
  4. static unsigned char second,minute,hour;

  5. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  7. unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};



  8. //數(shù)據(jù)傳輸//
  9. void sdata(void)
  10. {unsigned char b,c,num;

  11.          if(b==0)
  12.         {        
  13.           b++;
  14.         num=segbit[m];
  15.           for(c=0;c<8;c++)
  16.                   {P3_2=0;
  17.                    P3_3=num&0x80;
  18.                    num<<=1;
  19.                    P3_2=1;
  20.            }
  21.         
  22.         }

  23.         if(b==1)

  24.         {  
  25.             b--;
  26.           if(m==2||m==5)
  27.           {num=0xbf;}
  28.           else
  29.            {num=fseg[disbuf[m]];}

  30.                  for(c=0;c<8;c++)
  31.                    {  P3_2=0;
  32.                          P3_3=num&0x80;
  33.                          num<<=1;
  34.                          P3_2=1;
  35.                    }
  36.         
  37.         }
  38.              m++;
  39.              if(m==8)
  40.                  {m=0;
  41.                      }
  42. }
  43. //數(shù)據(jù)傳輸//

  44. //延時(shí)單位//

  45. void delay (unsigned char h)
  46.   {        while(h--);
  47.   }
  48.   //延時(shí)單位//


  49. //數(shù)據(jù)輸出//
  50. void out(void)
  51. {P3_4=0;
  52.   delay(50);
  53.   P3_4=1;
  54. }
  55. //數(shù)據(jù)輸出//

  56.   //按鍵控制//
  57.   void bcon(void)
  58.    {if(P3_5==0)
  59.      {delay(100);
  60.            if(P3_5==0)
  61.             {second=0;
  62.                   while(P3_5==0);
  63.                   
  64.                 }
  65.          }
  66.          disbuf[0]=second%10;
  67.         disbuf[1]=second/10;

  68.         if(P3_6==0)
  69.      {delay(100);
  70.            if(P3_6==0)
  71.             {minute++;
  72.                   while(P3_6==0);
  73.                   if(minute==60)
  74.                    {minute=0;
  75.                    }
  76.                 }
  77.          }
  78.         disbuf[3]=minute%10;
  79.         disbuf[4]=minute/10;


  80.          if(P3_7==0)
  81.      {delay(100);
  82.            if(P3_7==0)
  83.             {hour++;
  84.                   while(P3_7==0);
  85.                    if(hour==24)
  86.                     {hour=0;
  87.                         }
  88.                 }
  89.          }
  90.         
  91.         disbuf[6]=hour%10;
  92.         disbuf[7]=hour/10;
  93.         
  94.         disbuf[0]=second%10;
  95.         disbuf[1]=second/10;
  96.         disbuf[3]=minute%10;
  97.         disbuf[4]=minute/10;
  98.         disbuf[6]=hour%10;
  99.         disbuf[7]=hour/10;

  100.    }
  101.    //鍵盤控制//
  102.   
  103.   //主函數(shù)//



  104. void main(void)
  105. {        
  106.   TMOD=0x02;
  107.   TH0=0x06;
  108.   TL0=0x06;
  109.   TR0=1;
  110.   ET0=1;
  111.   EA=1;

  112.   while(1)
  113.   {
  114.    bcon();
復(fù)制代碼
五、小結(jié)
本文主要利用74HC595芯片構(gòu)成數(shù)字顯示的一個(gè)例子,在硬件設(shè)計(jì)和軟件控制部分,只要二者互相結(jié)合,可以得到不同的電路,效果也可以不一樣,這主要給讀者自己去發(fā)揮。



全部資料51hei下載地址:
595串行時(shí)鐘顯示.rar (72.67 KB, 下載次數(shù): 284)


作者: Nilo    時(shí)間: 2019-6-1 22:33
謝謝分享!!!!!
作者: 236131948    時(shí)間: 2019-6-18 10:05
新手,剛好想實(shí)現(xiàn)595的時(shí)鐘電路軟件,下來(lái)學(xué)習(xí)
作者: 歐陽(yáng)云天    時(shí)間: 2019-6-18 18:45
請(qǐng)教一下,595寫數(shù)據(jù)的時(shí)候是寫最后一片再倒回來(lái)嗎?
作者: dong123d    時(shí)間: 2019-6-18 20:32

請(qǐng)教一下,595寫數(shù)據(jù)的時(shí)候是寫最后一片再倒回來(lái)嗎
作者: iaskall    時(shí)間: 2019-12-27 20:45
值得參考
作者: jxdianqi    時(shí)間: 2020-4-12 23:05
收下啦,謝謝分享
作者: 1401372496    時(shí)間: 2020-4-13 10:32
有匯編版的嗎

作者: elec_hangzhou    時(shí)間: 2021-11-2 16:34
某一個(gè)寶上的都沒(méi)有C51的程序, 剛好又買了595模塊,學(xué)習(xí)一下,謝謝分享。
作者: kz0018    時(shí)間: 2022-11-13 11:46
驅(qū)動(dòng)數(shù)碼管還是7219比較方便好用,但595有價(jià)格優(yōu)勢(shì),線路布局也方便點(diǎn)兒。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1