單片機鍵盤(pán)輸入編程

圖2為行列式鍵盤(pán)輸入示意圖,列線(xiàn)接P1.0~P1.3,行線(xiàn)接P1.4~P1.7。行列式鍵盤(pán)輸入適合于按鍵輸入多的情況,如有16個(gè)按鍵輸入,用簡(jiǎn)單按鍵輸入用要占用2個(gè)輸入口(共16位),而使用行列式鍵盤(pán)輸入只需占用一個(gè)輸入口(8位)。但行列式鍵盤(pán)輸入軟件編寫(xiě)較復雜,對初學(xué)者而言有一定的難度。
以上略談了一下按鍵輸入的情況。在很多狀態(tài)下,按鍵輸入的值要同時(shí)要在LED數碼管上顯示出來(lái)。如一個(gè)按鍵設計為輸入遞增(加法)鍵,可以設計成每點(diǎn)按一下,數值遞增加1,同時(shí)在LED數碼管上顯示出來(lái);也可設計成持續按下時(shí),數值以一定時(shí)間間隔(如0.3秒)累加。但是當欲輸入值較大時(shí)(如三位LED數碼管作輸入顯示時(shí)的輸入值最大為999),則可能按下鍵的時(shí)間太長(cháng)(最長(cháng)達300秒),看來(lái)這種方式只適用于一位或至多兩位數值(最大99)的輸入。當然你也可多設幾個(gè)鍵,每個(gè)鍵只負責一位數值的輸入,但這樣會(huì )占用較多的口線(xiàn),浪費寶貴的硬件資源。
大家可能見(jiàn)到過(guò),一些進(jìn)口的溫度控制器(如日本RKC INSTRUMENT INC. 生產(chǎn)的REX_C700溫控器)的面板設計為:溫度測量值用4位LED數碼管顯示,輸入設定值顯示也用4位LED數碼管,輸入按鍵只有4個(gè),一個(gè)為“模式設定鍵”,一個(gè)為“左移鍵”,另兩個(gè)為“加法鍵”、“減法鍵”。欲輸入設定值(溫控值)時(shí),按一下“模式設定鍵”,程序進(jìn)入設定狀態(tài),此時(shí)輸入設定值顯示的4位LED數碼管中,個(gè)位顯示最亮(穩定顯示),而十、百、千位顯示較暗(有閃爍感),說(shuō)明可對個(gè)位進(jìn)行輸入。按下“加法鍵”或“減法鍵”,即可輸入個(gè)位數的值;點(diǎn)按一下“左移鍵”,變?yōu)槭伙@示最亮,而個(gè)、百、千位顯示較暗,說(shuō)明可對十位進(jìn)行輸入。按下“加法鍵”或“減法鍵”,即可輸入十位數的值;……這樣可完成4位數的輸入。完成輸入后,再按一下“模式設定鍵”,程序即退出設定狀態(tài),進(jìn)入工作運行。用這種輸入方法,不僅輸入4位數用4個(gè)鍵即可,再多位(5位至24位)的輸入也用這4個(gè)鍵就夠了。
大家了解了這種新穎的按鍵輸入方式后,一定很感興趣,也想掌握設計方法。為了便于大家理解,這里結合筆者設計的一款“節能時(shí)控器”,詳細進(jìn)行講解?!肮澞軙r(shí)控器”用于定時(shí)控制大功率電器工作,因現采用分時(shí)計費方法,可起到節約開(kāi)支的作用,對工業(yè)生產(chǎn)成效顯著(zhù)。
圖3為“節能時(shí)控器”硬件構成原理圖?!肮澞軙r(shí)控器”共有4個(gè)輸入按鍵:set--模式設定鍵,left--左移鍵,up—加法鍵,on/off--定時(shí)1、2啟動(dòng)/關(guān)閉鍵。單片機IC1(AT89C2051)只有15條I/O線(xiàn),由于受I/O線(xiàn)數量限制,因此P1口中的P1.0~P1.3既作為驅動(dòng)4位LED數碼管的數據輸出一部分,同時(shí)也用作按鍵的輸入。無(wú)疑,這種方式大大節約了硬件的I/O線(xiàn),但也給編程者提出了更高的技術(shù)要求。限于篇幅,我們只對要詳解的按鍵輸入程序進(jìn)行分析,其它部分只略作介紹。如讀者需“節能時(shí)控器”詳細的源程序,可以Email:xuyuandz@163.com與作者聯(lián)系。
圖4為主程序狀態(tài)流程圖??梢?jiàn)主程序只負責進(jìn)行走時(shí)或調整時(shí)間的運算及顯示,而判斷按鍵輸入則放在T1定時(shí)中斷(10mS)服務(wù)子程序中。T0作為走時(shí)的基準被設置為100mS定時(shí)中斷。這種設計的優(yōu)點(diǎn)是大大簡(jiǎn)化了主程序設計,并且CPU會(huì )定時(shí)關(guān)心鍵盤(pán),只要定時(shí)中斷時(shí)間足夠短(如為幾十mS),就不會(huì )漏掉每一次的按鍵輸入。
評論