李慶江
(菏澤學(xué)院教務(wù)處,山東 菏澤 274000)
單片機(jī)早已廣泛應(yīng)用于多種領(lǐng)域,尤其在智能儀表類中的應(yīng)用更是如此,不僅引起了產(chǎn)品本身的變革,也深深地影響了設(shè)計(jì)理念的變革。智能儀表作為一種智能系統(tǒng),其核心在于單片機(jī)?;趩纹瑱C(jī)的系統(tǒng)設(shè)計(jì),已經(jīng)成為廣大電子設(shè)計(jì)工程師或相關(guān)領(lǐng)域設(shè)計(jì)者關(guān)注的熱點(diǎn)。
電子時(shí)鐘基本功能要求:可調(diào)整運(yùn)行的電子鐘具有兩種工作狀態(tài):(1)運(yùn)行狀態(tài):在此狀態(tài)下,按K3、K4鍵均無(wú)效,按 K1、K2鍵有效,按下 K1鍵后,進(jìn)入調(diào)整狀態(tài);(2)調(diào)整狀態(tài):按K1鍵進(jìn)入,在此狀態(tài)下,按K3、K4鍵均有效。按下K3鍵,可調(diào)整要調(diào)節(jié)的數(shù)字的位置狀態(tài);按下K4鍵,則一次分別對(duì)鬧鐘開(kāi)關(guān),及鬧鐘時(shí)、分、秒,時(shí)間時(shí)、分、秒加一,再按K3退出調(diào)整狀態(tài),進(jìn)入運(yùn)行狀態(tài)。
利用AT89S52單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器進(jìn)行中斷定時(shí),配合軟件延時(shí)實(shí)現(xiàn)時(shí)、分、秒的計(jì)時(shí)。該方案節(jié)省硬件成本,且能使讀者在定時(shí)/計(jì)數(shù)器的使用、中斷及程序設(shè)計(jì)方面得到鍛煉與提高,對(duì)單片機(jī)的指令系統(tǒng)能有更深入的了解,從而對(duì)學(xué)好單片機(jī)技術(shù)這門(mén)課程起到一定的作用。
AT89S52的P0口和P2口外接由LCD 1601A構(gòu)成的顯示器,用P0口作為L(zhǎng)CD的數(shù)據(jù)口,P2的P2.4、P2.5、P2.6口作為 LCD的控制口,P3.2、P3.3、P2.0、P2.2口外接兩個(gè)按鍵K1、K2、K3、K4構(gòu)成鍵盤(pán)電路。
一個(gè)基本的數(shù)字鐘電路主要由譯碼顯示器、“時(shí)”,“分”,“秒”計(jì)數(shù)器、校時(shí)電路、報(bào)時(shí)電路和振蕩器組成。主電路系統(tǒng)由秒信號(hào)發(fā)生器、“時(shí)、分、秒”計(jì)數(shù)器、譯碼器及顯示器、校時(shí)電路、整點(diǎn)報(bào)時(shí)電路組成。秒信號(hào)產(chǎn)生器是整個(gè)系統(tǒng)的時(shí)基信號(hào),它直接決定計(jì)時(shí)系統(tǒng)的精度,一般用石英晶體振蕩器加分頻器來(lái)實(shí)現(xiàn)。將標(biāo)準(zhǔn)秒信號(hào)送入“秒計(jì)數(shù)器”,“秒計(jì)數(shù)器”采用60進(jìn)制計(jì)數(shù)器,每累計(jì)60秒發(fā)出一個(gè)“分脈沖”信號(hào),該信號(hào)將作為“分計(jì)數(shù)器”的時(shí)鐘脈沖?!皶r(shí)計(jì)數(shù)器”采用24進(jìn)制計(jì)時(shí)器,可實(shí)現(xiàn)對(duì)一天24小時(shí)的累計(jì)。電子時(shí)鐘由89C52,1601液晶等構(gòu)成,采用晶振電路作為驅(qū)動(dòng)電路。電路中唯一的一個(gè)控制鍵K1進(jìn)入中斷模式的功能;再按下K3設(shè)置鍵,依次可以實(shí)現(xiàn)對(duì)鬧鐘開(kāi)關(guān),時(shí)間的時(shí)、分、秒,鬧鐘設(shè)定的時(shí)、分、秒位置的設(shè)定;再按下K4調(diào)節(jié)鍵可以實(shí)現(xiàn)對(duì)鬧鐘開(kāi)關(guān),時(shí)間的時(shí)、分、秒,鬧鐘設(shè)定的時(shí)、分、秒的加一調(diào)節(jié)。
該設(shè)計(jì)只用了一個(gè)鍵盤(pán),但實(shí)現(xiàn)的功能卻比較完善,減少了硬件資源的損耗,該鍵盤(pán)可以實(shí)現(xiàn)小時(shí)和分鐘的調(diào)節(jié)以及控制是否進(jìn)入省電模式。當(dāng)按鍵按下又松開(kāi),可以實(shí)現(xiàn)屏蔽數(shù)碼管顯示的功能,達(dá)到省電的目的;直接按下不松開(kāi),則可以通過(guò)按鍵實(shí)現(xiàn)分鐘的累加,每按一次分鐘加一;而連續(xù)兩次按下按鍵不放松,則可實(shí)現(xiàn)小時(shí)的調(diào)節(jié),同樣每按一次小時(shí)加一,達(dá)到時(shí)間調(diào)節(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; }
鍵掃描程序說(shuō)明:開(kāi)始,進(jìn)行按鍵判斷是否有鍵按下,是的情況下,延時(shí)一段時(shí)間,繼續(xù)判斷此按鍵是否按下,是的話,保存鍵值及相應(yīng)處理程序,結(jié)束。
通過(guò)應(yīng)用KeiluVision3設(shè)計(jì)完成軟件編寫(xiě)調(diào)試,就可以實(shí)現(xiàn)89c52驅(qū)動(dòng)LCD 1601A電子鐘的軟件設(shè)計(jì)部分,并生成hex文件。再用usb轉(zhuǎn)ttl數(shù)據(jù)線把程序?qū)懙?9C51,使其具有顯示、調(diào)節(jié)、鬧鐘等功能。如進(jìn)入調(diào)整狀態(tài),按K1鍵進(jìn)入。在此狀態(tài)下,按K3、K4鍵均有效。如按下K3鍵,調(diào)整要調(diào)節(jié)的數(shù)字的位置狀態(tài);按下K4鍵,則一次分別對(duì)鬧鐘開(kāi)關(guān),及鬧鐘時(shí)、分、秒,時(shí)間時(shí)、分、秒加一,再按K3退出調(diào)整狀態(tài),進(jìn)入運(yùn)行狀態(tài)。
由于時(shí)間是通過(guò)軟件來(lái)編寫(xiě),單片機(jī)運(yùn)行來(lái)控制的,而不是硬件控制的,在精度方面受單片機(jī)性能和程序的限制,故精度和效率可能不是太精確,不能和專由硬件控制的單片機(jī)電子時(shí)鐘相比,在這方面存在不足。
[1]吳金戎,沈慶陽(yáng),郭庭吉.8051單片機(jī)實(shí)踐與應(yīng)用[M].北京:清華大學(xué)出版社,2002.
[2]郭天祥.新概念51單片機(jī)C語(yǔ)言教程——入門(mén),提高,開(kāi)發(fā),拓展全攻略[M].北京:電子工業(yè)出版社,2009.
[3]韓廣興.電子元器件與實(shí)用電路基礎(chǔ)[M].北京:電子工業(yè)出版社,2005.
[4]戴勝華.單片機(jī)原理與應(yīng)用[M].北京:北京交通大學(xué)出出版社,2005.