李慶江
(菏澤學院教務處,山東 菏澤 274000)
單片機早已廣泛應用于多種領域,尤其在智能儀表類中的應用更是如此,不僅引起了產品本身的變革,也深深地影響了設計理念的變革。智能儀表作為一種智能系統(tǒng),其核心在于單片機?;趩纹瑱C的系統(tǒng)設計,已經(jīng)成為廣大電子設計工程師或相關領域設計者關注的熱點。
電子時鐘基本功能要求:可調整運行的電子鐘具有兩種工作狀態(tài):(1)運行狀態(tài):在此狀態(tài)下,按K3、K4鍵均無效,按 K1、K2鍵有效,按下 K1鍵后,進入調整狀態(tài);(2)調整狀態(tài):按K1鍵進入,在此狀態(tài)下,按K3、K4鍵均有效。按下K3鍵,可調整要調節(jié)的數(shù)字的位置狀態(tài);按下K4鍵,則一次分別對鬧鐘開關,及鬧鐘時、分、秒,時間時、分、秒加一,再按K3退出調整狀態(tài),進入運行狀態(tài)。
利用AT89S52單片機內部的定時/計數(shù)器進行中斷定時,配合軟件延時實現(xiàn)時、分、秒的計時。該方案節(jié)省硬件成本,且能使讀者在定時/計數(shù)器的使用、中斷及程序設計方面得到鍛煉與提高,對單片機的指令系統(tǒng)能有更深入的了解,從而對學好單片機技術這門課程起到一定的作用。
AT89S52的P0口和P2口外接由LCD 1601A構成的顯示器,用P0口作為LCD的數(shù)據(jù)口,P2的P2.4、P2.5、P2.6口作為 LCD的控制口,P3.2、P3.3、P2.0、P2.2口外接兩個按鍵K1、K2、K3、K4構成鍵盤電路。
一個基本的數(shù)字鐘電路主要由譯碼顯示器、“時”,“分”,“秒”計數(shù)器、校時電路、報時電路和振蕩器組成。主電路系統(tǒng)由秒信號發(fā)生器、“時、分、秒”計數(shù)器、譯碼器及顯示器、校時電路、整點報時電路組成。秒信號產生器是整個系統(tǒng)的時基信號,它直接決定計時系統(tǒng)的精度,一般用石英晶體振蕩器加分頻器來實現(xiàn)。將標準秒信號送入“秒計數(shù)器”,“秒計數(shù)器”采用60進制計數(shù)器,每累計60秒發(fā)出一個“分脈沖”信號,該信號將作為“分計數(shù)器”的時鐘脈沖。“時計數(shù)器”采用24進制計時器,可實現(xiàn)對一天24小時的累計。電子時鐘由89C52,1601液晶等構成,采用晶振電路作為驅動電路。電路中唯一的一個控制鍵K1進入中斷模式的功能;再按下K3設置鍵,依次可以實現(xiàn)對鬧鐘開關,時間的時、分、秒,鬧鐘設定的時、分、秒位置的設定;再按下K4調節(jié)鍵可以實現(xiàn)對鬧鐘開關,時間的時、分、秒,鬧鐘設定的時、分、秒的加一調節(jié)。
該設計只用了一個鍵盤,但實現(xiàn)的功能卻比較完善,減少了硬件資源的損耗,該鍵盤可以實現(xiàn)小時和分鐘的調節(jié)以及控制是否進入省電模式。當按鍵按下又松開,可以實現(xiàn)屏蔽數(shù)碼管顯示的功能,達到省電的目的;直接按下不松開,則可以通過按鍵實現(xiàn)分鐘的累加,每按一次分鐘加一;而連續(xù)兩次按下按鍵不放松,則可實現(xiàn)小時的調節(jié),同樣每按一次小時加一,達到時間調節(jié)的目的。
具體按鍵掃描模塊代碼如下:
unsigned char scan_key()
{skey=0x00; skey|=PRE; skey=skey<<1;skey|=SET; return skey;}
void int0()interrupt0
{TR0=0; IE=0; lcd_wcmd(0x0e);alarm=1;
update_disbuf(0x50,"alarm:",armhour,armmin,armsec);
pro_display();lcd_pos(0x07);flag=0;vkey=0x03;
while(flag^0x07){skey=scan_key();if(skey^vkey){delay(10);skey=scan_key();if(skey^vkey){vkey=skey;if(skey==0x01){flag++;switch(flag){flag++;case1:lcd_pos(0x41);breakcase2:lcd_pos(0x44);break;case 3:lcd_pos(0x47);break;case4:update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x41);break;case5:lcd_pos(0x44);break;case 6:lcd_pos(0x47);break;default:break;}}if(skey==0x02){pro_key();}}}lcd_wcmd(0x0c);lcd_wcmd(0x01);IE=0x8f;TR0=1; }
鍵掃描程序說明:開始,進行按鍵判斷是否有鍵按下,是的情況下,延時一段時間,繼續(xù)判斷此按鍵是否按下,是的話,保存鍵值及相應處理程序,結束。
通過應用KeiluVision3設計完成軟件編寫調試,就可以實現(xiàn)89c52驅動LCD 1601A電子鐘的軟件設計部分,并生成hex文件。再用usb轉ttl數(shù)據(jù)線把程序寫到89C51,使其具有顯示、調節(jié)、鬧鐘等功能。如進入調整狀態(tài),按K1鍵進入。在此狀態(tài)下,按K3、K4鍵均有效。如按下K3鍵,調整要調節(jié)的數(shù)字的位置狀態(tài);按下K4鍵,則一次分別對鬧鐘開關,及鬧鐘時、分、秒,時間時、分、秒加一,再按K3退出調整狀態(tài),進入運行狀態(tài)。
由于時間是通過軟件來編寫,單片機運行來控制的,而不是硬件控制的,在精度方面受單片機性能和程序的限制,故精度和效率可能不是太精確,不能和專由硬件控制的單片機電子時鐘相比,在這方面存在不足。
[1]吳金戎,沈慶陽,郭庭吉.8051單片機實踐與應用[M].北京:清華大學出版社,2002.
[2]郭天祥.新概念51單片機C語言教程——入門,提高,開發(fā),拓展全攻略[M].北京:電子工業(yè)出版社,2009.
[3]韓廣興.電子元器件與實用電路基礎[M].北京:電子工業(yè)出版社,2005.
[4]戴勝華.單片機原理與應用[M].北京:北京交通大學出出版社,2005.