《基于任務(wù)驅(qū)動(dòng)的單片機(jī)應(yīng)用教程》課件第9章_第1頁(yè)
《基于任務(wù)驅(qū)動(dòng)的單片機(jī)應(yīng)用教程》課件第9章_第2頁(yè)
《基于任務(wù)驅(qū)動(dòng)的單片機(jī)應(yīng)用教程》課件第9章_第3頁(yè)
《基于任務(wù)驅(qū)動(dòng)的單片機(jī)應(yīng)用教程》課件第9章_第4頁(yè)
《基于任務(wù)驅(qū)動(dòng)的單片機(jī)應(yīng)用教程》課件第9章_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論