版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
在線教務(wù)輔導(dǎo)網(wǎng):教材其余課件及動畫素材請查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:在線教務(wù)輔導(dǎo)網(wǎng):http://www.shangfuwang1第8章鍵盤控制LED燈、數(shù)碼管8.1功能要求8.2任務(wù)分析
8.3
鍵盤接口技術(shù)8.3.1鍵盤工作特性8.3.2獨立式鍵盤接口電路8.3.3矩陣式鍵盤接口電路8.4
鍵盤接口程序設(shè)計8.4.1本項目使用的鍵盤接口8.4.2
獨立式鍵盤控制LED燈8.4.3矩陣式鍵盤控制數(shù)碼管第8章鍵盤控制LED燈、數(shù)碼管8.1功能要求28.1功能要求
一.基本要求能用獨立式鍵盤控制LED燈。二.發(fā)揮部分能用矩陣式鍵盤輸入數(shù)據(jù)和命令,當(dāng)鍵入數(shù)字鍵時,數(shù)碼管顯示相應(yīng)數(shù)字,當(dāng)輸入功能鍵時,完成相應(yīng)的功能?;啬夸?/p>
8.1功能要求一.基本要求回目錄38.2任務(wù)分析
要完成此任務(wù),主要需解決如下四方面的問題:為什么要軟件延時去抖動;獨立式和矩陣式鍵盤接口電路的設(shè)計方法;獨立式和矩陣式鍵盤程序的設(shè)計方法?;啬夸?.2任務(wù)分析要完成此任務(wù),主要需解決如下四方面的問題48.3.1鍵盤工作特性
鍵盤是一組按鍵的組合,它是單片機最常用的輸入設(shè)備,單片機中的鍵盤一般通過按鍵開關(guān)自己設(shè)計焊接,當(dāng)然也可到廠家定制,如圖8-1c)所示。本節(jié)主要講解通過按鍵開關(guān)自己設(shè)計鍵盤的方法,根據(jù)按鍵開關(guān)與單片機接口的連接方式,可以分為獨立式鍵盤和矩陣式鍵盤。8.3鍵盤接口技術(shù)回目錄8.3.1鍵盤工作特性8.3鍵盤接口技術(shù)回目錄5按鍵開關(guān)介紹
單片機中的鍵盤通常由按鍵開關(guān)組成,按鍵開關(guān)的外形和參數(shù)如下圖所示,它是一種常開型按鍵開關(guān),為了便于安裝固定,它有四個管腳,其管腳說明如下圖中的文字所示,在常態(tài)時開關(guān)觸點(1和2)處于斷開狀態(tài),只有按下按鍵時開關(guān)觸點才閉合短路,所以可以用萬用表檢測開關(guān)的管腳排列、好壞和質(zhì)量。回目錄按鍵開關(guān)介紹回目錄6按鍵閉合、斷開時的抖動
回目錄在單片機中,按鍵通常與I/O端口相連,如下圖左邊所示。當(dāng)按鍵開關(guān)K1未按下時,P1.0輸入為高電平,而當(dāng)按鍵K1閉合時,P1.0輸入為低電平,由于開關(guān)為機械彈性開關(guān),當(dāng)機械觸點斷開、閉合時,由于機械觸點的彈性作用,一個機械開關(guān)閉合時不會馬上穩(wěn)定的閉合接通,斷開時也不會馬上斷開,而是在閉合、斷開的瞬間伴隨有一連串的抖動,如下圖右邊所示,抖動時間的長短與開關(guān)的機械特性決定,一般為5~10ms。按鍵閉合、斷開時的抖動回目錄在單片機中,按鍵通常與I/O端7按鍵抖動消除辦法按鍵抖動是一種普遍的現(xiàn)象,如電流較大的電器開關(guān)閉合時,我們有時可以見到電火花,按鍵抖動將形成干擾和造成誤動作。如上頁圖所示,抖動將造成I/O端口輸入的高低電平多次變化,使單片機系統(tǒng)誤動作,一次按鍵產(chǎn)生多次按鍵效果,因此必須采取措施消除。按鍵抖動消除可以采用硬件和軟件方法消除,硬件去抖動電路如RS觸發(fā)器等,由于硬件去抖動電路需要額外的硬件電路,使產(chǎn)品成本增加,硬件電路復(fù)雜,所以一般應(yīng)用較少。在單片機中廣泛采用的是軟件延時去抖動,由圖8-4可知,按鍵閉合時存在前沿抖動,一般時間為5~10ms,因此我們可在按鍵按下后,延時10ms左右避開前沿抖動,然后再判斷按鍵是否按下,即P1.0是否仍為低電平,如果仍為低電平,此時才確認為一次完整有效的按鍵閉合,否則認為只是抖動或干擾,系統(tǒng)對此不作出響應(yīng)。
按鍵抖動消除辦法88.3.2獨立式鍵盤接口電路獨立式鍵盤的結(jié)構(gòu)如下圖所示,組成鍵盤的各按鍵相互獨立,每個按鍵獨立地與一個I/O端口相連,結(jié)構(gòu)簡單,其中圖左圖適合于端口內(nèi)部有上拉電阻的端口,如P1、P2、P3口,所以外部不用上拉電阻,電路更簡單,成本更低。右圖適合于端口內(nèi)部沒有上拉電阻地端口,如P0口,所以外部必須使用上拉電阻,成本稍高,所以一般盡量使用左圖的形式。8.3.2獨立式鍵盤接口電路98.3.3矩陣式鍵盤接口電路獨立式鍵盤雖然硬件、軟件結(jié)構(gòu)簡單,但在按鍵數(shù)量較多的情況下,將占有較多的I/O端口,所以在按鍵數(shù)量較多的情況下,一般采用可以有效減少I/O端口數(shù)量的矩陣式鍵盤。矩陣式鍵盤又稱為行列式鍵盤,采用行、列線結(jié)構(gòu),按鍵設(shè)置在行列線的交叉點上,如下圖所示,H0~H3為四條行線,L0~L3為四條列線,在行列相交的每個交點上通過按鍵來連通,按鍵開關(guān)的一個觸點連行線,一個觸點連列線,從而組成4×4矩陣16鍵鍵盤回目錄8.3.3矩陣式鍵盤接口電路回目錄102.獨立式和矩陣式鍵盤比較獨立式鍵盤硬件結(jié)構(gòu)簡單,軟件編程較簡單,但每個按鍵獨自占用一個I/O端口,在按鍵數(shù)量較多的情況下,將占有較多的I/O端口。所以,獨立式鍵盤一般運用于按鍵數(shù)量不多的場合。矩陣式鍵盤能有效的減少I/O端口的占用量,但因為各按鍵不是單獨的占有I/O端口,從而給按鍵的判斷帶來難度,造成編程難度加大。
2.獨立式和矩陣式鍵盤比較獨立式鍵盤硬件結(jié)構(gòu)簡單,軟件編程較118.4鍵盤接口程序設(shè)計
8.4.1本項目使用的鍵盤接口本項目使用的鍵盤接口如下圖所示,它是2×3的矩陣式鍵盤接口電路,我們選P2口的低五位作為矩陣式鍵盤的列線和行線,其中P2.3、P2.4作為矩陣式鍵盤的行線,P2.0、P2.1、P2.2作為矩陣式鍵盤的列線,選用六個按鍵主要是為了降低試驗板成本和焊接的難度?;啬夸?.4鍵盤接口程序設(shè)計回目錄128.4.2獨立式鍵盤控制LED燈
本項目基本任務(wù)為利用獨立式鍵盤控制LED燈,為了不增加試驗板的成本,我們在上頁圖的矩陣式鍵盤電路中,將P2.0設(shè)置為低電平,相當(dāng)于鍵盤K1、K4一端觸點接地,從而使按鍵K1、K4相當(dāng)于組成獨立式鍵盤,等效電路如下圖所示。?;啬夸?.4.2獨立式鍵盤控制LED燈回目錄13一、獨立式鍵盤任務(wù)分析本任務(wù)要求按下K1時,D1~D8全亮,按下K4時,D1~D8全滅。本任務(wù)的關(guān)鍵為設(shè)計獨立式鍵盤的控制程序,它必須解決以下幾個問題:(1)檢測有無按鍵按下。先將各按鍵相連的I/O端口置為高電平1,然后檢測各I/O端口是否仍全為高電平,如果不是,表明有按鍵按下。(2)如果有鍵按下,運用軟件去抖動在有鍵按下的情況下,延時10ms,再次檢測是否有鍵按下,如果是,表明確實有鍵按下,否則表示只是干擾或抖動。(3)確認有鍵按下,暫存鍵值,等鍵釋放這主要是為了保證一次按鍵僅執(zhí)行一次按鍵功能,防止按住按鍵不放時,執(zhí)行多次按鍵功能。(4)判斷按鍵情況,執(zhí)行相應(yīng)的按鍵功能既如果按鍵K1按下,D1~D8全亮,按鍵K4按下,D1~D8全滅。。
一、獨立式鍵盤任務(wù)分析14二、獨立式鍵盤程序流程圖設(shè)計
通過以上分析,獨立式按鍵程序思路大致如下:(1)首先進行程序初始化。P1.0清零,使開關(guān)K1、K4一端接低電平;置位P2.3、P2.4作為輸入口,同時使P2.3、P2.4輸出高電平。(2)判斷是否有鍵按下。讀入P2.3、P2.4的狀態(tài),判斷是否全為高電平1,否則表明有按鍵按下。(3)延時去抖動。延時10ms,再次讀入P2.3、P2.4的狀態(tài),判斷是否仍然有鍵按下,如果有,表明確實有鍵按下,否則表明只是抖動或干擾信號。(4)暫存當(dāng)前按鍵狀態(tài),等待按鍵釋放。在等待按鍵彈起的過程中,必須將前面的按鍵狀態(tài)保存下來,以便后面取出判斷具體的按鍵號。等待按鍵彈起的方法為延時一段時間,再次檢測按鍵的狀態(tài),直到無鍵按下為止。二、獨立式鍵盤程序流程圖設(shè)計15二、獨立式鍵盤程序流程圖設(shè)計(5)判斷具體按鍵號,執(zhí)行相應(yīng)的按鍵功能。取出前面暫存的按鍵狀態(tài),并判斷具體是那個按鍵按下,執(zhí)行相應(yīng)的功能,如果是P2.3為低電平,表明K1按下,置P1為低電平,,D1~D8全亮,如果是P2.4為低電平,表明K4按下,置P1為高電平,D1~D8全滅?;啬夸浂?、獨立式鍵盤程序流程圖設(shè)計回目錄16三、獨立式鍵盤程序清單(1)
ORG0000H
LJMPMAIN
ORG0050HMAIN:CLRP2.0;P2.0清0,使K1、K4一端觸點接低電平
SETBP2.3;P2.3置1,作為輸入口
SETBP2.4;P2.4置1,作為輸入口MAINHUI:LCALLKEY;調(diào)用按鍵處理子程序
LJMPMAINHUI;反復(fù)執(zhí)行三、獨立式鍵盤程序清單(1)17
LJMPKEYHUI;否則,表示沒有鍵按下,鍵處理程序返回DYS:LCALLDELAY;鍵去抖動,延時10ms左右
MOVA,P2;再次取出P2口狀態(tài)
ANLA,#00011000B;取出P2.3,P2.4位
CJNEA,#00011000B,DJTQ;確認有鍵按下,跳到等待按鍵彈起
LJMPKEYHUI;無鍵按下,表明只是干擾或鍵抖動DJTQ:MOVR2,A;暫存當(dāng)前按鍵狀態(tài)DENDAI:LCALLDELAY;延時10ms,再次取出當(dāng)前按鍵狀態(tài)
MOVA,P2
ANLA,#00011000B;取出P2.3,P2.4位三、獨立式鍵盤程序清單(2)LJMPKEYHUI18
CJNEA,#00011000B,DENDAI;按鍵沒有彈起,繼續(xù)等待MOVA,R2;取出暫存在R2中的按鍵狀態(tài)PJZ:JNBACC.3,K1;ACC.3為0,表示K1按下,跳到K1處
JNBACC.4,K4;ACC.4為0,表示K4按下,跳到K4處
LJMPKEYHUI;如果K1、K4都沒按下,跳到鍵處理子程序返回
K1:MOVP1,#00H;按鍵K1按下處理,D1~D8全亮
LJMPKEYHUI;跳到鍵處理子程序返回K4:MOVP1,#0FFH;按鍵K4按下處理,D1~D8全滅KEYHUI:RET;鍵處理子程序返回三、獨立式鍵盤程序清單(3)CJNEA,#000119DELAY:;延時子程序
MOVR7,#0FH;二層循環(huán)延時程序LOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1
DJNZR7,LOOP2
RET三、獨立式鍵盤程序清單(4)DELAY:208.4.3矩陣式鍵盤控制數(shù)碼管
一、任務(wù)分析本任務(wù)要求能用矩陣式鍵盤輸入數(shù)據(jù),當(dāng)按下按鍵時,數(shù)碼管顯示相應(yīng)的鍵值。矩陣式鍵盤接口電路圖如下圖所示。與基本任務(wù)相比,這個任務(wù)的難度有所增加,本任務(wù)關(guān)鍵問題為具體鍵號的判斷,既鍵的識別問題,對矩陣式按鍵的識別通常有二種方法,一種為常用的逐行(或列)掃描查詢法,另一種為速度較快的反轉(zhuǎn)法?;啬夸?.4.3矩陣式鍵盤控制數(shù)碼管與基本任務(wù)相比,這個任務(wù)21二、逐行(或列)掃描查詢法工作原理(1)判斷有無按鍵按下
方法為將所有列線置為低電平“0”,所有行線置為高電平“1”,作為輸入口,然后讀入所有行線的狀態(tài),如果行線全為高電平1,說明沒有按鍵按下,否則說明有鍵按下(雖然暫時無法具體判斷是哪個按鍵按下)。因為如果有按鍵按下,則按鍵所在的行、列線將短路,由于所有列線已經(jīng)預(yù)置為低電平“0”,近似接地,則與該按鍵相連的行線必定被拉低為低電平“0”,所以由行線是否全為高電平“1”,就能判斷是否有鍵按下。(2)按鍵延時去抖動
在判斷有按鍵按下后,為了去除按鍵機械抖動的影響,延時10ms左右再次檢測是否仍有按鍵按下,判斷方法和步驟(1)相同,如果仍有按鍵按下,表示確實有按鍵按下,否則表示只是干擾或抖動。提示此處延時程序利用顯示程序代替,主要是利用顯示程序執(zhí)行時間既實現(xiàn)延時,又顯示數(shù)據(jù),防止顯示間斷。二、逐行(或列)掃描查詢法工作原理22(3)判斷按鍵列號,并暫存列值和行狀態(tài)。
依次設(shè)置各列為低電平,讀入行狀態(tài),如果將某一列設(shè)置為低電平0后,讀入的行狀態(tài)不全為高電平1,說明按下的按鍵在該列,將該列列值暫存起來,以便后面計算鍵值。同時將當(dāng)前的行狀態(tài)暫存起來,以便后面判斷行號。(4)等待按鍵釋放。將列值和行狀態(tài)暫存下來后,將等待按鍵釋放,以保證按鍵按下一次,只執(zhí)行一次按鍵功能,本處的延時程序仍以顯示程序代替,在延時的同時保證顯示不間斷。(5)判斷按鍵行號。
將暫存的行狀態(tài)取出,依次判斷按鍵在哪一行。方法為檢測該行是否為低電平,如果是,表明按鍵在該行,并將行值暫存下來。(6)計算鍵值。取出前面保存的列值、行值,利用如下公式計算鍵值:
鍵值=行值×列數(shù)+列值鍵值計算出來后,可以根據(jù)各按鍵要求,完成相應(yīng)的按鍵功能。(3)判斷按鍵列號,并暫存列值和行狀態(tài)。23三、矩陣式按鍵逐行掃描程序流程圖三、矩陣式按鍵逐行掃描程序流程圖24程序中30H單元為顯示緩沖區(qū),保存需顯示的數(shù)據(jù),40H為鍵值暫存單元,41H為列值暫存單元,42H為行值暫存單元。
ORG0000HLJMPMAINORG0050HMAIN:MOV30H,#00H;顯示緩沖區(qū)清0
MOV40H,#00H;鍵值暫存單元清0
MOV41H,#00H;列值暫存單元清0
MOV42H,#00H;行值暫存單元清0MAINHUI:LCALLKEY;調(diào)用按鍵處理子程序
MOV30H,40H;將鍵值送顯示緩沖單元顯示
LCALLXIANSHI;調(diào)用顯示子程序
LJMPMAINHUI;反復(fù)執(zhí)行三、矩陣式按鍵逐行掃描程序清單(1)
程序中30H單元為顯示緩沖區(qū),保存需顯示的數(shù)據(jù),40H為鍵值25KEY:;鍵處理子程序
MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅
MOVA,P2;P2口鍵盤狀態(tài)送入累加器A
ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)
CJNEA,#00011000B,DYS;如果行線不全為1,表示有鍵按下,跳到鍵去抖動處理
LJMPKEYHUI;無鍵按下,鍵處理子程序返回DYS:LCALLXIANSHI;延時去抖動
MOVA,P2;P2口鍵盤狀態(tài)送入累加器A
ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)
CJNEA,#00011000B,PANLIE;如果行線不全為1,表示確實有鍵按下,跳去判斷哪一列
LJMPKEYHUI;無鍵按下,鍵處理子程序返回,表示只是干擾或抖動三、矩陣式按鍵逐行掃描程序清單(2)
KEY:26PANLIE:MOVP2,#11111110B;將第0列設(shè)為0,判斷是否第0列MOVA,P2;P2口鍵盤狀態(tài)送入累加器AANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)CJNEA,#00011000B,LIE0;如果行線不全為1,表示該列有鍵按下,跳到LIE0處
MOVP2,#11111101B;判斷是否第1列
MOVA,P2;P2口鍵盤狀態(tài)送入累加器A
ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)
CJNEA,#00011000B,LIE1;如果行線不全為1,表示該列有鍵按下,跳到LIE1處
MOVP2,#11111011B;判斷是否第2列
MOVA,P2
ANLA,#00011000B
CJNEA,#00011000B,LIE2
LJMPKEYHUI;所有列線無鍵按下,跳到鍵處理子程序返回三、矩陣式按鍵逐行掃描程序清單(3)
PANLIE:MOVP2,#11111110B27LIE0:MOV41H,#00H;保存列值0
MOV42H,A;保存行值,此時A中為行線的狀態(tài),暫存到42H單元
LJMPDENDAI;跳到等待按鍵彈起LIE1:MOV41H,#01H;保存列值1
MOV42H,ALJMPDENDAILIE2:MOV41H,#02H;保存列值2
MOV42H,A;保存行狀態(tài)DENDAI:LCALLXIANSHI;等待按鍵彈起,在等待時調(diào)用顯示程序作延時,防止按鍵按下時數(shù)碼管熄滅
MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅
MOVA,P2
ANLA,#00011000B
CJNEA,#00011000B,DENDAI;行線不全為1,表面按鍵未彈起,繼續(xù)等待三、矩陣式按鍵逐行掃描程序清單(4)
LIE0:MOV41H,#00H28
MOVA,42H;取出保存的行狀態(tài),判具體是哪一行
JNBACC.3,HANG0
JNBACC.4,HANG1
LJMPKEYHUIHANG0:MOV42H,#00H;第0行,42H單元送0
LJMPQJZ;跳到求鍵值QJZ處HANG1:MOV42H,#01H;第1行,42H單元送1QJZ:MOVA,42H;求出按鍵數(shù)值,鍵值=行值×列數(shù)+列值
MOVB,#03H;B中為列數(shù)
MULAB;行值×列數(shù)
ADDA,41H;加列值
MOV40H,A;將鍵值送40H單元暫存KEYHUI:RET;鍵處理子程序返回三、矩陣式按鍵逐行掃描程序清單(5)
MOVA,42H29
XIANSHI:;顯示子程序
SETBP2.7;第二個數(shù)碼管亮
CLRP2.6;第一個數(shù)碼管熄滅
MOVA,30H;取出顯示數(shù)據(jù)
ANLA,#0FH;取出顯示值的個位(即低四位)LCALLCHABIAO;調(diào)用查表顯示程序
LCALLDELAY;調(diào)用延時程序
SETBP2.6;第二個數(shù)碼管滅
CLRP2.7;第一個數(shù)碼管熄亮
MOVA,30H;取出顯示數(shù)據(jù)
ANLA,#0F0H;取出顯示值的十位(即高四位)
SWAPA;高、低四位對調(diào),以便于查表取段碼
LCALLCHABIAO;調(diào)用查表顯示程序
LCALLDELAY;調(diào)用延時程序RET;顯示子程序返回三、矩陣式按鍵逐行掃描程序清單(6)
XIANSHI:30CHABIAO:;查表子程序
MOVDPTR,#TABLE1;DPTR用于保存表的首地址(即到哪一個表中取數(shù))
MOVCA,@A+DPTR;查表指令,
MOVP1,A;將取得的段碼送到P1口顯示RET;查表子程序返回DELAY:;二層循環(huán)延時子程序
MOVR7,#0FHLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1DJNZR7,LOOP2RET;延時子程序返回TABLE1:DB0COH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
三、矩陣式按鍵逐行掃描程序清單(7)
CHABIAO:31在線教務(wù)輔導(dǎo)網(wǎng):教材其余課件及動畫素材請查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:在線教務(wù)輔導(dǎo)網(wǎng):http://www.shangfuwang32第8章鍵盤控制LED燈、數(shù)碼管8.1功能要求8.2任務(wù)分析
8.3
鍵盤接口技術(shù)8.3.1鍵盤工作特性8.3.2獨立式鍵盤接口電路8.3.3矩陣式鍵盤接口電路8.4
鍵盤接口程序設(shè)計8.4.1本項目使用的鍵盤接口8.4.2
獨立式鍵盤控制LED燈8.4.3矩陣式鍵盤控制數(shù)碼管第8章鍵盤控制LED燈、數(shù)碼管8.1功能要求338.1功能要求
一.基本要求能用獨立式鍵盤控制LED燈。二.發(fā)揮部分能用矩陣式鍵盤輸入數(shù)據(jù)和命令,當(dāng)鍵入數(shù)字鍵時,數(shù)碼管顯示相應(yīng)數(shù)字,當(dāng)輸入功能鍵時,完成相應(yīng)的功能?;啬夸?/p>
8.1功能要求一.基本要求回目錄348.2任務(wù)分析
要完成此任務(wù),主要需解決如下四方面的問題:為什么要軟件延時去抖動;獨立式和矩陣式鍵盤接口電路的設(shè)計方法;獨立式和矩陣式鍵盤程序的設(shè)計方法?;啬夸?.2任務(wù)分析要完成此任務(wù),主要需解決如下四方面的問題358.3.1鍵盤工作特性
鍵盤是一組按鍵的組合,它是單片機最常用的輸入設(shè)備,單片機中的鍵盤一般通過按鍵開關(guān)自己設(shè)計焊接,當(dāng)然也可到廠家定制,如圖8-1c)所示。本節(jié)主要講解通過按鍵開關(guān)自己設(shè)計鍵盤的方法,根據(jù)按鍵開關(guān)與單片機接口的連接方式,可以分為獨立式鍵盤和矩陣式鍵盤。8.3鍵盤接口技術(shù)回目錄8.3.1鍵盤工作特性8.3鍵盤接口技術(shù)回目錄36按鍵開關(guān)介紹
單片機中的鍵盤通常由按鍵開關(guān)組成,按鍵開關(guān)的外形和參數(shù)如下圖所示,它是一種常開型按鍵開關(guān),為了便于安裝固定,它有四個管腳,其管腳說明如下圖中的文字所示,在常態(tài)時開關(guān)觸點(1和2)處于斷開狀態(tài),只有按下按鍵時開關(guān)觸點才閉合短路,所以可以用萬用表檢測開關(guān)的管腳排列、好壞和質(zhì)量。回目錄按鍵開關(guān)介紹回目錄37按鍵閉合、斷開時的抖動
回目錄在單片機中,按鍵通常與I/O端口相連,如下圖左邊所示。當(dāng)按鍵開關(guān)K1未按下時,P1.0輸入為高電平,而當(dāng)按鍵K1閉合時,P1.0輸入為低電平,由于開關(guān)為機械彈性開關(guān),當(dāng)機械觸點斷開、閉合時,由于機械觸點的彈性作用,一個機械開關(guān)閉合時不會馬上穩(wěn)定的閉合接通,斷開時也不會馬上斷開,而是在閉合、斷開的瞬間伴隨有一連串的抖動,如下圖右邊所示,抖動時間的長短與開關(guān)的機械特性決定,一般為5~10ms。按鍵閉合、斷開時的抖動回目錄在單片機中,按鍵通常與I/O端38按鍵抖動消除辦法按鍵抖動是一種普遍的現(xiàn)象,如電流較大的電器開關(guān)閉合時,我們有時可以見到電火花,按鍵抖動將形成干擾和造成誤動作。如上頁圖所示,抖動將造成I/O端口輸入的高低電平多次變化,使單片機系統(tǒng)誤動作,一次按鍵產(chǎn)生多次按鍵效果,因此必須采取措施消除。按鍵抖動消除可以采用硬件和軟件方法消除,硬件去抖動電路如RS觸發(fā)器等,由于硬件去抖動電路需要額外的硬件電路,使產(chǎn)品成本增加,硬件電路復(fù)雜,所以一般應(yīng)用較少。在單片機中廣泛采用的是軟件延時去抖動,由圖8-4可知,按鍵閉合時存在前沿抖動,一般時間為5~10ms,因此我們可在按鍵按下后,延時10ms左右避開前沿抖動,然后再判斷按鍵是否按下,即P1.0是否仍為低電平,如果仍為低電平,此時才確認為一次完整有效的按鍵閉合,否則認為只是抖動或干擾,系統(tǒng)對此不作出響應(yīng)。
按鍵抖動消除辦法398.3.2獨立式鍵盤接口電路獨立式鍵盤的結(jié)構(gòu)如下圖所示,組成鍵盤的各按鍵相互獨立,每個按鍵獨立地與一個I/O端口相連,結(jié)構(gòu)簡單,其中圖左圖適合于端口內(nèi)部有上拉電阻的端口,如P1、P2、P3口,所以外部不用上拉電阻,電路更簡單,成本更低。右圖適合于端口內(nèi)部沒有上拉電阻地端口,如P0口,所以外部必須使用上拉電阻,成本稍高,所以一般盡量使用左圖的形式。8.3.2獨立式鍵盤接口電路408.3.3矩陣式鍵盤接口電路獨立式鍵盤雖然硬件、軟件結(jié)構(gòu)簡單,但在按鍵數(shù)量較多的情況下,將占有較多的I/O端口,所以在按鍵數(shù)量較多的情況下,一般采用可以有效減少I/O端口數(shù)量的矩陣式鍵盤。矩陣式鍵盤又稱為行列式鍵盤,采用行、列線結(jié)構(gòu),按鍵設(shè)置在行列線的交叉點上,如下圖所示,H0~H3為四條行線,L0~L3為四條列線,在行列相交的每個交點上通過按鍵來連通,按鍵開關(guān)的一個觸點連行線,一個觸點連列線,從而組成4×4矩陣16鍵鍵盤回目錄8.3.3矩陣式鍵盤接口電路回目錄412.獨立式和矩陣式鍵盤比較獨立式鍵盤硬件結(jié)構(gòu)簡單,軟件編程較簡單,但每個按鍵獨自占用一個I/O端口,在按鍵數(shù)量較多的情況下,將占有較多的I/O端口。所以,獨立式鍵盤一般運用于按鍵數(shù)量不多的場合。矩陣式鍵盤能有效的減少I/O端口的占用量,但因為各按鍵不是單獨的占有I/O端口,從而給按鍵的判斷帶來難度,造成編程難度加大。
2.獨立式和矩陣式鍵盤比較獨立式鍵盤硬件結(jié)構(gòu)簡單,軟件編程較428.4鍵盤接口程序設(shè)計
8.4.1本項目使用的鍵盤接口本項目使用的鍵盤接口如下圖所示,它是2×3的矩陣式鍵盤接口電路,我們選P2口的低五位作為矩陣式鍵盤的列線和行線,其中P2.3、P2.4作為矩陣式鍵盤的行線,P2.0、P2.1、P2.2作為矩陣式鍵盤的列線,選用六個按鍵主要是為了降低試驗板成本和焊接的難度?;啬夸?.4鍵盤接口程序設(shè)計回目錄438.4.2獨立式鍵盤控制LED燈
本項目基本任務(wù)為利用獨立式鍵盤控制LED燈,為了不增加試驗板的成本,我們在上頁圖的矩陣式鍵盤電路中,將P2.0設(shè)置為低電平,相當(dāng)于鍵盤K1、K4一端觸點接地,從而使按鍵K1、K4相當(dāng)于組成獨立式鍵盤,等效電路如下圖所示。。回目錄8.4.2獨立式鍵盤控制LED燈回目錄44一、獨立式鍵盤任務(wù)分析本任務(wù)要求按下K1時,D1~D8全亮,按下K4時,D1~D8全滅。本任務(wù)的關(guān)鍵為設(shè)計獨立式鍵盤的控制程序,它必須解決以下幾個問題:(1)檢測有無按鍵按下。先將各按鍵相連的I/O端口置為高電平1,然后檢測各I/O端口是否仍全為高電平,如果不是,表明有按鍵按下。(2)如果有鍵按下,運用軟件去抖動在有鍵按下的情況下,延時10ms,再次檢測是否有鍵按下,如果是,表明確實有鍵按下,否則表示只是干擾或抖動。(3)確認有鍵按下,暫存鍵值,等鍵釋放這主要是為了保證一次按鍵僅執(zhí)行一次按鍵功能,防止按住按鍵不放時,執(zhí)行多次按鍵功能。(4)判斷按鍵情況,執(zhí)行相應(yīng)的按鍵功能既如果按鍵K1按下,D1~D8全亮,按鍵K4按下,D1~D8全滅。。
一、獨立式鍵盤任務(wù)分析45二、獨立式鍵盤程序流程圖設(shè)計
通過以上分析,獨立式按鍵程序思路大致如下:(1)首先進行程序初始化。P1.0清零,使開關(guān)K1、K4一端接低電平;置位P2.3、P2.4作為輸入口,同時使P2.3、P2.4輸出高電平。(2)判斷是否有鍵按下。讀入P2.3、P2.4的狀態(tài),判斷是否全為高電平1,否則表明有按鍵按下。(3)延時去抖動。延時10ms,再次讀入P2.3、P2.4的狀態(tài),判斷是否仍然有鍵按下,如果有,表明確實有鍵按下,否則表明只是抖動或干擾信號。(4)暫存當(dāng)前按鍵狀態(tài),等待按鍵釋放。在等待按鍵彈起的過程中,必須將前面的按鍵狀態(tài)保存下來,以便后面取出判斷具體的按鍵號。等待按鍵彈起的方法為延時一段時間,再次檢測按鍵的狀態(tài),直到無鍵按下為止。二、獨立式鍵盤程序流程圖設(shè)計46二、獨立式鍵盤程序流程圖設(shè)計(5)判斷具體按鍵號,執(zhí)行相應(yīng)的按鍵功能。取出前面暫存的按鍵狀態(tài),并判斷具體是那個按鍵按下,執(zhí)行相應(yīng)的功能,如果是P2.3為低電平,表明K1按下,置P1為低電平,,D1~D8全亮,如果是P2.4為低電平,表明K4按下,置P1為高電平,D1~D8全滅?;啬夸浂ⅹ毩⑹芥I盤程序流程圖設(shè)計回目錄47三、獨立式鍵盤程序清單(1)
ORG0000H
LJMPMAIN
ORG0050HMAIN:CLRP2.0;P2.0清0,使K1、K4一端觸點接低電平
SETBP2.3;P2.3置1,作為輸入口
SETBP2.4;P2.4置1,作為輸入口MAINHUI:LCALLKEY;調(diào)用按鍵處理子程序
LJMPMAINHUI;反復(fù)執(zhí)行三、獨立式鍵盤程序清單(1)48
LJMPKEYHUI;否則,表示沒有鍵按下,鍵處理程序返回DYS:LCALLDELAY;鍵去抖動,延時10ms左右
MOVA,P2;再次取出P2口狀態(tài)
ANLA,#00011000B;取出P2.3,P2.4位
CJNEA,#00011000B,DJTQ;確認有鍵按下,跳到等待按鍵彈起
LJMPKEYHUI;無鍵按下,表明只是干擾或鍵抖動DJTQ:MOVR2,A;暫存當(dāng)前按鍵狀態(tài)DENDAI:LCALLDELAY;延時10ms,再次取出當(dāng)前按鍵狀態(tài)
MOVA,P2
ANLA,#00011000B;取出P2.3,P2.4位三、獨立式鍵盤程序清單(2)LJMPKEYHUI49
CJNEA,#00011000B,DENDAI;按鍵沒有彈起,繼續(xù)等待MOVA,R2;取出暫存在R2中的按鍵狀態(tài)PJZ:JNBACC.3,K1;ACC.3為0,表示K1按下,跳到K1處
JNBACC.4,K4;ACC.4為0,表示K4按下,跳到K4處
LJMPKEYHUI;如果K1、K4都沒按下,跳到鍵處理子程序返回
K1:MOVP1,#00H;按鍵K1按下處理,D1~D8全亮
LJMPKEYHUI;跳到鍵處理子程序返回K4:MOVP1,#0FFH;按鍵K4按下處理,D1~D8全滅KEYHUI:RET;鍵處理子程序返回三、獨立式鍵盤程序清單(3)CJNEA,#000150DELAY:;延時子程序
MOVR7,#0FH;二層循環(huán)延時程序LOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1
DJNZR7,LOOP2
RET三、獨立式鍵盤程序清單(4)DELAY:518.4.3矩陣式鍵盤控制數(shù)碼管
一、任務(wù)分析本任務(wù)要求能用矩陣式鍵盤輸入數(shù)據(jù),當(dāng)按下按鍵時,數(shù)碼管顯示相應(yīng)的鍵值。矩陣式鍵盤接口電路圖如下圖所示。與基本任務(wù)相比,這個任務(wù)的難度有所增加,本任務(wù)關(guān)鍵問題為具體鍵號的判斷,既鍵的識別問題,對矩陣式按鍵的識別通常有二種方法,一種為常用的逐行(或列)掃描查詢法,另一種為速度較快的反轉(zhuǎn)法?;啬夸?.4.3矩陣式鍵盤控制數(shù)碼管與基本任務(wù)相比,這個任務(wù)52二、逐行(或列)掃描查詢法工作原理(1)判斷有無按鍵按下
方法為將所有列線置為低電平“0”,所有行線置為高電平“1”,作為輸入口,然后讀入所有行線的狀態(tài),如果行線全為高電平1,說明沒有按鍵按下,否則說明有鍵按下(雖然暫時無法具體判斷是哪個按鍵按下)。因為如果有按鍵按下,則按鍵所在的行、列線將短路,由于所有列線已經(jīng)預(yù)置為低電平“0”,近似接地,則與該按鍵相連的行線必定被拉低為低電平“0”,所以由行線是否全為高電平“1”,就能判斷是否有鍵按下。(2)按鍵延時去抖動
在判斷有按鍵按下后,為了去除按鍵機械抖動的影響,延時10ms左右再次檢測是否仍有按鍵按下,判斷方法和步驟(1)相同,如果仍有按鍵按下,表示確實有按鍵按下,否則表示只是干擾或抖動。提示此處延時程序利用顯示程序代替,主要是利用顯示程序執(zhí)行時間既實現(xiàn)延時,又顯示數(shù)據(jù),防止顯示間斷。二、逐行(或列)掃描查詢法工作原理53(3)判斷按鍵列號,并暫存列值和行狀態(tài)。
依次設(shè)置各列為低電平,讀入行狀態(tài),如果將某一列設(shè)置為低電平0后,讀入的行狀態(tài)不全為高電平1,說明按下的按鍵在該列,將該列列值暫存起來,以便后面計算鍵值。同時將當(dāng)前的行狀態(tài)暫存起來,以便后面判斷行號。(4)等待按鍵釋放。將列值和行狀態(tài)暫存下來后,將等待按鍵釋放,以保證按鍵按下一次,只執(zhí)行一次按鍵功能,本處的延時程序仍以顯示程序代替,在延時的同時保證顯示不間斷。(5)判斷按鍵行號。
將暫存的行狀態(tài)取出,依次判斷按鍵在哪一行。方法為檢測該行是否為低電平,如果是,表明按鍵在該行,并將行值暫存下來。(6)計算鍵值。取出前面保存的列值、行值,利用如下公式計算鍵值:
鍵值=行值×列數(shù)+列值鍵值計算出來后,可以根據(jù)各按鍵要求,完成相應(yīng)的按鍵功能。(3)判斷按鍵列號,并暫存列值和行狀態(tài)。54三、矩陣式按鍵逐行掃描程序流程圖三、矩陣式按鍵逐行掃描程序流程圖55程序中30H單元為顯示緩沖區(qū),保存需顯示的數(shù)據(jù),40H為鍵值暫存單元,41H為列值暫存單元,42H為行值暫存單元。
ORG0000HLJMPMAINORG0050HMAIN:MOV30H,#00H;顯示緩沖區(qū)清0
MOV40H,#00H;鍵值暫存單元清0
MOV41H,#00H;列值暫存單元清0
MOV42H,#00H;行值暫存單元清0MAINHUI:LCALLKEY;調(diào)用按鍵處理子程序
MOV30H,40H;將鍵值送顯示緩沖單元顯示
LCALLXIANSHI;調(diào)用顯示子程序
LJMPMAINHUI;反復(fù)執(zhí)行三、矩陣式按鍵逐行掃描程序清單(1)
程序中30H單元為顯示緩沖區(qū),保存需顯示的數(shù)據(jù),40H為鍵值56KEY:;鍵處理子程序
MOVP2,#11111000B;將列線全設(shè)為0,行線全設(shè)為1,數(shù)碼管熄滅
MOVA,P2;P2口鍵盤狀態(tài)送入累加器A
ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)
CJNEA,#00011000B,DYS;如果行線不全為1,表示有鍵按下,跳到鍵去抖動處理
LJMPKEYHUI;無鍵按下,鍵處理子程序返回DYS:LCALLXIANSHI;延時去抖動
MOVA,P2;P2口鍵盤狀態(tài)送入累加器A
ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)
CJNEA,#00011000B,PANLIE;如果行線不全為1,表示確實有鍵按下,跳去判斷哪一列
LJMPKEYHUI;無鍵按下,鍵處理子程序返回,表示只是干擾或抖動三、矩陣式按鍵逐行掃描程序清單(2)
KEY:57PANLIE:MOVP2,#11111110B;將第0列設(shè)為0,判斷是否第0列MOVA,P2;P2口鍵盤狀態(tài)送入累加器AANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)CJNEA,#00011000B,LIE0;如果行線不全為1,表示該列有鍵按下,跳到LIE0處
MOVP2,#11111101B;判斷是否第1列
MOVA,P2;P2口鍵盤狀態(tài)送入累加器A
ANLA,#00011000B;取出P2.3,P2.4位,行線狀態(tài)
CJNEA,#00011000B,LIE1;如果行線不全為1,表示該列有鍵按下,跳到LIE1處
MOVP2,#11111011B;判斷是否第2列
MOVA,P2
ANLA,#00011000B
CJNEA,#00011000B,LIE2
LJMPKEYHUI;所有列線無鍵按下,跳到鍵處理子程序返回三、矩陣式按鍵逐行掃描程序清單(3)
PANLIE:MOVP2,#11111110B58LIE0:MOV41H,#00H;保存列值0
MOV42H,A;保存行值,此時A中為行線的狀態(tài),暫存到42H單元
LJMPDENDAI;跳到等待按鍵彈起LIE1:MOV41H,#01H;保存列值1
MOV42H,ALJMPDENDAILIE2:MOV41H,#02H;保存列值2
MOV42H,A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商平臺客戶服務(wù)技巧培訓(xùn)材料
- 小學(xué)科學(xué)教學(xué)創(chuàng)新案例及應(yīng)用指南
- 企業(yè)安全生產(chǎn)責(zé)任制及執(zhí)行標準
- 地產(chǎn)項目工程質(zhì)量管理考核方案
- 神經(jīng)系統(tǒng)罕見疾病臨床診療進展
- 五年級語文句型專項練習(xí)及解析
- 企業(yè)年度員工培訓(xùn)計劃及安排
- 大型工程項目咨詢方案制定指南
- 小學(xué)英語教學(xué)大綱及教案設(shè)計
- 教師隊伍建設(shè)自查與提升報告
- 存單質(zhì)押合同2026年版本
- 安順茶葉行業(yè)分析報告
- 2022版義務(wù)教育(物理)課程標準(附課標解讀)
- 神經(jīng)外科介入神經(jīng)放射治療技術(shù)操作規(guī)范2023版
- 肺結(jié)核患者合并呼吸衰竭的護理查房課件
- 安川XRC機器人CIO培訓(xùn)講議課件
- 地源熱泵施工方案
- 熱電廠主體設(shè)備安裝施工組織設(shè)計
- GB/T 26784-2011建筑構(gòu)件耐火試驗可供選擇和附加的試驗程序
- PKPM結(jié)果分析限值規(guī)范要求和調(diào)整方法(自動版)
- 二道壩通水冷卻專項方案課件
評論
0/150
提交評論