版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第第9章章 單片機(jī)系統(tǒng)開發(fā)實(shí)例單片機(jī)系統(tǒng)開發(fā)實(shí)例 本章內(nèi)容: 1.介紹了常用外部設(shè)備:顯示器與鍵盤。 2.然后按微機(jī)系統(tǒng)開發(fā)的步驟闡述了智能電子鐘的開發(fā),并給出全部軟件和硬件設(shè)計(jì)。 9.1.1 LED顯示器結(jié)構(gòu)與原理: LED顯示器是由發(fā)光二極管顯示字段的顯示器件。在微機(jī)應(yīng)用系統(tǒng)中通常使用的是七段LED。這種顯示器有共陰極與共陽極兩種。工作原理:若工作原理:若LED正偏,則導(dǎo)通則發(fā)光。正偏,則導(dǎo)通則發(fā)光。 “1”D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0“0” 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0對于共陽極器件,其對
2、于共陽極器件,其COM端為端為1時(shí),才可能顯示字形。時(shí),才可能顯示字形。“1”D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0“0” 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0對于共陰極器件,其對于共陰極器件,其COM端為端為0時(shí),才可能顯示字形。時(shí),才可能顯示字形。a b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdp3.83.8 I/O口位選控制 I/O口段選控制一般用法:一般用法:COM: 輸入輸入“位選擇信號(hào)位
3、選擇信號(hào)”,控制顯示哪一位,控制顯示哪一位 “1”D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0“0” 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0“1”D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0“0” 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0段選擇碼(字形碼):送到段選擇碼(字形碼):送到aDp端的數(shù)碼,決定顯示的字形。端的數(shù)碼,決定顯示的字形。 例如:例如:C0H(11000000)為共陽)為共陽LED“0”的段選擇碼。的段選擇碼。 3FH(0011111
4、1)為共陰)為共陰LED“0”的段選擇碼。的段選擇碼。D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0a b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdp3.83.8 I/O口位選控制 I/O口段選控制一般用法:一般用法:COM: 輸入輸入“位選擇信號(hào)位選擇信號(hào)”,控制顯示哪一位,控制顯示哪一位 ag,Dp:輸入:輸入“段選碼(字形碼)段選碼(字形碼)”,決定顯示的字,決定顯示的字形形“1”D7 D6 D5 D4 D3 D2 D1 D0
5、D7 D6 D5 D4 D3 D2 D1 D0“0” 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 (1)靜態(tài)顯示方式:靜態(tài)顯示方式: 例例:設(shè)在圖中89C51片內(nèi)RAM的78H7FH單元為顯示緩沖區(qū)從高到低依次存放8個(gè)需要顯示的數(shù)據(jù)。試編寫顯示程序 (1)靜態(tài)顯示方式:靜態(tài)顯示方式: 例例:設(shè)在圖中89C51片內(nèi)RAM的78H7FH單元為顯示緩沖區(qū)從高到低依次存放8個(gè)需要顯示的數(shù)據(jù)。試編寫顯示程序 讀圖:陽極已接電源,從164輸出段選擇碼“字形碼”即可顯示字形。字形碼的獲得可用查表技術(shù) (1)靜態(tài)顯示方式:靜態(tài)顯示方式: 例例:設(shè)在圖中89C51片內(nèi)RAM的78H7FH單元
6、為顯示緩沖區(qū)從高到低依次存放8個(gè)需要顯示的數(shù)據(jù)。試編寫顯示程序 讀圖:陽極已接電源,從164輸出段選擇碼“字形碼”即可顯示字形。字形碼的獲得可用查表技術(shù) 串行口方式0輸出:RxD串行移位輸出數(shù)據(jù),TxD輸出時(shí)鐘脈沖 (1)靜態(tài)顯示方式:靜態(tài)顯示方式: 例例:設(shè)在圖中89C51片內(nèi)RAM的78H7FH單元為顯示緩沖區(qū)從高到低依次存放8個(gè)需要顯示的數(shù)據(jù)。試編寫顯示程序 讀圖:陽極已接電源,從164輸出段選擇碼“字形碼”即可顯示字形。字形碼的獲得可用查表技術(shù) 串行口方式0輸出:RxD串行移位輸出數(shù)據(jù),TxD輸出時(shí)鐘脈沖 回顧164的工作:串入并出移位寄存器 (1)靜態(tài)顯示方式:靜態(tài)顯示方式: 例例:
7、設(shè)在圖中89C51片內(nèi)RAM的78H7FH單元為顯示緩沖區(qū)從高到低依次存放8個(gè)需要顯示的數(shù)據(jù)。試編寫顯示程序 讀圖:陽極已接電源,從164輸出段選擇碼“字形碼”即可顯示字形。字形碼的獲得可用查表技術(shù) 串行口方式0輸出:RxD串行移位輸出數(shù)據(jù),TxD輸出時(shí)鐘脈沖 回顧164的工作:串入并出移位寄存器 在設(shè)置串行口工作方式后,有程序: DIS:MOV R7,08H;循環(huán)次數(shù)8 MOV R0,78H ; 78H 7FH為顯示緩沖區(qū)DL0:MOV A,R0 ;取出要顯示的數(shù) MOV DPTR,#SEG MOVC A,A+DPTR ;查表取出字形數(shù)據(jù) MOV SBUF,A ;送出顯示 JNB TI,$
8、;CPU等待;串行口:RxD出數(shù)據(jù);TxD出時(shí)鐘脈沖 CLR TI ;清中斷標(biāo)志 INC R0 ;再取下一個(gè)數(shù) DJNZ R7,DL0 ;8次循環(huán)完否? RET;返回SEG:DB 0C0H,0F9H,0A4H,0B0H,99H ;共陽極段碼表,以下略 5v. 74LS164(0)共陽LED0.g f e d c b aCOM0 74LS164(1)共陽LED1.g f e d c b aCOM1 74LS164(7)共陽LED7.g f e d c b aCOM7 SBUFTxDRxD (1)靜態(tài)顯示方式(補(bǔ)充):靜態(tài)顯示方式(補(bǔ)充): 例例:設(shè)在單片機(jī)片內(nèi)RAM的7FH78H單元為顯示緩沖區(qū)
9、從高到低依次存放8個(gè)需要顯示的數(shù)據(jù)。試編寫顯示程序(設(shè)I/O接口i為700i,i0,1,.,7)。 讀圖:陰極已接地,從I/O接口輸出段選擇碼(字形碼)即可顯示字形。字形碼的獲得可用查表技術(shù) 單片機(jī) I/O接口0共陰LED0.g f e d c b a總線總線 I/O接口1共陰LED1.g f e d c b a I/O接口7共陰LED7.g f e d c b a.COM0COM1COM7DIS:MOV R7,08H;循環(huán)次數(shù)8 MOV R0,78H ; 78H 7FH為顯示緩沖區(qū)MOV DPTR,#7000H ;DPTR指向LED0DLO:MOV A,R0 ;取出要顯示的數(shù) ADD A,#
10、06H ;加上偏移量 MOVC A,A+PC ;查表取出字形數(shù)據(jù) MOVX DPTR, A ;送字形數(shù)據(jù)到顯示器LEDi INC R0 ;準(zhǔn)備取下一個(gè)數(shù)INC DPTR ;指向下一個(gè)顯示器LED DJNZ R7,DL0 ;8次循環(huán)完否? RET;返回SEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;共陰極段碼表,以下略 單片機(jī) I/O接口0共陰LED0.g f e d c b a總線總線 I/O接口1共陰LED1.g f e d c b a I/O接口7共陰LED7.g f e d c b a.COM0COM1COM7 (2)動(dòng)態(tài)顯示方式:動(dòng)態(tài)顯示方式: 一位一位
11、分時(shí)輪流點(diǎn)亮各位顯示器。因?yàn)橐晃灰晃环謺r(shí)輪流點(diǎn)亮各位顯示器。因?yàn)椤耙曃飼毫粢曃飼毫簟钡纳淼纳憩F(xiàn)現(xiàn)象,看上去象多位顯示器同時(shí)顯示象,看上去象多位顯示器同時(shí)顯示:a b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdpa b c d e f Rdp3.83.8 I/O口位選控制 I/O口段選控制 輸出到輸出到PB的數(shù)據(jù):段選擇碼(字形碼),控制顯示字形的數(shù)據(jù):段選擇碼(字形碼),控制顯示字形 輸出到輸出到PA的數(shù)據(jù):位選擇碼,控制顯示器位。的數(shù)據(jù):位選擇碼,控制顯示器位。 設(shè)設(shè)30H35H為顯示緩沖區(qū),分別存放為
12、顯示緩沖區(qū),分別存放6位顯示器的位顯示器的“待顯示數(shù)待顯示數(shù)”位選擇碼位選擇碼 待顯示數(shù)待顯示數(shù)00000001 (30H)00000010 (31H)00000100 (32H)00001000 (33H)00010000 (34H)00100000 (35H) R3 R0 通過移位獲得位通過移位獲得位選擇碼;通過查表獲選擇碼;通過查表獲得段選擇碼。得段選擇碼。 對對PA輸出段選擇碼,對輸出段選擇碼,對PB輸出位選擇輸出位選擇 碼,即可顯示第碼,即可顯示第i位位 設(shè)想:主程序初始化定時(shí)器設(shè)想:主程序初始化定時(shí)器0和和8255等器件;定時(shí)器等器件;定時(shí)器0中斷服務(wù)中斷服務(wù)程序程序:點(diǎn)亮第點(diǎn)亮第
13、i位顯示器位顯示器LEDi, 0i5BUFFER EQU 30H;顯示緩沖區(qū)首地址顯示緩沖區(qū)首地址PA EQU 2000H;8255 A口地址口地址PB TADA PA+1;8255 B口地址口地址PCTR TADA PA+3;8255控制口地址控制口地址 ORG 0000H LJMP MAIN ORG 000BH LJMP T0INTORG 0030HMAIN: . ;定時(shí)器定時(shí)器0和單片機(jī)中斷機(jī)構(gòu)的初始化和單片機(jī)中斷機(jī)構(gòu)的初始化MOV DPTR,#PCTR ;設(shè)設(shè)8255的命令字寄存器地址為的命令字寄存器地址為7FFBH MOV A,#80H ;命令字命令字10000000B,將定義,將定
14、義PA、PB為基本輸出為基本輸出MOVX DPTR,A ;設(shè)置設(shè)置8255PA、PB口為基本輸出口口為基本輸出口 MOV R0,#BUFFER ;(R0)為顯示緩沖區(qū)首地址為顯示緩沖區(qū)首地址(T0INT的入口參數(shù)的入口參數(shù)) MOV R3,#01 ;(R3)為位選擇碼(為位選擇碼(T0INT的入口參數(shù))的入口參數(shù)) . 位選擇碼位選擇碼 “待顯示數(shù)待顯示數(shù)”00000001 (30H)00000010 (31H)00000100 (32H)00001000 (33H)00010000 (34H)00100000 (35H) R3 R0 入口參數(shù):入口參數(shù):(R3)位選擇碼;位選擇碼;(R0)“
15、待顯示數(shù)據(jù)待顯示數(shù)據(jù)”緩沖區(qū)地址緩沖區(qū)地址T0INT: MOV A,R3 ;為PA口準(zhǔn)備“位選擇碼位選擇碼”:顯示第i位:0i5 MOV DPTR,#PA ;指向8255PA口地址。MOVX DPTR,A ;從8255PA口輸出“位選擇碼位選擇碼” . 位選擇碼位選擇碼 “待顯示數(shù)待顯示數(shù)”00000001 (30H)00000010 (31H)00000100 (32H)00001000 (33H)00010000 (34H)00100000 (35H) R3 R0 入口參數(shù):入口參數(shù):(R3)位選擇碼;位選擇碼;(R0)“待顯示數(shù)據(jù)待顯示數(shù)據(jù)”緩沖區(qū)地址緩沖區(qū)地址T0INT: . MOV
16、A,R0 ;取顯示緩沖區(qū)的數(shù)據(jù)(第i位待顯示數(shù)據(jù))MOV DPTR,#DSEG MOVC A,A+DPTR ;查表,找出與該“第i位待顯示數(shù)”對應(yīng)的字形碼MOV DPTR,#PB ;指向8255PB口地址DIRI:MOVX DPTR,A ;從8255PB口輸出“字形碼” .DSEG: DB 3FH,06H,5BH,4FH,66H,6DH ;0、1、2、3、4、5 位選擇碼位選擇碼 “待顯示數(shù)待顯示數(shù)”00000001 (30H)00000010 (31H)00000100 (32H)00001000 (33H)00010000 (34H)00100000 (35H) R3 R0 入口參數(shù):入口
17、參數(shù):(R3)位選擇碼;位選擇碼;(R0)“待顯示數(shù)據(jù)待顯示數(shù)據(jù)”緩沖區(qū)地址緩沖區(qū)地址T0INT: MOV A,R3 MOV DPTR,#PA MOVX DPTR,A MOV A,R0 MOV DPTR,#DSEG MOVC A,A+DPTR MOV DPTR,#PB DIRI:MOVX DPTR,A MOV A,R3JB ACC.5,LDI ;是否顯示到第5個(gè)顯示器?INC R0 ;為顯示i1顯示器,R0指向顯示緩沖區(qū)下一個(gè)地址RL A ;為顯示i1顯示器,為PA口準(zhǔn)備“位選擇碼位選擇碼”MOV R3,A ;為顯示第i1位,“位選擇碼位選擇碼”暫存R3 RETILDI:MOV R3,#01H
18、 ;為顯示第0位,“位選擇碼位選擇碼”暫存R3MOV R0,#BUFFER ;為顯示第0位,R0指向顯示緩沖區(qū)首地址指向顯示緩沖區(qū)首地址RETIDSEG: DB 3FH,06H,5BH,4FH,66H,6DH ;0、1、2、3、4、5DB 7DH,07H,7FH,6FH,77H,7CH ;6、7、8、9、A、bDB 39H,5EH,79H,71H,73H,3EH ;C、d、E、F 位選擇碼位選擇碼 “待顯示數(shù)待顯示數(shù)” 00000001 (30H)00000010 (31H)00000100 (32H)00001000 (33H)00010000 (34H)00100000 (35H) R3
19、R0 入口參數(shù):入口參數(shù):(R3)位選擇碼;位選擇碼;(R0)“待顯示數(shù)據(jù)待顯示數(shù)據(jù)”緩沖區(qū)地址緩沖區(qū)地址T0INT: RETIDSEG: DB 3FH,06H,5BH,4FH,66H,6DH ;0、1、2、3、4、5DB 7DH,07H,7FH,6FH,77H,7CH ;6、7、8、9、A、bDB 39H,5EH,79H,71H,73H,3EH ;C、d、E、F 以上程序?yàn)閱纹瑱C(jī)以上程序?yàn)閱纹瑱C(jī)T0的中斷服務(wù)程序,它將顯示的中斷服務(wù)程序,它將顯示LED的第的第i位位i=0,1,2,3,4,5。 如果正確設(shè)置如果正確設(shè)置T0的定時(shí)時(shí)間(小于的定時(shí)時(shí)間(小于24ms/6),將動(dòng)態(tài)顯示),將動(dòng)態(tài)顯
20、示6位位顯示數(shù)據(jù)。顯示數(shù)據(jù)。 入口參數(shù):入口參數(shù):(R3)位選擇碼;位選擇碼;(R0)“待顯示數(shù)據(jù)待顯示數(shù)據(jù)”緩沖區(qū)地址緩沖區(qū)地址T0INT: . RETI 每位顯示時(shí)間每位顯示時(shí)間=T0的定時(shí)時(shí)間,不斷輪流將顯示的定時(shí)時(shí)間,不斷輪流將顯示6位顯示器??次伙@示器??瓷先ハ笊先ハ?位顯示器同時(shí)顯示。位顯示器同時(shí)顯示。 動(dòng)態(tài)顯示特點(diǎn):成本低。占用動(dòng)態(tài)顯示特點(diǎn):成本低。占用CPU時(shí)間較多。時(shí)間較多。 靜態(tài)顯示特點(diǎn):成本高。占用靜態(tài)顯示特點(diǎn):成本高。占用CPU時(shí)間較少。時(shí)間較少。 9.1.2鍵盤接口技術(shù)鍵盤接口技術(shù) 鍵盤是一組按鍵的組合,它是最常用的計(jì)算機(jī)輸入設(shè)備。鍵盤是一組按鍵的組合,它是最常用的計(jì)
21、算機(jī)輸入設(shè)備。 編碼鍵盤:編碼鍵盤: :能識(shí)別閉合鍵,并產(chǎn)生相應(yīng)鍵碼的鍵盤。如:能識(shí)別閉合鍵,并產(chǎn)生相應(yīng)鍵碼的鍵盤。如BCD碼鍵盤、碼鍵盤、ASCII碼鍵盤等;碼鍵盤等; 非編碼鍵盤非編碼鍵盤 需另外編寫軟件來識(shí)別閉合鍵的鍵盤。需另外編寫軟件來識(shí)別閉合鍵的鍵盤。 在單片機(jī)組成的測控系統(tǒng)幾智能儀器中,用得最多的是非編在單片機(jī)組成的測控系統(tǒng)幾智能儀器中,用得最多的是非編碼鍵盤。碼鍵盤。 本節(jié)著重討論非編碼鍵盤的原理、接口技術(shù)和程序設(shè)計(jì)。本節(jié)著重討論非編碼鍵盤的原理、接口技術(shù)和程序設(shè)計(jì)。 鍵盤的每個(gè)按鍵為一開關(guān),敲擊時(shí)存在機(jī)械振動(dòng)(抖動(dòng))。 鍵抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為了確保CPU對鍵的一次閉
22、合僅做一次處理,必須去除鍵抖動(dòng)。 軟件方法去抖動(dòng),即檢測出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生510ms的延時(shí);讓前沿抖動(dòng)消失后,再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平。認(rèn)為真正有鍵按下。當(dāng)檢測到按鍵釋放后,也要給510ms的延時(shí),待后沿抖動(dòng)消失后,才能轉(zhuǎn)入該鍵的處理程序。1 鍵盤工作原理鍵盤工作原理 2 2.獨(dú)立式按鍵獨(dú)立式按鍵 特點(diǎn):一鍵占用一輸入線。特點(diǎn):一鍵占用一輸入線。 如圖,當(dāng)任何一個(gè)鍵按下時(shí),如圖,當(dāng)任何一個(gè)鍵按下時(shí),與之相連的輸入線輸入與之相連的輸入線輸入0(0(而平時(shí)而平時(shí)該線為該線為1)1)。 擊鍵擊鍵執(zhí)行相應(yīng)功能程序執(zhí)行相應(yīng)功能程序(完成某功能完成某功能) 。 START程
23、序程序發(fā)現(xiàn)發(fā)現(xiàn)“擊鍵擊鍵” P0FP7F為八個(gè)鍵的功能為八個(gè)鍵的功能程序程序START: . . . P0F: ;0號(hào)鍵功能程序號(hào)鍵功能程序 LJMP START;0號(hào)鍵執(zhí)行完返回號(hào)鍵執(zhí)行完返回P1F: ;1號(hào)鍵功能程序號(hào)鍵功能程序 LJMP START;1號(hào)鍵執(zhí)行完返回號(hào)鍵執(zhí)行完返回. . . . .P7F: ;7號(hào)鍵功能程序號(hào)鍵功能程序 LJMP START;7號(hào)鍵執(zhí)行完返回號(hào)鍵執(zhí)行完返回 START: MOV A,P1;鍵狀態(tài)輸入PL1: JNB ACC.0,POF;0號(hào)鍵按下轉(zhuǎn)POF標(biāo)號(hào)地址 JNB ACC.1,P1F;l號(hào)鍵按下轉(zhuǎn)P1F標(biāo)號(hào)地址 JNB ACC.2,P2F;2號(hào)鍵按下
24、轉(zhuǎn)P2F標(biāo)號(hào)地址 JNB ACC.3,P3F;3號(hào)鍵按下轉(zhuǎn)P3F標(biāo)號(hào)地址 JNB ACC.4,P4F;4號(hào)鍵按下轉(zhuǎn)P4F標(biāo)號(hào)地址 JNB ACC.5,PSF;5號(hào)鍵按下轉(zhuǎn)P5F標(biāo)號(hào)地址 JNB ACC.6,P6F;6號(hào)鍵按下轉(zhuǎn)P6F標(biāo)號(hào)地址 JNB ACC.7,P7F;7號(hào)鍵按下轉(zhuǎn)P7F標(biāo)號(hào)地址 LJMP START;無鍵按下返回P0F: ;0號(hào)鍵功能程序 LJMP START;0號(hào)鍵執(zhí)行完返回P1F: ;1號(hào)鍵功能程序 LJMP START;1號(hào)鍵執(zhí)行完返回. .P7F: ;7號(hào)鍵功能程序 LJMP START ;7號(hào)鍵執(zhí)行完返回 程序的邏輯正確,但不能用。鍵盤沒有去抖動(dòng):“一次擊鍵,多次處
25、理” 紅線部分修改為:紅線部分修改為:STARTSTART: MOV P1,MOV P1,OFFHOFFH;輸入時(shí)先置;輸入時(shí)先置P1P1口為全口為全1 1LOOP: MOVLOOP: MOV A,P1 A,P1;鍵狀態(tài)輸入;鍵狀態(tài)輸入 CJNE A,#0FFH,L0 CJNE A,#0FFH,L0 ;有鍵按下否;有鍵按下否 SJMP LOOP SJMP LOOP ;無鍵按下,等待;無鍵按下,等待L0:L0: LCALL DELAY LCALL DELAY ;調(diào)延時(shí)子程序,去抖動(dòng);調(diào)延時(shí)子程序,去抖動(dòng) MOV A,P1 MOV A,P1 ;鍵狀態(tài)再輸入;鍵狀態(tài)再輸入 CJNE A,#0FFH,
26、PL1 CJNE A,#0FFH,PL1 ;非誤讀,轉(zhuǎn)移到;非誤讀,轉(zhuǎn)移到PL1PL1 SJMP LOOP SJMP LOOP ;誤讀,轉(zhuǎn)移到;誤讀,轉(zhuǎn)移到LOOPLOOPPL1: 3.3.矩陣式鍵盤矩陣式鍵盤 沒有鍵閉合時(shí),所有的行線和列線都斷開,行線輸入沒有鍵閉合時(shí),所有的行線和列線都斷開,行線輸入11111111。 當(dāng)鍵盤上某一個(gè)鍵閉合時(shí),則該鍵所對應(yīng)的行線和列線被短當(dāng)鍵盤上某一個(gè)鍵閉合時(shí),則該鍵所對應(yīng)的行線和列線被短路,該行線輸入由相應(yīng)列線決定。路,該行線輸入由相應(yīng)列線決定。 例如:例如:6 6號(hào)鍵被按下閉合時(shí),行線號(hào)鍵被按下閉合時(shí),行線PC0PC0和列線和列線PA6PA6被短路,此時(shí)
27、被短路,此時(shí)PC0PC0的電平由的電平由PA6PA6的電位所決定。的電位所決定。 列輸出列輸出 列序號(hào)列序號(hào)j 行輸入行輸入11111110, 0 讀讀PC11111101, 1 讀讀PC11111011, 2 讀讀PC11110111, 3 讀讀PC11101111, 4 讀讀PC11011111, 5 讀讀PC10111111, 6 讀讀PC01111111, 7 讀讀PC 行輸入行輸入 行序號(hào)行序號(hào)ij列無鍵按下:列無鍵按下: 11111111 11111110 0j列有鍵按下列有鍵按下 11111101 1 11111011 2 11110111 3 由列序號(hào)和行序號(hào)知第(由列序號(hào)和行
28、序號(hào)知第(i,j)鍵按下)鍵按下鍵盤掃描概念:鍵盤掃描概念: 鍵盤掃描子程序:鍵盤掃描子程序: 入口參數(shù):無入口參數(shù):無 出口出口參數(shù)參數(shù):有鍵按下,:有鍵按下,A中為鍵值。中為鍵值。 無鍵按下,無鍵按下,(A)=0FFHKEY1:MOV R5,#0MOV R3,#0FEHKEL:MOV DPTR,#2000HMOV A,R3MOVX DPTR,A ;列輸出列輸出 R3 R5列輸出值列輸出值 列序號(hào)列序號(hào)j11111110 011111101 111111011 211110111 311101111 411011111 510111111 601111111 7 鍵盤掃描子程序:鍵盤掃描子程
29、序: 入口參數(shù):無入口參數(shù):無 出口出口參數(shù)參數(shù):有鍵按下,:有鍵按下,A中為鍵值。中為鍵值。 無鍵按下,無鍵按下,(A)=0FFHKEY1:MOV R5,#0MOV R3,#0FEHKEL:MOV DPTR,#2000HMOV A,R3MOVX DPTR,A ;列輸出列輸出RL ARL A ;調(diào)整列輸出值,調(diào)整列輸出值,MOV R3,A MOV R3,A ;(R3)為下次為下次列輸出值列輸出值 INC R5 INC R5 ;(R5)為下次列輸出對應(yīng)的列序號(hào),為下次列輸出對應(yīng)的列序號(hào),MOV DPTR,#2002HMOVX A,DPTR;行輸入行輸入CJNEA,#0FFH,NEX1 ;有鍵按下
30、跳轉(zhuǎn)有鍵按下跳轉(zhuǎn)CJNE R5,#8,L0L0: JC KEL;列序號(hào)列序號(hào)8,8列掃描未完,跳轉(zhuǎn)列掃描未完,跳轉(zhuǎn)MOV A,#0FFH;無鍵按下,送無鍵按下,送0FFH 到到ARET;無鍵按下返回?zé)o鍵按下返回NEX1: .;計(jì)算鍵序號(hào)計(jì)算鍵序號(hào) R3 R5列輸出值列輸出值 列序號(hào)列序號(hào)j11111110 011111101 111111011 211110111 311101111 411011111 510111111 601111111 7 行輸入行輸入11111111時(shí),第時(shí),第j列無鍵按下列無鍵按下;(A)=11111110或或11111101或或11111011或或 1111011
31、1 被擊鍵被擊鍵鍵序號(hào)(見圖)。鍵序號(hào)(見圖)。 由行線和列線計(jì)算求得:由行線和列線計(jì)算求得:被擊鍵被擊鍵鍵序號(hào)鍵序號(hào)= =行序號(hào)行序號(hào)i i8 +8 +列序號(hào)列序號(hào)j j 被擊鍵被擊鍵鍵值。鍵值。 硬件設(shè)計(jì)時(shí),系統(tǒng)設(shè)計(jì)者定義每個(gè)鍵,設(shè)定鍵值。硬件設(shè)計(jì)時(shí),系統(tǒng)設(shè)計(jì)者定義每個(gè)鍵,設(shè)定鍵值。 被擊鍵鍵值可通過鍵序號(hào)查表求得。被擊鍵鍵值可通過鍵序號(hào)查表求得。 (R5)為列序號(hào)為列序號(hào)+1,行序號(hào)未知,但,行序號(hào)未知,但(A)有相關(guān)信息,求之于有相關(guān)信息,求之于R2NEX1: DEC R5 ;求得列序號(hào)求得列序號(hào) MOV R2,#0 ;行序號(hào)行序號(hào)R2R2 MOV R1,#4MOV R1,#4; ;共
32、有共有4 4行行LOOPC: LOOPC: RRC A RRC A ; ;移位找出移位找出0 0所在位位序號(hào)所在位位序號(hào) JNC EXILJNC EXIL INC R2 INC R2 ;R2 = R2+ 1;R2 = R2+ 1 DJNZ R1,LOOPCDJNZ R1,LOOPCEXIL: MOV A,R2 ;鍵序號(hào)鍵序號(hào)=行序號(hào)行序號(hào)8 8+列序號(hào)列序號(hào) RL A RL A RL AADD A,R5 ADD A,R5 ; (A); (A)乃鍵序號(hào),查表求鍵值碼乃鍵序號(hào),查表求鍵值碼 MOV DPTR,#KEYTABLEMOV DPTR,#KEYTABLE MOVC A,A+DPTR MOV
33、C A,A+DPTR; ;取鍵值取鍵值 RETRET; ;有鍵按下返回有鍵按下返回KEYTABLE: KEYTABLE: DB ; DB ; 鍵值表鍵值表DB ; DB ; 鍵值表鍵值表 DB ; DB ; 鍵值表鍵值表DB ; DB ; 鍵值表鍵值表 (A) R211111110 011111101 111111011 211110111 3 矩陣式鍵盤處理程序,一般有如下過程: 1)判斷是否有鍵按下 2)有則“鍵盤掃描”求鍵值:調(diào)用“鍵盤掃描子程序” 3)延時(shí):延時(shí)主要是“去抖動(dòng)”; 4) “鍵盤掃描”求鍵值,并與2)的結(jié)果比較:如果不相等,本次鍵盤掃描無效,結(jié)束;如果相等,此鍵值有效;
34、5)等待鍵釋放:可采用1)中的方法判按鍵是否釋放。判斷是否有鍵按下子程序(出口參數(shù):判斷是否有鍵按下子程序(出口參數(shù):(A)A)0 0,無鍵被擊),無鍵被擊)TESTKEY:MOV DPTR,#2000H TESTKEY:MOV DPTR,#2000H CLR A CLR A MOVX DPTR,A ; MOVX DPTR,A ;列值輸出全列值輸出全0 0 MOV DPTR,#2002H MOV DPTR,#2002H MOVX A,DPTR ; MOVX A,DPTR ;讀行值讀行值 CPL ACPL A ANL A,#0FH ; ANL A,#0FH ;高四位不用高四位不用 RETRET矩
35、陣式鍵盤處理程序框圖開 始判是否有鍵按下?按列掃描鍵盤求鍵值延 時(shí)判兩次鍵值是否相等?再次掃描鍵盤求鍵值等鍵釋放否?#0FFHA返 回NNYNYY矩陣式鍵盤處理程序: 1)判斷是否有鍵按下 調(diào)用“TESTKEY” 2)調(diào)用“鍵盤掃描子程序” 3)延時(shí),“去抖動(dòng)”; 4)調(diào)用“鍵盤掃描子程序”并與2)的結(jié)果比較: 不等,本次鍵盤掃描無效 相等,此鍵值有效; 5)等待鍵釋放: 調(diào)用“TESTKEY”,之后作相應(yīng)處理。矩陣式鍵盤處理程序:INTR0: LCALL TESTKEY TESTKEY ;出口參數(shù):(A)0無鍵按下,否則有鍵按下JNZJNZ KN1 KN1;有鍵按下轉(zhuǎn)KN1SJMP FRET
36、;無鍵按下返回A中0FFHKN1:LCALL KEY1;掃描鍵盤。出口參數(shù):(A)=鍵值MOV R1,A;將鍵值送R1中暫存LCALL DELAY;延時(shí),“去抖動(dòng)”LCALL KEY1;再次掃描鍵盤。出口參數(shù):(A)=鍵值XRL A,R1;兩次掃描鍵值比較JNZ FRET;不相等,本次“鍵盤掃描”無效,跳FRETWAITREWAITRE: LCALL TESTKEYLCALL TESTKEY ;相等,等鍵釋放:調(diào)TESTKEY,出口參數(shù)(A) JNZ WAITRE ;JNZ WAITRE ;(A)非0,有鍵按下(未釋放)MOV A,R1;A中返回鍵值SJMP jieshuFRET: MOV A
37、,#0FFHJieshu:. 問題:什么時(shí)候執(zhí)行這段程序?什么時(shí)候執(zhí)行這段程序? 問題:什么時(shí)候執(zhí)行問題:什么時(shí)候執(zhí)行“矩陣式鍵盤處理程序矩陣式鍵盤處理程序”? 條件執(zhí)行: 在系統(tǒng)某工況(編輯工況)下執(zhí)行:掃描鍵盤,識(shí)別出被擊鍵。 定時(shí)執(zhí)行: CPU每隔一定時(shí)間,掃描鍵盤,識(shí)別出被擊鍵。 中斷方式: 1)當(dāng)鍵盤上有鍵閉合時(shí),向CPU請求中斷。 2)CPU在中斷服務(wù)程序中對鍵盤掃描,識(shí)別出被擊鍵。 PC0PC1PC2PC3INT0 系統(tǒng)初始化時(shí),使PA輸出00000000B; 有鍵被擊,PC0,PC1,PC2,PC3必有為0者產(chǎn)生中斷請求( INT0 ) CPU響應(yīng)中斷,執(zhí)行中斷服務(wù)程序INTR
38、0 中斷方式:增加中斷請求電路(見小圖)中斷方式的程序安放 ORG 0000HORG 0000HLJMP STARTLJMP STARTORG 0003HORG 0003HLJMP INTR0LJMP INTR0START:START: MOV DPTR,#2000H MOV DPTR,#2000H MOV A,#10001001B MOV A,#10001001B; ;設(shè)置設(shè)置PA,PBPA,PB為基本輸出口,為基本輸出口,PCPC為輸入口為輸入口 MOVX DPTR,AMOVX DPTR,A;8255;8255初試化初試化 INC DPTR CLR AMOVX DPTR,A ;使使8255的的PA輸出輸出00000000B . .INTR0: LCALL TESTKEY TESTKEY ;出口參數(shù):(A)0無鍵按下,否則有鍵按下JNZJNZ KN1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國完全生物基聚酰胺行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 幼兒繪本講述與演繹幼兒繪本講述的停連運(yùn)用技巧講解
- 2025景區(qū)商場蛇年新春嘉年華活動(dòng)策劃方案
- 2025綠洲集團(tuán)工程合同管理規(guī)范
- 沙石采購合同范本工程合同
- 2025【合同范本】打印機(jī)耗材長期供貨合同
- 防雷技術(shù)服務(wù)合同
- 2025某購物中心合同管理規(guī)定模板
- 服務(wù)訂報(bào)合同書
- 杭州房屋租賃合同模板
- 湖南汽車工程職業(yè)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 第2課+古代希臘羅馬(教學(xué)設(shè)計(jì))-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 中儲(chǔ)糧蘭州公司考試筆試題庫
- 焊接機(jī)器人在汽車制造中應(yīng)用案例分析報(bào)告
- 重建成長型思維課件
- 電捕焦油器火災(zāi)爆炸事故分析
- 質(zhì)量問題分析及措施報(bào)告
- 汽修廠安全風(fēng)險(xiǎn)分級(jí)管控清單
- 現(xiàn)代通信原理與技術(shù)(第五版)PPT全套完整教學(xué)課件
- 病例展示(皮膚科)
- DB31T 685-2019 養(yǎng)老機(jī)構(gòu)設(shè)施與服務(wù)要求
評(píng)論
0/150
提交評(píng)論