新聞中心

數(shù)碼管電子鐘

作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
主要元器件:89C52RC,74HL138,四位數(shù)碼管兩個,獨立按鈕三個,排線,杜邦線
原理:利用定時計數(shù)器定時50ms,每20次為一秒,產(chǎn)生一次中斷,在中斷函數(shù)中,對秒數(shù)加一,當(dāng)秒數(shù)加滿60后清零,分?jǐn)?shù)加一,同理可得分?jǐn)?shù)和時數(shù)直接安定關(guān)系。數(shù)碼管的顯示采用動態(tài)掃描法,至于如何對按鍵進(jìn)行實時響應(yīng),參考程序部分。
說明:由于本程序軟件部分既不是很復(fù)雜也不是很簡單,故采用C51編寫,硬件原理圖暫缺。軟件部分如下,本程序僅供QQ好友中從事嵌入式工作的叔叔和大哥們參考,修改。
結(jié)語:向廣大大哥大叔們表示感謝,在此也多謝導(dǎo)師的指引,青見一定不負(fù)所望,仰望星空,腳踏實地,五月份本人事情較多,估計沒有時間和你們討論一些問題,期待我們暑假的大飛機(jī)項目。告嵌入式同胞們,我的一些上位機(jī)軟件和硬件自學(xué)筆記在我的嵌入式服務(wù)器中,用戶名和密碼已經(jīng)給你們了。空間上的只是備份,大家無需來我空間,直接登錄服務(wù)器即可,下次有空決定為我的寶馬做一個速度計和里程表,希望有興趣的去我服務(wù)器討論。
附錄:代碼下載:http://www.51hei.com/f/smgpp.rar部分代碼:#include#define uchar unsigned char#define uint unsigned int#define delaytime 4//譯碼器的控制位sbit LA=P2^2;sbit LB=P2^3;sbit LC=P2^4;//鍵盤的控制位sbit SetMode=P2^5;sbit Plus=P2^6;sbit Minus=P2^7;sbit duanxuan=P1^0;//鍵盤的狀態(tài)位bit Sethour,Setmin,Setsec;//時間數(shù)據(jù)位uchar hour,min,sec,count,state;//共陽數(shù)碼管數(shù)字0~9的碼值uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};void show();void display_wei(uchar wei){wei=wei-1;LA=wei%2;LB=(wei/2)%2;LC=(wei/2/2)%2;}void display_duan(uchar duan){duanxuan=1;P3=duan;duanxuan=0;    }void init(){EA=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TMOD=0x01;TR0=1;hour=0;min=0;sec=0;count=0;Sethour=0;Setmin=0;Setsec=0;state=1;}void timer() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==10)state=~state;if(count==20){state=~state;count=0;sec++;}if(sec==60){sec=0;min++;}if(min==60){min=0;hour++;}if(hour==24)hour=0;}void delay(uint ms){unsigned char i;while(ms--){for(i=0;i<120;i++);}}void show(){      if(Sethour==1&&Setmin==0&&Setsec==0&&state==1){display_wei(1);display_duan(table[10]);delay(delaytime);display_wei(2);display_duan(table[10]);delay(delaytime);}else{display_wei(1);display_duan(table[hour%100/10]);delay(delaytime);display_wei(2);display_duan(table[hour%10]);delay(delaytime);}display_wei(3);display_duan(0x40);delay(delaytime);if(Sethour==1&&Setmin==1&&Setsec==0&&state==1){display_wei(4);display_duan(table[10]);delay(delaytime);display_wei(5);display_duan(table[10]);delay(delaytime);}else{display_wei(4);display_duan(table[min%100/10]);delay(delaytime);display_wei(5);display_duan(table[min%10]);delay(delaytime);}display_wei(6);display_duan(0x40);delay(delaytime);if(Sethour==1&&Setmin==1&&Setsec==1&&state==1){display_wei(7);display_duan(table[10]);delay(delaytime);display_wei(8);display_duan(table[10]);delay(delaytime);}else{display_wei(7);display_duan(table[sec%100/10]);delay(delaytime);display_wei(8);display_duan(table[sec%10]);delay(delaytime);}}void process_Plus(){if(Plus==0){delay(7);if(Plus==0){while(show(),Plus==0)delay(7);if(Sethour==1&&Setmin==0&&Setsec==0)hour++;if(Sethour==1&&Setmin==1&&Setsec==0)min++;if(Sethour==1&&Setmin==1&&Setsec==1)sec=0;}}}void process_Minus(){if(Minus==0){delay(7);if(Minus==0){while(show(),Minus==0)delay(7);if(Sethour==1&&Setmin==0&&Setsec==0){     hour--;if(hour==255)hour=23;}if(Sethour==1&&Setmin==1&&Setsec==0){min--;if(min==255)min=59;}if(Sethour==1&&Setmin==1&&Setsec==1){sec=0;}     }}}void main(){init();while(show(),process_Plus(),process_Minus(),1){if(SetMode==0){delay(10);if(SetMode==0){while(show(),SetMode==0);delay(10);if(SetMode==1){if(Sethour==0&&Setmin==0&&Setsec==1){Sethour=0;Setmin=0;Setsec=0;}if(Sethour==1&&Setmin==1&&Setsec==1){Sethour=0;Setmin=0;Setsec=1;}if(Sethour==1&&Setmin==1&&Setsec==0)Setsec=1;if(Sethour==1&&Setmin==0&&Setsec==0)Setmin=1;if(Sethour==0&&Setmin==0&&Setsec==0)Sethour=1;}                                 }}}     }


關(guān)鍵詞: 數(shù)碼管電子鐘89C52R

評論


技術(shù)專區(qū)

關(guān)閉