基於微控制器的數字鐘系統設計(電路+程式)
阿新 • • 發佈:2018-12-05
上圖是Proteus模擬圖,其中反相器用74lHC14,排阻用10K的,晶振用12MHZ的,電阻R1-R8用200歐的即可。但在實際製作時數碼管可以用兩個四位一體共陽極的,這樣連線電路會更加方便。可以用三極體代替反相器,這樣可以節約成本,但代替後無法用Proteus模擬出來,下圖為代替後的圖片,三極體用常用的9012或者9015即可,經本人實際驗證效果非常好。
下圖為原理圖:
下圖為實物圖
以下為源程式
#include #define uint unsigned int #define uchar unsigned char uchar code table[]={ //不帶小數點的數碼管編碼 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; uchar code table1[]={ //帶小數點的數碼管編碼 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x78, 0x00,0x10}; uchar shi=12,second,minute; uint num,num1,num2,num3; sbit k1=P1^4; sbit k2=P1^5; void display(); void keyscan(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; } void main() { init(); while(1) { keyscan(); display(); } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++; if(num==20) { num=0; second++; if(second==60) { second=0; minute++; } if(minute>=60) { minute=0; shi++; } if(shi>=24) shi=0; } } void display() { P2=0xdf; P0=table[second]; delay(2); P2=0xff; P2=0xef; P0=table[second/10]; delay(2); P2=0xff; P2=0xf7; P0=table1[minute]; delay(2); P2=0xff; P2=0xfb; P0=table[minute/10]; delay(2); P2=0xff; P2=0xfd; P0=table1[shi]; delay(2); P2=0xff; P2=0xfe; P0=table[shi/10]; delay(2); P2=0xff; } void keyscan() { if(k1==0) { delay(10); if(k1==0) { shi++; while(!k1); } } if(k2==0) { delay(10); if(k2==0) { minute++; while(!k2); } } }
獲取更多學習資料,掃碼關注,海量雲盤資源等你下載。