版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)9電子密碼鎖的設(shè)計(jì)9.1任務(wù)內(nèi)容與分析
9.2任務(wù)實(shí)施9.3任務(wù)相關(guān)知識(shí)
9.1任務(wù)內(nèi)容與分析
1.任務(wù)內(nèi)容
在單片機(jī)的應(yīng)用系統(tǒng)中,通常都要有人機(jī)對(duì)話功能,如輸入/輸出數(shù)據(jù)、對(duì)系統(tǒng)運(yùn)行進(jìn)行控制等,這時(shí)就需要鍵盤。任務(wù)9以電子密碼鎖為例,介紹鍵盤接口技術(shù)的應(yīng)用。
2.任務(wù)分析
若密碼輸入正確,則輸出一個(gè)電磁鎖開鎖信號(hào);若密碼輸入錯(cuò)誤,則密碼錯(cuò)誤指示燈亮。10s內(nèi)無任何操作后,清除所有輸入內(nèi)容,等待下次輸入。6位數(shù)碼管用于顯示6位數(shù)密碼,按某鍵后相應(yīng)的數(shù)值出現(xiàn)在數(shù)碼管上;再按一個(gè)鍵,則數(shù)字出現(xiàn)在下一個(gè)數(shù)碼管上。當(dāng)清除所有輸入和無任何操作時(shí),數(shù)碼管無顯示。
6位數(shù)密碼的數(shù)字可以是“0~9”,這就需要10個(gè)按鍵,還要有1個(gè)確認(rèn)鍵、1個(gè)清除鍵,而單片機(jī)的I/O口資源有限,故采用4?×?4矩陣式鍵盤。圖9-1為電子密碼鎖原理框圖。P3.0接電磁開鎖信號(hào);P3.3接蜂鳴器,用于按鍵時(shí)的提示音;P3.4接1個(gè)發(fā)光二極管,用于密碼輸入錯(cuò)誤指示。圖9-1電子密碼鎖原理框圖9.2任務(wù)實(shí)施
步驟1:根據(jù)任務(wù)分析,設(shè)計(jì)硬件電路原理圖。
采用89S51作為主控制器,外圍電路器件包括數(shù)碼管驅(qū)動(dòng)、蜂鳴器的輸出驅(qū)動(dòng)、矩陣式鍵盤及發(fā)光二極管的輸出等。
數(shù)碼管驅(qū)動(dòng)采用6個(gè)共陰極數(shù)碼管顯示,由于單片機(jī)的驅(qū)動(dòng)能力有限,采用74HC244作為數(shù)碼管的驅(qū)動(dòng),在74HC244的7段碼輸出線上串聯(lián)100Ω電阻起限流作用。繼電器旁邊并聯(lián)1個(gè)保護(hù)二極管,以消除電磁鎖可能產(chǎn)生的反向高電壓和電磁干擾,從而保護(hù)三極管等驅(qū)動(dòng)元器件。采用中功率的三極管8050來驅(qū)動(dòng)繼電器。電磁鎖的選用要視應(yīng)用場(chǎng)合而定,要求吸合力足夠,再根據(jù)電磁鎖的用電量來選用繼電器。
蜂鳴器采用PNP三極管8550來驅(qū)動(dòng),低電平有效。矩陣式鍵盤的設(shè)計(jì)參見9.3.3小節(jié)。硬件電路原理如圖9-2所示。圖9-2電子密碼鎖電路原理圖主程序完成內(nèi)部RAM單元和特殊功能寄存器的初始化后,進(jìn)入一個(gè)循環(huán)結(jié)構(gòu)。鍵盤掃描中斷服務(wù)程序?qū)崿F(xiàn)判斷是否有鍵閉合以及閉合鍵的鍵號(hào),每50ms掃描鍵盤1次。待機(jī)中斷服務(wù)程序?qū)崿F(xiàn)待機(jī)計(jì)時(shí)(10s),若10s內(nèi)沒有輸入內(nèi)容則清除已輸入的內(nèi)容。步驟3:根據(jù)整體設(shè)計(jì)思路,繪出程序流程圖。
主程序、數(shù)碼管顯示子程序、密碼判斷子程序及待機(jī)中斷服務(wù)程序分別如圖9-3~圖9-5所示。圖9-3主程序流程圖圖9-4數(shù)碼顯示子程序圖9-5密碼判斷子程序步驟4:根據(jù)流程圖編制源程序。具體如下:
//*********電子密碼鎖程序***************//
;程序名:電子密碼鎖程序PWKEY.A
;程序功能:?jiǎn)纹瑱C(jī)控制的電子密碼鎖設(shè)計(jì)
DISPBUFEQU30H ;顯示緩沖單元為30H~35H
KEY_COUNTEQU41H
;密碼計(jì)數(shù)器,通過它得知輸入密碼的個(gè)數(shù)
50MS_COUNTEQU42H ;?50ms單元,用于計(jì)
50ms中斷次數(shù) 1S_COUNTEQU43H
;?50ms單元,通過它得知
是否到1s
KEYMARK
BIT
00H;有鍵按下標(biāo)志位,1為按下
標(biāo)志
PASSMARKBIT01H;密碼是否正確標(biāo)志,1為密
碼正確標(biāo)志
BUZZERBITP3.3
EKY_OPENBITP3.0
ERROR_LEDBITP3.4
ORG0000H
AJMPSTART
ORG000BH
AJMPKEY ;鍵盤掃描中斷服務(wù)程序
ORG001BH
AJMP
WAIT ;待機(jī)中斷服務(wù)程序
ORG0030H
;**************主程序****************
START: MOVTMOD,#11H
;T0、T1均工作在方式
1定時(shí)
MOVTH0,#3CH
;裝T0計(jì)數(shù)初值
MOVTL0,#0B0H
MOVTH1,#3CH
;裝T1計(jì)數(shù)初值
MOVTL1,#0B0H
MOVKEY_COUNT,#00H ;密碼計(jì)數(shù)器清零 MOV50MS_COUNT,#00H;?50ms計(jì)數(shù)單元清零
MOV1S_COUNT,#00H ;?1s計(jì)數(shù)單元清零
CLRKEYMARK ;有鍵按下標(biāo)志位清零
CLRPASSMARK ;密碼是否正確標(biāo)志清零
ACALLDISCARD ;調(diào)用密碼計(jì)數(shù)器與顯示緩沖單
元清零的子程序
SETBET0 ;開中斷
SETBET1
SETBEA
SETBTR0
;開定時(shí)器計(jì)數(shù)器0,鍵盤掃描中斷
LOOP: ACALLDISP;調(diào)用數(shù)碼管顯示子程序
SETBTR1
JBKEYMARK,MP
;判斷是否有鍵閉合
AJMPLOOP
MP:CLRPASSMARK;有鍵閉合,清除鍵閉合有效標(biāo)志
CLRTR1
ACLLBEEP
;調(diào)用蜂鳴器子程序
MOVA,B
;取鍵號(hào)
MOVR1,#DISPBUF;指向首個(gè)顯示緩沖單元
SUBBA,,#9
JNCGNJIAN
;判斷是否為功能鍵 MOVA,B
;為數(shù)字鍵
MOV@R1,A
INCKEY_COUNT;密碼計(jì)數(shù)器加1
INCR1;指向下一個(gè)顯示緩沖單元
ACALLPASSWORD
;調(diào)用密碼判斷子程序
AJMPLOOP
GNJIAN:MOVA,B
;為功能鍵
CJNEA,#10,ACK
;判斷是不是取消鍵
ACLLDISCARD
;是取消鍵,則清除所有輸入內(nèi)容
AJMPLOOP
ACK:CJNEA,#11,NEXT
;判斷是不是確定鍵
JBPASSMARK,OPEN
;判斷密碼是否正確
CLRERROR_LED
;密碼錯(cuò)誤,亮燈指示
AJMPLOOP
OPEN: SETBKEY_OPEN
;開電磁鎖
NEXT: AJMPLOOP
;**************數(shù)碼管顯示子程序***********
;功能:數(shù)碼顯示已輸入的密碼
DISP: MOVR0,#DISPBUF;?LED顯示位數(shù)送R2
MOVR4,#20H ;從最右端LED開始顯示 MOVDPTR,#TAB ;字型表首地址
MOVA,KEY_COUNT
CJNEA,#00H,DISP1
;判斷密碼個(gè)數(shù)是否為0
AJMPEXIT1
;為0則退出,不顯示
DISP1:MOVA,@R0
;顯示緩沖區(qū)首地址送R0
MOVCA,@A+DPTR
;查表取字型碼
MOVP0,A
;字型碼送P0口 MOVA,R4
;取位選控制字
MOVP2,A
;送P2口
ACALLDELAY_1ms
;延時(shí)1ms
MOVR6,KEY_COUNT
DJNZR6,DISP2
;判斷是否顯示完已輸入的密碼
AJMPEXIT1
DISP2: INCR0
;指向下一個(gè)密碼
RRA
;掃描碼移位
MOVR4,A
AJMPDISP1
EXIT1: RET
TAB: DB3FH,06H,5BH,4FH,66H,6DH
;“0~9”共陰極字型碼
DB7DH,07H,7FH,6FH
;****************密碼判斷子程序**************
;功能:判斷是否輸入完6個(gè)密碼,若輸入完,則判斷所輸入密碼是否正確
;出口參數(shù):密碼正確標(biāo)志和密碼錯(cuò)誤標(biāo)志
PASSWORD: MOVA,KEY_COUNT
;取密碼已輸入個(gè)數(shù)
CJNEA,#06H,EXIT2
;判斷是否已輸入完6個(gè)密碼
MOVKEY_COUNT,#00H ;密碼計(jì)數(shù)器清零 MOVDPTR,#PASSTAB
;指向程序設(shè)定密碼表首址
MOVR5,#00H
;指向第一個(gè)設(shè)定密碼
MOVR0,#DISBUF
;取顯示緩沖單元首址
JUDGE: MOVA,R5
MOVCA,@A+DPTR
;查表取密碼
MOV60H,@R0 CJNEA,60H,EXIT2
;判斷密碼是否正確
INCR0
;指向下一個(gè)顯示緩沖單元
INCR5
;指向下一個(gè)設(shè)定密碼
CJNER5,#06H,JUDGE
;?6個(gè)密碼是否判斷完
SETBPASSMARK
;建立密碼正確標(biāo)志
AJMPEXIT2
EXIT: CLRPASSMARK
;建立密碼錯(cuò)誤標(biāo)志
EXIT2: RET
PASSTAB: DB1,2,3,4,5,6 ;密碼定為123456
;*******鍵盤掃描中斷服務(wù)子程序KEY************
KEY: ...;請(qǐng)參考例9-2鍵盤掃描程序
RETI
;************待機(jī)中斷服務(wù)子程序WAIT***********
;功能:10s內(nèi)沒有輸入內(nèi)容則清除已輸入的內(nèi)容
WAIT: MOVTH1,#3CH
;裝T1計(jì)數(shù)初值
MOVTL1,#0B0H
INC50MS_COUNT
MOVA,50MS_COUNT
CJNEA,#20H,EXIT3
;判斷是否到1s
INC1S_COUNT MOVA,1S_COUNT
CJNEA,#10,EXIT3 ;判斷是否到10s
ACLLDISCARD
EXIT3: RETI
;**********清除緩沖單元子程序***********
DISCARD:MOVKEY_COUNT,#00H ;密碼計(jì)數(shù)器清零
MOVR7,#06H ;顯示緩沖單元清零
MOVR0,#DISPBUF
CLRA
L1:MOV@R0,A
DJNZR7,L1
RET
;************蜂鳴器提示音子程序****************
BEEP:
CLRBUZZER
ACALLDELAY_2MS
SETBBUZZER
ACALLDELAY_2MS
RET
;*******1ms延時(shí)子程序*******************
DELAY_1ms: MOVR7,#02H;延時(shí)1ms子程序
DL1: MOVR6,#0FFH
DL2: DJNZR6,DL2
DJNZR7,DL1
RET
;*******2ms延時(shí)子程序*******************
DELAY_2ms:MOVR7,#50;延時(shí)2ms子程序
DL1: MOVR6,#123
DL2: DJNZR6,DL2
DJNZR7,DL1
RET
9.3任務(wù)相關(guān)知識(shí)
9.3.1鍵盤接口
1.按鍵的特點(diǎn)
鍵盤是由若干個(gè)按鍵按照一定規(guī)則組成的,每一個(gè)按鍵實(shí)際上是一個(gè)開關(guān)元件。按鍵按照結(jié)構(gòu)原理可分為兩類:一類是觸點(diǎn)式開關(guān)按鍵,如機(jī)械式開關(guān)、導(dǎo)電橡膠式開關(guān)等;另一類是無觸點(diǎn)式開關(guān)按鍵,如電氣式按鍵、磁感應(yīng)按鍵等。前者造價(jià)低,后者壽命長(zhǎng)。
2.按鍵的輸入原理
對(duì)于一組鍵或一個(gè)鍵盤,總有一個(gè)接口電路與CPU相連。圖9-6所示電路中,當(dāng)S0鍵按下時(shí),該鍵所對(duì)應(yīng)口線將由高電平變?yōu)榈碗娖?,這樣當(dāng)檢測(cè)到P1.0口為低電平時(shí),可判斷出S0鍵被按下。因此,通過軟件可判斷出按鍵是否被按下。圖9-6按鍵輸入電路
3.按鍵的抖動(dòng)及消抖
由于通常的按鍵所用的開關(guān)是機(jī)械式開關(guān),當(dāng)開關(guān)閉合、斷開時(shí)并不是馬上穩(wěn)定地接通和斷開,而是在閉合與斷開瞬間均伴隨有一連串的抖動(dòng)。其抖動(dòng)過程如圖9-7所示。抖動(dòng)時(shí)間的長(zhǎng)短與開關(guān)的機(jī)械特性有關(guān),一般為5~10ms。圖9-7按鍵觸點(diǎn)的機(jī)械抖動(dòng)為了確保CPU對(duì)鍵的一次閉合僅做一次處理,必須在程序或硬件上進(jìn)行防抖處理。為節(jié)省硬件,通常在單片機(jī)系統(tǒng)中,一般不采用硬件方法消除鍵的抖動(dòng),而是用軟件方法消抖。即檢測(cè)鍵閉合后延時(shí)5~10ms,讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5~10ms的延時(shí),待后延抖動(dòng)消失后再轉(zhuǎn)入該鍵處理程序。只有按鍵按下再放開后才做一次鍵處理。
以圖9-6中S0鍵為例,按鍵軟件消抖方法程序如下:
S0_KEY: JB
P1.0,
S0_KEY
;無鍵按下,繼續(xù)查詢
ACALL
DELAY_10MS;有鍵按下,延時(shí)10ms
JB
P1.0,
S0_KEY
;再判斷,若無鍵按下,是抖動(dòng)轉(zhuǎn)回
JNB
P1.0,
$
;鍵一直按下,等待
ACALL
DELAY_10MS
;鍵松開,延時(shí)10ms
JB
P1.0,
S0_PROG
;一次按鍵完成,轉(zhuǎn)S0鍵處理程序
S0_PROG:9.3.2獨(dú)立式鍵盤的工作原理
1.獨(dú)立式鍵盤接口電路
獨(dú)立式按鍵是直接用I/O口線構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)是每個(gè)按鍵單獨(dú)占用一根I/O口線,每個(gè)按鍵的工作不會(huì)影響其他I/O口線的狀態(tài)。獨(dú)立式按鍵的典型應(yīng)用如圖9-8所示。圖9-8獨(dú)立式按鍵的典型應(yīng)用
2.獨(dú)立式鍵盤的軟件結(jié)構(gòu)
【例9-1】請(qǐng)完成任務(wù)8數(shù)碼秒表的擴(kuò)展功能,即用3個(gè)獨(dú)立式按鍵實(shí)現(xiàn)秒表的啟動(dòng)、暫停和清零功能。解3個(gè)按鍵采用獨(dú)立式鍵盤接法,第1和第2個(gè)按鍵分別連接到外部中斷TNT0、INT1的輸入引腳P3.2、P3.3,第3個(gè)按鍵連接到定時(shí)器T1的外部脈沖輸入引腳P3.5。以中斷方式實(shí)現(xiàn)鍵盤輸入狀態(tài)的掃描,其中按鍵1為啟動(dòng)按鈕,按鍵2為暫停按鈕,按鍵3為清零按鈕。硬件原理圖請(qǐng)參考任務(wù)8中圖8-1。程序設(shè)計(jì)思路:任務(wù)8程序劃分為主程序和秒計(jì)時(shí)程序兩大模塊。在本例中再增添一個(gè)鍵盤掃描程序模塊,鍵盤掃描也由中斷服務(wù)子程序來實(shí)現(xiàn)。定時(shí)器T1設(shè)為8位的計(jì)數(shù)方式2,計(jì)數(shù)初值設(shè)為0FFH,這樣當(dāng)按鍵3按下時(shí),即可引起中斷。中斷源TNT0、INT1和T1均允許中斷,各按鍵的處理通過相應(yīng)的中斷子程序來實(shí)現(xiàn)。
//********數(shù)碼秒表程序***********//
;程序名:數(shù)碼秒表程序SECWATCH.A
;程序功能:數(shù)碼秒表,秒表啟動(dòng)、顯示、暫停和清零功能
MSECEQU40H
SECEQU41H
ORG0000H
AJMPSTART
ORG0003H
AJMPKE2;轉(zhuǎn)鍵盤暫停程序,外部中斷TNT0
ORG000BH
AJMPCONT;轉(zhuǎn)秒表計(jì)時(shí)定時(shí)器中斷服務(wù)程序
ORG0013H
AJMPKE1
;轉(zhuǎn)鍵盤啟動(dòng)程序,外部中斷TNT1
ORG001BH
AJMPKE3;轉(zhuǎn)秒表清零程序,定時(shí)器T1中斷
ORG0030H
START: MOVTMOD,#61H;T0方式1定時(shí),T1方式
2計(jì)數(shù)
MOVTH0,#3CH
;裝T0計(jì)數(shù)初值
MOVTL0,#0B0H
MOVTH0,#0FFH
;裝T1計(jì)數(shù)初值
MOVTL0,#0FFH
MOVMSEC,#14H
;50ms計(jì)數(shù)單元初值
MOVSEC,#00H
;秒計(jì)數(shù)單元初值
MOVSP,#3FH
;堆棧指針初值
MOV30H,#00H
;顯示緩沖單元清零
MOV31H,#00H
MOVIE,#8FH
;允許中斷
AGIN: LCALLDISP ;調(diào)用顯示子程序
AJMPAGIN
;***************顯示子程序***********
DISP: .... ;請(qǐng)參考任務(wù)8
RET
;*********定時(shí)器T0中斷服務(wù)子程序CONT********
;入口參數(shù):秒計(jì)數(shù)單元SEC
;出口參數(shù):秒單元SEC,顯示緩沖區(qū)30H、31H
CONT:
....
;請(qǐng)參考任務(wù)6
RETI
;***********按鍵1中斷服務(wù)子程序KE1*************
KE1:SETBTR0;啟動(dòng)定時(shí)器T0,開始計(jì)時(shí)
SETBTR1 ;啟動(dòng)定時(shí)器1
RETI
;*******按鍵2中斷服務(wù)子程序KE2************
KE2:CLRTR0 ;關(guān)閉定時(shí)器T0,暫停計(jì)時(shí)
RETI
;*********按鍵3中斷服務(wù)子程序KE3**************
KE3:
CLRTR0
;關(guān)閉定時(shí)器T0,暫停計(jì)時(shí)
MOVSEC,#00H
;秒計(jì)數(shù)值清零
MOV30H,#00H
;秒顯示緩沖區(qū)清零
MOV31H,#00H
RETI
END9.3.3矩陣式鍵盤的工作原理
1.矩陣式鍵盤接口電路
矩陣式鍵盤由行線和列線組成,按鍵位于行、列線的交叉點(diǎn)上,其結(jié)構(gòu)如圖9-9所示。由圖可知,一個(gè)4×4的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)含有16個(gè)按鍵的鍵盤。在按鍵數(shù)量較多時(shí),矩陣式鍵盤較之獨(dú)立式按鍵鍵盤要節(jié)省很多I/O口。圖9-94×4矩陣式鍵盤矩陣式鍵盤中,行、列線分別連接到按鍵開關(guān)的兩端,行線通過上拉電阻接到VCC上。當(dāng)無鍵按下時(shí),行線處于高電平狀態(tài);當(dāng)有鍵按下時(shí),行、列線將導(dǎo)通,此時(shí)行線電平將由與此行線相連的列線電平?jīng)Q定。這是識(shí)別按鍵是否按下的關(guān)鍵。然而,矩陣鍵盤中的行、列線和多個(gè)鍵相連,各按鍵按下與否均影響該鍵所在行線和列線的電平,各按鍵間將相互影響。
2.矩陣式鍵盤的識(shí)別
圖9-9中8號(hào)鍵的識(shí)別為例來說明掃描法識(shí)別按鍵的過程。
按鍵按下時(shí),與此鍵相連的行線與列線導(dǎo)通。行線在無鍵按下時(shí)處在高電平,顯然,如果讓所有的列線也處在高電平,那么按鍵按下與否不會(huì)引起行線電平的變化,因此,必須使所有列線處在低電平,只有這樣,當(dāng)有鍵按下時(shí),該鍵所在的行電平才會(huì)由高電平變?yōu)榈碗娖健?/p>
CPU根據(jù)行電平的變化,便能判定相應(yīng)的行是否有鍵按下。當(dāng)8號(hào)鍵按下時(shí),X2一定為低電平。然而,X2行為低電平時(shí),能否肯定是8號(hào)鍵按下呢?回答是否定的,因?yàn)?、10、11號(hào)鍵按下,同樣也會(huì)使X2行為低電平。這種依次輪流每次選通一列的工作方式稱為鍵盤掃描。采用鍵盤掃描后,再來觀察8號(hào)鍵按下時(shí)的工作過程。當(dāng)Y0列處于低電平時(shí),X2行處于低電平,而當(dāng)Y1、Y2、Y3列處于低電平時(shí),X2行卻處在高電平,由此可判定按下的鍵應(yīng)是X2行與Y0列的交叉點(diǎn),即8號(hào)鍵。
3.矩陣式鍵盤的編碼
對(duì)于矩陣式鍵盤,按鍵的位置由行號(hào)和列號(hào)唯一確定,因此可分別對(duì)行號(hào)和列號(hào)進(jìn)行二進(jìn)制編碼,然后將兩值合成一個(gè)字節(jié),高4位是行號(hào),低4位是列號(hào)。如圖9-9中的8號(hào)鍵,位于X2行,Y0列,故其鍵盤編碼應(yīng)為20H。采用上述編碼對(duì)于不同行的鍵離散性較大,不利于散轉(zhuǎn)移指令對(duì)按鍵進(jìn)行處理。因此,可采用依次排列鍵號(hào)的方式對(duì)按鍵進(jìn)行編碼。以圖9-9中的4×4鍵盤為例,可將鍵號(hào)編碼為0,1,2,3,…,14,15共16個(gè)鍵號(hào)。編碼相互轉(zhuǎn)換可通過計(jì)算或查表的方法實(shí)現(xiàn)。鍵號(hào)計(jì)算公式為:鍵號(hào)=所在行號(hào)×鍵盤列數(shù)+所在列號(hào)或鍵號(hào)?=?行首鍵號(hào)(0、4、8、12)+列號(hào)(0、1、2、3)。
4.矩陣式鍵盤的工作方式
對(duì)鍵盤的響應(yīng)取決于鍵盤的工作方式,而鍵盤的工作方式應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU的工作狀況而定,其選取的原則是既要保證CPU能及時(shí)響應(yīng)按鍵操作,又不要過多占用CPU的工作時(shí)間。通常,鍵盤的工作方式有3種,即編程掃描、定時(shí)掃描和中斷掃描。
1)編程掃描
鍵盤掃描程序流程如圖9-10所示,一般應(yīng)包括以下內(nèi)容:
(1)判斷有無鍵按下。
(2)鍵盤掃描取得閉合鍵的行、列值。
(3)用計(jì)算法或查表法得到鍵值。
(4)判斷閉合鍵是否釋放,如未釋放則繼續(xù)等待。
(5)保存閉合鍵鍵號(hào),同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。圖9-10鍵盤掃描程序流程圖
2)定時(shí)掃描
定時(shí)掃描每隔一段時(shí)間對(duì)鍵盤掃描一次,利用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生一定時(shí)間(如10ms)的定時(shí),當(dāng)?shù)竭_(dá)定時(shí)時(shí)間后,就產(chǎn)生定時(shí)器溢出中斷,CPU響應(yīng)中斷后轉(zhuǎn)去執(zhí)行鍵盤掃描子程序,并識(shí)別鍵號(hào)。
3)中斷掃描
采用上述兩種鍵盤掃描方式時(shí),無論是否按鍵,CPU都要定時(shí)掃描鍵盤,而單片機(jī)應(yīng)用系統(tǒng)工作時(shí)并非經(jīng)常需要鍵盤輸入。因此,CPU經(jīng)常處于空掃描狀態(tài)。為提高CPU的工作效率,可采用中斷掃描工作方式。其工作過程如下:當(dāng)無鍵按下時(shí),CPU處理自己的工作;當(dāng)有鍵按下時(shí),產(chǎn)生中斷請(qǐng)求,CPU轉(zhuǎn)去執(zhí)行鍵盤掃描子程序,并識(shí)別鍵號(hào)。
【例9-2】任務(wù)9電子密碼鎖的4×4矩陣式鍵盤的程序設(shè)計(jì)。鍵盤的行線接到P1口的低4位,列線接到P1口的高4位。行線P1.0~P1.3分別接有4個(gè)上拉電阻到正電源VCC,并把行線P1.0~P1.3設(shè)置為輸入線,列線P1.4~P1.7設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。要求有10個(gè)數(shù)字鍵,鍵值為0~9;兩個(gè)功能鍵,其中一個(gè)為確認(rèn)鍵,另一個(gè)為取消鍵。解(1)硬件設(shè)計(jì)。硬件電路如圖9-9所示,設(shè)計(jì)數(shù)字鍵0~9的鍵號(hào)依次為0~9,取消鍵的鍵號(hào)為10,確認(rèn)鍵的鍵號(hào)為11,鍵號(hào)可按鍵值=行首鍵號(hào)(0、4、8、12)+列鍵號(hào)(0、1、2、3)的公式計(jì)算。按鍵功能分布及鍵號(hào)如圖9-11所示。圖9-114×4矩陣式鍵盤中每個(gè)按鍵的輸入信息和鍵號(hào)
(2)程序設(shè)計(jì)思路。
①檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4~P1.7輸出全“0”,讀取P1.0~P1.3的狀態(tài);若P1.0~P1.3為全“1”,則無鍵閉合,否則有鍵閉合。
②去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。
③若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤的行線進(jìn)行掃描。
P1.4~P1.7按下述4種組合依次輸出:
在每組行輸出時(shí)讀取P1.0~P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。
(3)鍵盤掃描程序。
參考鍵盤掃描程序流程圖9-10及以上分析,請(qǐng)自行繪出流程圖。
//*************鍵盤掃描子程序*************//
;子程序功能:電子密碼鎖的4?×?4矩陣式鍵盤的掃描程序
;子程序名:KEY
;入口參數(shù):無
;出口參數(shù):鍵號(hào)保存在特殊功能寄存器B中
KEY:MOV
P1,#0FH
;高4位P1.4~P1.7輸出全“0”
MOVA,P1
ANLA,#0FH
;讀取低4位P1.0~P1.3的狀態(tài)
CJNEA,#0FH,NEXT1;判斷低4位是否為0,若
不為0,表示有鍵閉合
SJMPNEXT4;無鍵閉合,清有鍵按下標(biāo)志,
返回
NEXT1:ACALLDELAY_10MS
;延時(shí),防抖動(dòng)
MOVA,P1
ANLA,#0FH;再讀取低4位P1.0~P1.3的狀態(tài)
CJNEA,#0FH,NEXT2;判斷是否確實(shí)有鍵閉合
SJM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告招牌安裝合同年
- 辦公室租賃合同書
- 安全事故賠償協(xié)議書
- 移動(dòng)互聯(lián)網(wǎng)開發(fā)與應(yīng)用作業(yè)指導(dǎo)書
- 勞動(dòng)合同企業(yè)勞動(dòng)合同
- 2025年云南貨運(yùn)從業(yè)資格證考試試題及答案解析大全
- 小學(xué)二年級(jí)數(shù)學(xué)下學(xué)期口算練習(xí)
- 電梯保養(yǎng)合同(2篇)
- 2024-2025學(xué)年高中物理課時(shí)分層作業(yè)8原子核的組成與核力含解析教科版選修3-5
- 中圖版地理八年級(jí)下冊(cè)《第六節(jié) 學(xué)習(xí)與探究-走進(jìn)埃及》聽課評(píng)課記錄1
- 2025年度年度表彰大會(huì)會(huì)議服務(wù)合同
- 2025年個(gè)人土地承包合同樣本(2篇)
- 2024-2025學(xué)年教科版八年級(jí)物理下冊(cè) 第12章 機(jī)械能 綜合素質(zhì)評(píng)價(jià)卷(含答案)
- 網(wǎng)絡(luò)貨運(yùn)行業(yè)研究報(bào)告
- 【人教版化學(xué)】選擇性必修1 知識(shí)點(diǎn)默寫小紙條(答案背誦版)
- 人教版七年級(jí)英語(yǔ)上冊(cè)單元重難點(diǎn)易錯(cuò)題Unit 2 單元話題完形填空練習(xí)(含答案)
- 00015-英語(yǔ)二自學(xué)教程-unit1
- 新版建設(shè)工程工程量清單計(jì)價(jià)標(biāo)準(zhǔn)解讀
- 云南省昆明市盤龍區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期語(yǔ)文期末試卷
- 2024-2025年突發(fā)緊急事故(急救護(hù)理學(xué))基礎(chǔ)知識(shí)考試題庫(kù)與答案
- 左心耳封堵術(shù)護(hù)理
評(píng)論
0/150
提交評(píng)論