單片機應(yīng)用中的實用技巧(二)
5、用一個帶A/D的I/O口實現(xiàn)16個鍵盤輸入。
許多單片機帶有A/D轉(zhuǎn)換功能,在實際運用中,如果利用其中的一路A/D轉(zhuǎn)換,可以很方便地實現(xiàn)4×4鍵盤輸入。
如圖一所示,由于鍵盤的縱向電阻R1~R4的阻值為遞增狀態(tài),其增幅超過橫向最大阻值電阻R8,因此當按鍵從S1至S16按下時,縱向電阻與橫向電阻串聯(lián)的阻值也會相應(yīng)由低到高增加,如S1按下時串聯(lián)阻值為11k,S2按下時阻值為13.9k,S5按下時為25k,…,由于每個鍵按下后的串聯(lián)阻值均不同,并且依按鍵的次序呈逐漸增大趨勢,經(jīng)與R9分壓后,會在單片機的輸入端產(chǎn)生不同的電壓值,該電壓經(jīng)過A/D轉(zhuǎn)換后進行相應(yīng)處理,即可判斷出是哪個鍵按下。
在實際應(yīng)用中,由于阻值與電壓為非線性關(guān)系,因此在電阻選用及編程時需要注意,同時A/D轉(zhuǎn)換應(yīng)進行相應(yīng)的軟件處理(如重復(fù)檢測兩次才確認),以消除按鍵抖動引起的誤判斷。
6、用軟件產(chǎn)生PWM實現(xiàn)模擬量輸出。
在單片機應(yīng)用中,常需要通過輸出模擬量來對外部進行控制,但增加D/A轉(zhuǎn)換芯片不僅需要占用I/O口資源,同時也會使成本增加。下圖提供一種通過單片機的定時器中斷來用軟件的方法產(chǎn)生PWM,并經(jīng)過濾波與跟隨電路產(chǎn)生準確的模擬量輸出。
該電路只用單片機的一個I/O腳實現(xiàn)D/A轉(zhuǎn)換功能。其輸出的模擬量電壓Vout=VDD*D1/(D1+D2)。該輸出電壓帶有紋波,當RC值足夠大時,該紋波值幾乎為零,可忽略不計。D1與D2可通過單片機內(nèi)部的定時器中斷來準確產(chǎn)生。該模擬量從輸出PWM到穩(wěn)定狀態(tài),需要一定的時間,若要縮短達到穩(wěn)定的時間,可以減小R1和C1的值,但紋波會增大,這在設(shè)計時需要注意。
7、用2個I/O口實現(xiàn)多按鍵掃描及鍵盤喚醒
在一些低功耗的單片機應(yīng)用場合中,常常需要讓單片機平時工作于睡眠狀態(tài),而在有鍵盤輸入時喚醒單片機以做相應(yīng)控制。單個按鍵喚醒單片機容易實現(xiàn),但多個按鍵都能喚醒單片機有一定的困難,本文提供一種解決該問題的思路。
其工作過程說明如下:
1. 單片機的GP1口具有電平變化喚醒單片機功能,單片機在進入睡眠前將GP1口設(shè)置為輸入狀態(tài),GP2設(shè)置為輸出高電平狀態(tài)。
2. 當任一鍵被按下時,GP1口將變?yōu)楦唠娖?,使單片機喚醒。此時將GP2口設(shè)置為輸出低電平,短延時,使C1電容放電。
3. 將GP1設(shè)置為輸出高電平,GP2設(shè)置為輸入狀態(tài),定時器開始記時。
4. 當GP2由低電平變?yōu)楦唠娖降乃查g,記錄定時器時間。由于不同的按鍵按下時,分壓器電路改變了RC電路的電壓上升速度,因此根據(jù)測得的定時器值的大小通過查表法可判斷出是哪個鍵被按下。
以上方法只適用于單鍵判斷,當多鍵同時按下時是無法判斷的。該方法需要占用單片機的定時器資源。
8、單片機的自動關(guān)機功能及開機按鍵兼做功能按鍵。
在許多電池供電的應(yīng)用場合,要求電路平時處于關(guān)機狀態(tài)以節(jié)省電能,而當開機鍵按下后單片機才開始工作,工作完后又能自動關(guān)機。
下圖所示電路即可完成此種功能。在上電后,由于V1處于關(guān)斷狀態(tài),單片機并不耗電,整個電路所消耗電流只有不到10μA。
當S1按下后,V1導(dǎo)通,78L05獲得電源,輸出穩(wěn)定的5V使單片機開始工作,同時單片機的GP0送出高電平,使V2導(dǎo)通,這使V1保持在導(dǎo)通狀態(tài),單片機獲得持續(xù)的電源進行工作,當單片機任務(wù)處理完成后,單片機的GP0輸出低電平,將V2關(guān)斷,使V1也處于關(guān)斷狀態(tài),單片機的電源又被關(guān)斷,電路又恢復(fù)到低功耗狀態(tài),其消耗電流小于10μA。
在單片機獲電工作后,原作為電源開關(guān)按鍵的S1也可以作為功能按鍵來使用,當S1未按下時,GP1口為高電平,而當S1按下后,GP1變?yōu)榈碗娖?,因此單片機可以檢測該按鍵,并做相應(yīng)的功能控制。例如可將S1定義為開關(guān)機按鍵或其它功能按鍵。
評論