|
分享給大家 簡(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é)。
二、軟件部分
- #include <AT89X51.H>
- unsigned int tcount;
- unsigned char m;
- static unsigned char second,minute,hour;
-
- unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
- unsigned char disbuf[8]={0,0,0,0,0,0,0,0};
-
- //數(shù)據(jù)傳輸//
- void sdata(void)
- {unsigned char b,c,num;
- if(b==0)
- {
- b++;
- num=segbit[m];
- for(c=0;c<8;c++)
- {P3_2=0;
- P3_3=num&0x80;
- num<<=1;
- P3_2=1;
- }
-
- }
- if(b==1)
- {
- b--;
- if(m==2||m==5)
- {num=0xbf;}
- else
- {num=fseg[disbuf[m]];}
- for(c=0;c<8;c++)
- { P3_2=0;
- P3_3=num&0x80;
- num<<=1;
- P3_2=1;
- }
-
- }
- m++;
- if(m==8)
- {m=0;
- }
- }
- //數(shù)據(jù)傳輸//
- //延時(shí)單位//
- void delay (unsigned char h)
- { while(h--);
- }
- //延時(shí)單位//
-
- //數(shù)據(jù)輸出//
- void out(void)
- {P3_4=0;
- delay(50);
- P3_4=1;
- }
- //數(shù)據(jù)輸出//
- //按鍵控制//
- void bcon(void)
- {if(P3_5==0)
- {delay(100);
- if(P3_5==0)
- {second=0;
- while(P3_5==0);
-
- }
- }
- disbuf[0]=second%10;
- disbuf[1]=second/10;
- if(P3_6==0)
- {delay(100);
- if(P3_6==0)
- {minute++;
- while(P3_6==0);
- if(minute==60)
- {minute=0;
- }
- }
- }
- disbuf[3]=minute%10;
- disbuf[4]=minute/10;
- if(P3_7==0)
- {delay(100);
- if(P3_7==0)
- {hour++;
- while(P3_7==0);
- if(hour==24)
- {hour=0;
- }
- }
- }
-
- disbuf[6]=hour%10;
- disbuf[7]=hour/10;
-
- disbuf[0]=second%10;
- disbuf[1]=second/10;
- disbuf[3]=minute%10;
- disbuf[4]=minute/10;
- disbuf[6]=hour%10;
- disbuf[7]=hour/10;
- }
- //鍵盤控制//
-
- //主函數(shù)//
- void main(void)
- {
- TMOD=0x02;
- TH0=0x06;
- TL0=0x06;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- bcon();
復(fù)制代碼 五、小結(jié)
本文主要利用74HC595芯片構(gòu)成數(shù)字顯示的一個(gè)例子,在硬件設(shè)計(jì)和軟件控制部分,只要二者互相結(jié)合,可以得到不同的電路,效果也可以不一樣,這主要給讀者自己去發(fā)揮。
全部資料51hei下載地址:
595串行時(shí)鐘顯示.rar
(72.67 KB, 下載次數(shù): 284)
2019-6-1 00:05 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|