版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、鍵盤程序設(shè)計(jì),按鍵是一種開關(guān),通過外界作用力,導(dǎo)電金屬或?qū)щ姺墙饘俳佑|與分離實(shí)現(xiàn)電路通斷的控制是按鍵的基本機(jī)械原理,如計(jì)算機(jī)鍵盤、手機(jī)、MP3以及電子表按鍵。按鍵是計(jì)算機(jī)系統(tǒng)輸入設(shè)備,也是人機(jī)信息交換的主要途徑。 按鍵按下會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,不能安全有效的對(duì)系統(tǒng)控制,本節(jié)根據(jù)按鍵產(chǎn)生的抖動(dòng)機(jī)理,提出以中斷、延時(shí)等措施消除鍵盤輸入過程中的不穩(wěn)定因素,實(shí)現(xiàn)單片機(jī)系統(tǒng)鍵盤的穩(wěn)定輸入。,3.3.1 鍵盤抖動(dòng)現(xiàn)象,按鍵按下都會(huì)發(fā)出一聲響,誰然有的按鍵聲音很輕微,但這都是導(dǎo)體碰撞產(chǎn)生的震動(dòng)。這種現(xiàn)象稱為鍵盤抖動(dòng)。如果不對(duì)鍵盤的抖動(dòng)進(jìn)行處理,按鍵會(huì)對(duì)系統(tǒng)電路或程序產(chǎn)生意外的干擾。為了觀察按鍵的抖動(dòng)現(xiàn)象,我們先做
2、一個(gè)小實(shí)驗(yàn),分析一下一個(gè)微觸按鍵產(chǎn)生抖動(dòng)對(duì)系統(tǒng)的影響。,加數(shù)計(jì)數(shù)小系統(tǒng),圖3.3.1,圖3.3.2,在圖3-3-1所示的一個(gè)加數(shù)計(jì)數(shù)小系統(tǒng)中,設(shè)計(jì)數(shù)器的脈沖輸入端CP為上升沿有效,加計(jì)數(shù)器初始顯示為0。按鍵不按時(shí),CP = 0,計(jì)數(shù)器不加1計(jì)數(shù)。一般認(rèn)為:按鍵按下,CP端由低電平變?yōu)楦唠娖?,含有電平上升沿,?jì)數(shù)器加1計(jì)數(shù),并且按下1次,計(jì)數(shù)器加1。實(shí)際實(shí)驗(yàn)時(shí)會(huì)發(fā)現(xiàn),按鍵按下1次,計(jì)數(shù)器不是加1,而是跳躍一次性增加3或4。原因是按鍵按下在導(dǎo)體接觸的瞬間產(chǎn)生了震動(dòng)。圖3-3-2是按鍵按下過程中CP端實(shí)際電平改變情況。T1為不按按鍵時(shí)刻,T2為按鍵按下瞬間的抖動(dòng),T3為按鍵按下穩(wěn)定時(shí)刻,T4為按鍵放
3、開時(shí)刻瞬間,T5為按鍵放開時(shí)刻。,從圖中可以了解到,按鍵按下的瞬間由于震動(dòng)會(huì)是按鍵內(nèi)部的導(dǎo)體穩(wěn)定接觸,而是在導(dǎo)通和不導(dǎo)通之間來回彈跳,雖然時(shí)間一瞬間,但使CP端獲得了多個(gè)電平的上升沿。按鍵抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms10ms。因此不能直接把按鍵作為1個(gè)脈沖的輸入。 在數(shù)字電路中,常利用觸發(fā)器消除鍵盤抖動(dòng),但在單片機(jī)系統(tǒng)中,按鍵可以直接接在單片機(jī)的I/O口上,常利用鍵盤程序來消除鍵盤的抖動(dòng)現(xiàn)象。,3.3.2 利用外部中斷INT0實(shí)現(xiàn)鍵盤輸入,本案列利用外部中斷INT0作為鍵盤輸入端,當(dāng)按鍵按下時(shí),讓單片機(jī)執(zhí)行外部中斷服務(wù)程序,在中斷服務(wù)中完成鍵盤控制。 一、參考電路 在最小系
4、統(tǒng)基礎(chǔ)上,單片機(jī)的P0.0口接一只LED,鍵盤接在P3.2端口,按鍵不按時(shí),由于P3.2接有上啦電阻R3,所以P3.2此時(shí)為高電平+5V,如果按鍵按下,P3.2電源地短路,P3.2為低電平。為了消除鍵盤抖動(dòng)現(xiàn)象,鍵盤兩端并聯(lián)濾波電容器C4。,圖3-3-3 利用外部中斷INT0實(shí)現(xiàn)鍵盤輸入電路,二、程序設(shè)計(jì),#include sbit LED = P00; void int0_isr(void) interrrupt 0 /INT0中斷服務(wù)函數(shù),INT0的中斷號(hào)為0 unsigned char i = 0; i = i; /INT0中斷1次,i值改變1次 LED = i; /INT0中斷1次,L
5、ED工作狀態(tài)變化1次 delay(); /調(diào)用延時(shí)函數(shù) void main(void) LED = 0; /芯片初始化時(shí),LED滅 EA = 0; EX0 = 1; /開啟INT0中斷 PX0 = 1; /INT0中斷優(yōu)先,可以省去 EA = 1; /開啟總中斷開關(guān) while(1); /等待按鍵按下,中斷發(fā)生 ,三、程序說明,這里沒有設(shè)置INT0是下降沿觸發(fā)中斷或是低電平觸發(fā)中斷,原因是按鍵按下,不管產(chǎn)生不產(chǎn)生鍵抖現(xiàn)象,總能使INT0引腳產(chǎn)生1個(gè)下降沿和低電平。如果設(shè)置只有下降沿才觸發(fā)INT0中斷,需要利用設(shè)置計(jì)時(shí)器控制寄存器TCON的IT0 = 1位,按鍵按下是否產(chǎn)生中斷,可以利用程序檢測(cè)
6、TCON的IE0位。利用外部中斷觸發(fā)作為按鍵輸入很好的解決了鍵盤抖動(dòng)問題。如果需要多個(gè)鍵盤,把INT0口與I/O口之間用鍵盤連接,I/O輸出低電平掃面信號(hào)即可。在數(shù)碼管動(dòng)態(tài)顯示電路中,為了節(jié)省硬件資源,可以在INT0口和P2口之間接入鍵盤,實(shí)現(xiàn)8只按鍵輸入。,二、中斷請(qǐng)求標(biāo)志 1、TCON的中斷標(biāo)志,IT0(TCON.0),外部中斷0觸發(fā)方式控制位。 當(dāng)IT0=0時(shí),為電平觸發(fā)方式。 當(dāng)IT0=1時(shí),為邊沿觸發(fā)方式(下降沿有效)。 IE0(TCON.1),外部中斷0中斷請(qǐng)求標(biāo)志位。 IT1(TCON.2),外部中斷1觸發(fā)方式控制位。 IE1(TCON.3),外部中斷1中斷請(qǐng)求標(biāo)志位。 TF0(
7、TCON.5),定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志位。 TF1(TCON.7),定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志位。,3.3.3 利用延時(shí)程序防止鍵盤抖動(dòng),實(shí)現(xiàn)鍵盤輸入,按鍵按下產(chǎn)生的抖動(dòng)現(xiàn)象持續(xù)的時(shí)間不會(huì)很久,因此在按鍵按下后,可延時(shí)一段時(shí)間跳過抖動(dòng),再對(duì)按鍵的狀態(tài)檢測(cè),從而實(shí)現(xiàn)鍵盤輸入。本案例完成通過兩個(gè)鍵盤設(shè)計(jì),實(shí)現(xiàn)對(duì)數(shù)碼管顯示數(shù)據(jù)的調(diào)整。 一、電路原理 在單片機(jī)最系統(tǒng)的基礎(chǔ)上,KEY1、KEY2兩個(gè)鍵盤一端分別接P3.0、P3.1,另一端接地,見圖3-3-2所示。數(shù)碼管仍使用共陽型。在Proteuse軟件中,按鍵的英文名字為BUTTON,在Switches sbit key1 = P3.
8、0; sbit key2 = P3.1; uchar key1_state,key2_state; /按鍵按下的狀態(tài)變量 void delay(uchar i) while (i) i-; void key_scan (void) /鍵盤掃描函數(shù) if(key1 = 0) /如果按鍵按下 delay(200); /延時(shí)一段時(shí)間,消除鍵抖 while(key1 = 0) key1_state = 1; /再對(duì)按鍵檢測(cè),如果確實(shí)按下,按鍵狀態(tài)變量為1 if(key2 = 0) delay(200); while(key2 = 0) key2_state = 1; ,void main(void)
9、char i; while(1) key_scan(); /調(diào)用鍵盤掃描函數(shù) if(key1_state = 1) /判斷鍵盤狀態(tài)變量,如1,說明有按鍵按下 i+; /顯示數(shù)據(jù)增加 key1_state = 0; /數(shù)據(jù)增加后,鍵盤狀態(tài)變量清零 if(i9) i = 0; /數(shù)據(jù)增加超過9后,回到0 if(key2_state = 1) i-; key2_state = 0; if(i 0) i = 9; P0 = seven_segi; /顯示鍵盤調(diào)整數(shù)據(jù) ,三、程序說明,1如果按鍵按下不放開,程序一直執(zhí)行語句while(key1 = 0),這時(shí)程序在此處死循環(huán),不能執(zhí)行其它程序,所以本案例
10、按鍵抬起后數(shù)據(jù)才能得到調(diào)整。此種編程方法并不影響單片機(jī)驅(qū)動(dòng)1個(gè)數(shù)碼管工作,但動(dòng)態(tài)顯示電路在此種情況下不能正常工作。如果把while改換成if,按鍵只要按下數(shù)據(jù)就能調(diào)整,但如果按下不放開按鍵,數(shù)據(jù)自動(dòng)快速增加或減小。如果按鍵按下既不讓程序死循環(huán),也不讓由于按鍵按的時(shí)間過長(zhǎng)而數(shù)據(jù)調(diào)整失控,最可靠的辦法是利用變量記憶按鍵按下和放開的兩種狀態(tài),根據(jù)判斷實(shí)現(xiàn)鍵盤輸入。程序如下;,uchar key1_down_state, key1_up_state, /變量聲明,初始值為0 if(key1= 0) delay(200) if(key1= 0)keydownstate = 1; /如果按鍵按下,按下狀態(tài)
11、變量為1 if(key1 = 1 /按鍵抬起狀態(tài)變量為1 if(keyupstate = 1) keyupstate = 0; /按鍵按下抬起時(shí),數(shù)據(jù)調(diào)整 i+; ,我們也可以使用定時(shí)器中斷對(duì)鍵盤掃描,實(shí)現(xiàn)鍵盤輸入,下面時(shí)利用Timer0中斷實(shí)現(xiàn)的鍵盤輸入,其中鍵盤key1接單片機(jī)I/O口P3.0,Timer0工作在模式1。 #include #define timer0_count 0 xee18 #define times 20 sbit key = P30; char key_count; static void timer0_isr(void) interrupt 1 TR0 = 0;
12、 TL0 = (timer0_count ,2利用按鍵調(diào)整數(shù)據(jù)時(shí),有時(shí)會(huì)調(diào)整過量,需要進(jìn)行判斷重置。本案例i為char型變量, 數(shù)值在128127之間,語句if(i9) i = 0是向上增加過量復(fù)位。 3把鍵盤掃描key_scan()函數(shù)放在主函數(shù)的while循環(huán)體中,程序執(zhí)行時(shí)會(huì)斷調(diào)用key_scan(),如果沒有按鍵按下,執(zhí)行key_scan()的時(shí)間很短,如果有按鍵按下,用于按鍵掃面函數(shù)又調(diào)用了延時(shí)函數(shù),程序執(zhí)行時(shí)間會(huì)變長(zhǎng)。,3.3.4 44鍵盤程序設(shè)計(jì),44鍵盤16鍵盤陣列,本案例采用P1口完成,見圖3-3-5所示,把P18條I/O口分成4條列線4條行線交叉但不接觸,16個(gè)按鍵放置交叉
13、位置,在單片機(jī)復(fù)雜系統(tǒng)需要較多按鍵時(shí),這種接法可以節(jié)省單片機(jī)的硬件資源。鍵盤和P1口之間采用總線連接布局,在電路原理設(shè)計(jì)過程中,總線只是圖示引腳之間的相連接關(guān)系,但不具有電氣連接特性,相連引腳之間需要標(biāo)注相同的網(wǎng)絡(luò)標(biāo)號(hào)采用電氣連接特性,如圖3-3-5中,單片機(jī)的P1.0與鍵盤陣列上的P1.0相連。在設(shè)計(jì)單片機(jī)系統(tǒng)或其它電子系統(tǒng)時(shí),由于器件引腳較多,器件與器件之間會(huì)經(jīng)常采用總線連接,并且把電路模塊化設(shè)計(jì)。,二、程序設(shè)計(jì),#include #define uchar unsigned char code uchar P_scan = 0 x01,0 x02,0 x04,0 x08; /鍵盤行掃描臨
14、時(shí)數(shù)值 code uchar key_temp = 0 x11,0 x12,0 x14,0 x18 /鍵盤按下得到的臨時(shí)數(shù)據(jù) 0 x21,0 x22,0 x24,0 x28 0 x41,0 x42,0 x44,0 x48 0 x81,0 x82,0 x84,0 x88; code uchar seven_seg10 = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90; void delay(uchar i) while(i) i-;,uchar key_temp(void) /鍵盤掃描函數(shù) uchar i,j; for(i
15、 = 0; i 4;i+) /讓鍵盤行線輸出掃描數(shù)據(jù) P1 = P_scani; if(P1 != P_scani) delay(200); /如果有按鍵按下,P1口不是掃描數(shù)據(jù) if(P1 != P_scani) /延時(shí)一段時(shí)間后,分析一下P1口是什么數(shù)據(jù) for(j = 0;j16;j+) /如果P1口上的數(shù)據(jù)與鍵盤臨時(shí)數(shù)據(jù)相同,輸出臨時(shí)鍵值 if(P1 = key_tempj) return(j); eles /如果沒有按鍵按下,輸出沒有按鍵按下標(biāo)志“88” return(88); ,Void main(void) uchar i,j; while(1) i = key_temp(); if(i = 88) P0 = 0 xff; /如果沒有按鍵按下,P0 = 0 xff,不顯示 else P0 = seven_segi%10; P2 = 0 xbf; /顯示按鍵值個(gè)位數(shù) delay(200); /讓個(gè)位顯示一段時(shí)間再跳過 P0 = seven_segi/10; P2 = 0 x7f; /顯示鍵值十位數(shù) delay(200); /讓十位顯示一段時(shí)間再跳過 ,三、程序說明,1在鍵盤掃描函數(shù)中,執(zhí)行P1 = P_scani,鍵盤的行線會(huì)依次出現(xiàn)高電平,當(dāng)P1 = 0 x08,只有P1.3 = 1,如果此時(shí)有1個(gè)按鍵按下,比如K7按下,P1.3和P1.5接觸,這是再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電氣工程及其自動(dòng)化專業(yè)介紹
- 2024連鎖餐飲企業(yè)與食材供應(yīng)商的供貨合同
- 數(shù)控機(jī)床電氣控制第2版習(xí)題答案習(xí)題答案
- 2024物流與智慧城市建設(shè)合作框架協(xié)議3篇
- 2024版精裝修房屋合同模板:權(quán)益保障與細(xì)節(jié)解析
- 2025年度數(shù)據(jù)中心設(shè)備采購(gòu)及運(yùn)維服務(wù)合同3篇
- 沈陽城市學(xué)院《飛機(jī)載重與平衡》2023-2024學(xué)年第一學(xué)期期末試卷
- 陽泉師范高等??茖W(xué)校《輪機(jī)化學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024庭院房屋產(chǎn)權(quán)轉(zhuǎn)讓合同書樣本3篇
- 內(nèi)蒙古美術(shù)職業(yè)學(xué)院《區(qū)域經(jīng)濟(jì)學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙教版八年級(jí)上數(shù)學(xué)易錯(cuò)題
- 【基于雙因素理論的滴滴出行員工績(jī)效考核機(jī)制探析18000字(論文)】
- 2024水質(zhì)自動(dòng)監(jiān)測(cè)系統(tǒng)智慧站房建設(shè)技術(shù)指南
- 會(huì)計(jì)事務(wù)所合伙人撤資協(xié)議書
- GB/T 43674-2024加氫站通用要求
- 建筑施工進(jìn)度管理-項(xiàng)目進(jìn)度管理概述(施工組織)
- 初中九年級(jí)美術(shù)期末藝術(shù)測(cè)評(píng)指標(biāo)試卷及答案
- 新生入職紀(jì)委培訓(xùn)課件
- 違停抓拍方案
- 《生殖系統(tǒng)》課程教學(xué)大綱
- 檢驗(yàn)科質(zhì)控總結(jié)匯報(bào)
評(píng)論
0/150
提交評(píng)論