分享給大家 簡要:本文主要內容是用8051系列和74HC595構成的的數字鐘的電路設計。
一、硬件設計
利用8951的端口進行控制74HC595的RCK,SCK和/G腳,控制顯示部分的內容。為了節約89X51的端口,采用兩片74HC595級聯的方式,一片595控制八位數碼管的段碼端,一片595控制八位數碼管的片選端,因此我們在選不同位數碼管的同時,加以輸入不一樣的內容,這樣我們采用動態顯示的方法,可以利用八位數碼管進行時鐘顯示的目的。因為595采用級聯的方式,我們在給595數據的時候,應該先進行后聯一片595的數據傳輸。舉個例子,比方說我們采用第一片進行位選的控制,然后級聯的一片595進行段碼的輸出。那么我們在向兩片595采用數據傳輸的時候,就應該先進行數據顯示的傳輸,而不是進行位選數據的傳輸?傊,我們要根據兩片595的硬件設計不一樣,在軟件控制部分做好軟件部分的設計。
0.png (74.05 KB, 下載次數: 70)
下載附件
2019-6-1 03:22 上傳
圖中共由三個部分構成,即:單片控制部分,數據傳輸顯示部分和按鍵調整部分。
單片控制部分核心器件由8051系列構成,外圍部分這里不給出。
數據傳輸顯示部分又由兩片74HC595和兩個四位的數碼管組成。
按鍵調整部分主要是三個按鍵,對秒,分,小時的校準和調節。
二、軟件部分
- #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};
-
- //數據傳輸//
- 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;
- }
- }
- //數據傳輸//
- //延時單位//
- void delay (unsigned char h)
- { while(h--);
- }
- //延時單位//
-
- //數據輸出//
- void out(void)
- {P3_4=0;
- delay(50);
- P3_4=1;
- }
- //數據輸出//
- //按鍵控制//
- 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;
- }
- //鍵盤控制//
-
- //主函數//
- void main(void)
- {
- TMOD=0x02;
- TH0=0x06;
- TL0=0x06;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- bcon();
復制代碼 五、小結
本文主要利用74HC595芯片構成數字顯示的一個例子,在硬件設計和軟件控制部分,只要二者互相結合,可以得到不同的電路,效果也可以不一樣,這主要給讀者自己去發揮。
0.png (13.52 KB, 下載次數: 83)
下載附件
2019-6-1 03:23 上傳
全部資料51hei下載地址:
595串行時鐘顯示.rar
(72.67 KB, 下載次數: 284)
2019-6-1 00:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|