MCS與鍵盤(pán)、顯示器、課件_第1頁(yè)
MCS與鍵盤(pán)、顯示器、課件_第2頁(yè)
MCS與鍵盤(pán)、顯示器、課件_第3頁(yè)
MCS與鍵盤(pán)、顯示器、課件_第4頁(yè)
MCS與鍵盤(pán)、顯示器、課件_第5頁(yè)
已閱讀5頁(yè),還剩99頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章MCS-51與鍵盤(pán)、顯示器、撥盤(pán)、打印機(jī)的接口設(shè)計(jì)

信息技術(shù)教研室溫川雪第10章MCS-51與鍵盤(pán)、顯示器、撥盤(pán)、打印機(jī)的接1輸入外設(shè):鍵盤(pán)、BCD碼撥盤(pán)等;輸出外設(shè):LED顯示器、LCD顯示器、打印機(jī)等。10.1LED顯示器接口原理LED(LightEmittingDiode):發(fā)光二極管的縮寫(xiě)。顯示器前面冠以“LED”。10.1.1LED顯示器的結(jié)構(gòu)常用的LED顯示器為8段(或7段,8段比7段多了一個(gè)小數(shù)點(diǎn)“dp”段)。輸入外設(shè):鍵盤(pán)、BCD碼撥盤(pán)等;輸出外設(shè):LED顯示器、LC2MCS與鍵盤(pán)、顯示器、課件3為使LED顯示不同的符號(hào)或數(shù)字,要為L(zhǎng)ED提供段碼(或稱(chēng)字型碼)。提供給LED顯示器的段碼(字型碼)正好是一個(gè)字節(jié)(8段)。各段與字節(jié)中各位對(duì)應(yīng)關(guān)系如下:按上述格式,8段LED的段碼如表10-1所示。為使LED顯示不同的符號(hào)或數(shù)字,要為L(zhǎng)ED提供段碼提供給LE4顯示字符共陰極段碼共陽(yáng)極段碼顯示字符共陰極段碼共陽(yáng)極段碼03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“滅”00HFFHb7CH83H………表10-1LED段碼(8段)顯示字符共陰極段碼共陽(yáng)極段碼顯示字符共陰極段碼共陽(yáng)極段碼035表10-1只列出了部分段碼,可根據(jù)實(shí)際情況選用。另外,段碼是相對(duì)的,它由各字段在字節(jié)中所處的位決定。例如表10-1中8段LED段碼是按格式:而形成的,“0”的段碼為3FH(共陰)。反之,如將格式改為下列格式:則“0”的段碼為7EH(共陰)。字型及段碼由設(shè)計(jì)者自行設(shè)定,習(xí)慣上還是以“a”段對(duì)應(yīng)段碼的最低位。表10-1只列出了部分段碼,可根據(jù)實(shí)際情況選用。另外,段碼是6N個(gè)LED顯示塊有N位位選線和8×N根段碼線。10.1.2LED顯示器工作原理圖10-2是4位LED顯示器的結(jié)構(gòu)原理圖。N個(gè)LED顯示塊有N位位選線和8×N根段碼線。10.1.27段碼線控制顯示的字型,位選線控制該顯示位的亮或暗。靜態(tài)顯示和動(dòng)態(tài)顯示兩種顯示方式。1.靜態(tài)顯示方式段碼線控制顯示的字型,位選線控制該顯示位的亮或暗。靜態(tài)顯示和8各位的公共端連接在一起(接地或+5V)。每位的段碼線(a~dp)分別與一個(gè)8位的鎖存器輸出相連。顯示字符一確定,相應(yīng)鎖存器的段碼輸出將維持不變,直到送入另一個(gè)段碼為止。顯示的亮度高。2.動(dòng)態(tài)顯示方式所有位的段碼線相應(yīng)段并在一起,由一個(gè)8位I/O口控制,形成段碼線的多路復(fù)用,各位的公共端分別由相應(yīng)的I/O線控制.各位的公共端連接在一起(接地或+5V)。每位的段碼線(9圖10-4:4位8段LED動(dòng)態(tài)顯示電路。其中段碼線占用一個(gè)8位I/O口,而位選線占用一個(gè)4位I/O口。圖10-4:4位8段LED動(dòng)態(tài)顯示電路。其中段碼線占用一個(gè)810動(dòng)態(tài)顯示接口動(dòng)態(tài)顯示接口11此時(shí)同時(shí)向6位LED燈管輸出相同的字符,如何能實(shí)現(xiàn)顯示多個(gè)不同字符?掃描顯示方式(ScanDisplayMode):

某一時(shí)刻只選通一盞燈(其他5位是熄滅的),同時(shí),段選線上輸出相應(yīng)要顯示的字符的段碼。下一時(shí)刻,位選信號(hào)選通下一位LED,同時(shí),段選線上輸出相應(yīng)要顯示的字符的段碼。000001?此時(shí)同時(shí)向6位LED燈管輸出相同的字符,如何能實(shí)現(xiàn)顯示多個(gè)不121段碼39H字符C11111位選信號(hào)3EH字符U7FH字符83FH字符040H字符-73H字符P位選信號(hào)輪流選中每位LED燈,同時(shí)段碼輸出對(duì)應(yīng)顯示器要顯示的字符。只要實(shí)現(xiàn)間隔足夠短,由于LED顯示器的余輝和人眼視覺(jué)殘留作用,造成多位同時(shí)點(diǎn)亮的假象。SegmentCodeDigitSelectSignal1段碼39H字符C11111位選信號(hào)3EH字符U7FH字符8131段碼00H無(wú)顯示39H字符C73H字符P3EH字符U11111位控信號(hào)1段碼00H無(wú)顯示39H字符C73H字符P3EH字符U11114圖10-5為8位LED動(dòng)態(tài)顯示2003.10.10的過(guò)程。圖10-5為8位LED動(dòng)態(tài)顯示2003.10.10的過(guò)程。15MOVDPTR,#TAB;表首地址MOVCA,@A+DPTR;查表段碼MOVDPTR,#A口地址MOVX@DPTR,A;輸出段碼MOVA,R4;取位碼MOVXDPTR,#C口地址MOVX@DPTR,A;輸出位碼……RLA;左移位碼MOVR4,A;保存新位碼……TAB:DB00H,00H,00H,00H,00HDB39H,73H,3EH,40HDB7FH,3FH,6DH,06H

DB00H,00H,00H,00H,00HMOVDPTR,#TAB;表首地址TAB:1610.2鍵盤(pán)接口原理1.鍵盤(pán)輸入的特點(diǎn)鍵盤(pán):一組按鍵開(kāi)關(guān)的集合。行線電壓信號(hào)通過(guò)鍵盤(pán)開(kāi)關(guān)機(jī)械觸點(diǎn)的斷開(kāi)、閉合,輸出波形如圖10-6。10.2鍵盤(pán)接口原理1.鍵盤(pán)輸入的特點(diǎn)鍵盤(pán):一組按鍵開(kāi)172.按鍵的確認(rèn)檢測(cè)行線電平高電平:斷開(kāi);低電平:閉合,常用軟件來(lái)消除按鍵抖動(dòng)。基本思想:檢測(cè)到有鍵按下,鍵對(duì)應(yīng)的行線為低,軟件延時(shí)10ms后,行線如仍為低,則確認(rèn)該行有鍵按下。3.如何消除按鍵的抖動(dòng)

當(dāng)鍵松開(kāi)時(shí),行線變高,軟件延時(shí)10ms后,行線仍為高,說(shuō)明按鍵已松開(kāi)。采取以上措施,躲開(kāi)了兩個(gè)抖動(dòng)期t1和t3的影響。2.按鍵的確認(rèn)檢測(cè)行線電平常用軟件來(lái)消除按鍵抖動(dòng)。基1810.2.2鍵盤(pán)接口的工作原理獨(dú)立式按鍵接口和行列式鍵盤(pán)接口。1.獨(dú)立式鍵盤(pán)接口各鍵相互獨(dú)立,每個(gè)按鍵各接一根輸入線,通過(guò)檢測(cè)輸入線的電平狀態(tài)可很容易判斷那個(gè)鍵被按下。此種接口適于鍵數(shù)較少或操作速度較高的場(chǎng)合。圖10-7(a)為中斷方式的獨(dú)立式鍵盤(pán)工作電路圖10-7(b)為查詢(xún)方式的獨(dú)立式鍵盤(pán)工作電路。10.2.2鍵盤(pán)接口的工作原理獨(dú)立式按鍵接口和行列式鍵盤(pán)19MCS與鍵盤(pán)、顯示器、課件20圖10-8為8255A擴(kuò)展I/O口的獨(dú)立式按鍵接口電路。圖10-8為8255A擴(kuò)展I/O口的獨(dú)立式按鍵接口電路。21圖10-9用三態(tài)緩沖器擴(kuò)展的I/O口的按鍵接口電路。圖10-9用三態(tài)緩沖器擴(kuò)展的I/O口的按鍵接口電路。22對(duì)圖10-9獨(dú)立式鍵盤(pán)編程,軟件消抖,查詢(xún)方式檢測(cè)鍵的狀態(tài)。僅有一鍵按下時(shí)才有效才處理。KEYIN:MOVDPTR,#0BFFFH;鍵盤(pán)端口地址BFFFH MOVXA,@DPTR ;讀鍵盤(pán)狀態(tài) ANLA,#1FH ;屏蔽高三位MOVR3,A ;保存鍵盤(pán)狀態(tài)值LCALLDELAY10 ;延時(shí)10ms去鍵盤(pán)抖動(dòng)MOVXA,@DPTR ;再讀鍵盤(pán)狀態(tài)ANLA,#1FH ;屏蔽高三位CJNEA,R3,RETURN;兩次不同,抖動(dòng)引起轉(zhuǎn)RETURN CJNEA,#1EH,KEY2;相等,有鍵按下,不等轉(zhuǎn)KEY2對(duì)圖10-9獨(dú)立式鍵盤(pán)編程,軟件消抖,查詢(xún)方式檢測(cè)鍵的狀23 LJMPPKEY1 ;是K1鍵按下,轉(zhuǎn)K1鍵處理 ;子程序PKEY1KEY2:CJNEA,#1DH,KEY3;S2鍵未按下,轉(zhuǎn)KEY3 LJMPPKEY2 ;S2鍵按下,轉(zhuǎn)PKEY2處理KEY3: CJNEA,#1BH,KEY4 ;S3未按下,轉(zhuǎn)KEY4 LJMPPKEY3;S3按下,轉(zhuǎn)PKEY3處理KEY4:CJNEA,#17H,KEY5;S4鍵未按下,轉(zhuǎn)KEY5

LJMPPKEY4;S4按下,轉(zhuǎn)PKEY4處理KEY5: CJNEA,#0FH,PASS;S5未按下,轉(zhuǎn)RETURN LJMPPKEY5;S5按下,轉(zhuǎn)PKEY5處理RETURN:RET;重鍵或無(wú)鍵按下,從子程序返回識(shí)別和編程簡(jiǎn)單,用在按鍵數(shù)較少的場(chǎng)合。 LJMPPKEY1 ;是K1鍵按下,轉(zhuǎn)K1鍵處理 242.行列式(矩陣式)鍵盤(pán)接口用于按鍵數(shù)目較多的場(chǎng)合,由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。如圖10-10所示。2.行列式(矩陣式)鍵盤(pán)接口用于按鍵數(shù)目較多的場(chǎng)合251111無(wú)鍵按下當(dāng)有鍵按下時(shí),行線電平由列線的電平來(lái)決定無(wú)鍵按下,該行線為高電平。00000

011110111101列輸出行輸入逐列置低電平,其余各列置為高電平檢查各行電平變化如檢查出在某行線電平為低,對(duì)應(yīng)此時(shí)列線低電平出現(xiàn)位置,交叉點(diǎn)處為按鍵按下處1111無(wú)鍵按下當(dāng)有鍵按下時(shí)26

按鍵數(shù)目較多的場(chǎng)合,行列式鍵盤(pán)與獨(dú)立式鍵盤(pán)相比,要節(jié)省很多的I/O口線。10.2.3鍵盤(pán)的工作方式單片機(jī)在忙于各項(xiàng)工作任務(wù)時(shí),如何兼顧鍵盤(pán)的輸入,取決于鍵盤(pán)的工作方式。原則:即要保證能及時(shí)響應(yīng)按鍵操作,又不要過(guò)多占用CPU的工作時(shí)間。通常,鍵盤(pán)工作方式有3種,即編程掃描、定時(shí)掃描和中斷掃描。1.編程掃描方式只有當(dāng)單片機(jī)空閑時(shí),才調(diào)用鍵盤(pán)掃描子程序,掃描鍵盤(pán)。按鍵數(shù)目較多的場(chǎng)合,行列式鍵盤(pán)與獨(dú)立式鍵盤(pán)相比,要節(jié)27工作過(guò)程:(1)在鍵盤(pán)掃描子程序中,先判斷有無(wú)鍵按下。方法:PA口8位輸出全0,讀PC口低4位狀態(tài),若PC0~PC3為全1,則說(shuō)明鍵盤(pán)無(wú)鍵按下;若不全為1,則說(shuō)明鍵盤(pán)可能有鍵按下。工作過(guò)程:(1)在鍵盤(pán)掃描子程序中,先判斷有無(wú)鍵按下。方法:28(2)用軟件來(lái)消除按鍵抖動(dòng)的影響。如有鍵按下,則進(jìn)行下一步。(3)求按下鍵的鍵號(hào)。(4)等待按鍵釋放后,再進(jìn)行按鍵功能的處理操作。2.定時(shí)掃描工作方式利用單片機(jī)內(nèi)的定時(shí)器,產(chǎn)生10ms的定時(shí)中斷,對(duì)鍵盤(pán)進(jìn)行掃描。3.中斷工作方式只有在鍵盤(pán)有鍵按下時(shí),才執(zhí)行鍵盤(pán)掃描程序,如無(wú)鍵按下,單片機(jī)將不理睬鍵盤(pán)。(2)用軟件來(lái)消除按鍵抖動(dòng)的影響。如有鍵按下,則(3)求按下29MCS與鍵盤(pán)、顯示器、課件30鍵盤(pán)所做的工作分為三個(gè)層次,如圖10-13。第1層:?jiǎn)纹瑱C(jī)如何來(lái)監(jiān)視鍵盤(pán)的輸入。三種工作方式:①編程掃描②定時(shí)掃描③中斷掃描。第2層:確定具體按鍵的鍵號(hào)。體現(xiàn)在按鍵的識(shí)別方法上就是:①掃描法;②線反轉(zhuǎn)法。第3層:執(zhí)行鍵處理程序。鍵盤(pán)所做的工作分為三個(gè)層次,如圖10-13。第1層:3110.3鍵盤(pán)/顯示器接口設(shè)計(jì)實(shí)例10.3.1利用8155H芯片實(shí)現(xiàn)鍵盤(pán)/顯示器接口10.3鍵盤(pán)/顯示器接口設(shè)計(jì)實(shí)例10.3.1利用815328031外擴(kuò)一片8155H。RAM地址:7E00H~7EFFH。I/O口地址:7F00H~7F05H。

PA口為輸出口,控制鍵盤(pán)列線的掃描,同時(shí)又是6位共陰極顯示器的位掃描口。

PB口作為顯示器段碼輸出口,PC口作為鍵盤(pán)的行線狀態(tài)的輸入口。75452:反相驅(qū)動(dòng)器,7407:同相驅(qū)動(dòng)器。1.動(dòng)態(tài)顯示程序設(shè)計(jì)8031內(nèi)部RAM6個(gè)顯示緩沖單元:79H~7EH,存放要顯示的6位數(shù)據(jù)。8155H的PB口輸出相應(yīng)位的段碼,依次改變PA口輸出為高的位使某一位顯示某一字符,其它位為暗。動(dòng)態(tài)地顯示出由緩沖區(qū)中顯示數(shù)據(jù)所確定的字符。程序流程如圖10-15。8031外擴(kuò)一片8155H。RAM地址:7E00H~33位碼→PA口查表取段碼段碼→PB口位碼左移移完一遍?結(jié)束位碼→PA口查表取段碼段碼→PB口位碼左移移完一遍?結(jié)束34參考程序:DIR:MOVR0,#79H ;置緩沖器指針初值MOVR3,#01H ;位選碼的初值送R3MOVA,R3LD0:MOVDPTR,#7F01H;位選碼→PA口(PA.0位);最左邊LED亮MOVX@DPTR,AINCDPTR ;數(shù)據(jù)指針指向PB口MOVA,@R0;顯示數(shù)據(jù)→AADDA,#0DH;加偏移量(下條指令到表首間;所有指令占的單元數(shù))MOVCA,@A+PC;根據(jù)顯示數(shù)據(jù)來(lái)查表取段碼參考程序:DIR:MOVR0,#79H ;置緩沖器指35DIR1:

MOVX@DPTR,A ;段碼→8155HPB口ACALLDL1ms;該位顯示1msINCR0 ;指針指向下一個(gè)數(shù)據(jù)單元MOVA,R3 ;位選碼送入A中JBAcc.5,LD1;判斷是否掃描到最右邊的;LED,如到最右邊則返回RLA;位選碼向左移一位,準(zhǔn)備讓;右邊的下一位LED亮MOVR3,A ;位選碼送R3中保存AJMPLD0;LD1:RET;DSEG:DB3FH,06H,5BH,4FH,66H,6DH;共陰極段碼表 DB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDIR1:MOVX@DPTR,A ;段碼→815536DB31H,6EH,1CH,23H,40H,03HDB18H,00HDL1ms: MOVR7,#02H ;延時(shí)1ms子程序DL: MOVR6,#0FFHDL6: DJNZR6,DL6DJNZR7,DLRET2.鍵盤(pán)程序設(shè)計(jì)(1)判別鍵盤(pán)上有無(wú)鍵閉合(2)去除鍵的機(jī)械抖動(dòng)(3)判別閉合鍵的鍵號(hào)(4)使CPU對(duì)鍵的一次閉合僅作一次處理DB31H,6EH,1CH,23H,40H,03HDB37(1)判別鍵盤(pán)上有無(wú)鍵閉合PA0~7輸出全“0”,讀PC口的狀態(tài),若PC0~PC3為全“1”,則鍵盤(pán)上沒(méi)有閉合鍵,若PC0~3不全為“1”,則有鍵處于閉合狀態(tài)。(2)去除鍵的機(jī)械抖動(dòng)延遲一定時(shí)間再判別鍵盤(pán)狀態(tài),仍有閉合,則處于穩(wěn)定閉合期,否則是抖動(dòng)(3)判別閉合鍵的鍵號(hào)PA7PA6PA5PA4PA3PA2PA1PA0PC3PC2PC1PC0111111101111111111011101111110111111011111111111….….(1)判別鍵盤(pán)上有無(wú)鍵閉合PA0~7輸出全“0”,讀PC口的38閉合的鍵號(hào):N=行首鍵號(hào)+列號(hào)=8+1=9(4)使CPU對(duì)鍵的一次閉合僅作一次處理處理方法:等待閉合鍵釋放以后再作處理。閉合的鍵號(hào):(4)使CPU對(duì)鍵的一次閉合僅作一次處理處理方39鍵盤(pán)子程序如下:KEYI:ACALLKS1 ;調(diào)用判有無(wú)鍵閉合子程序JNZLK1;有鍵閉合,跳LK1NI:ACALLDIR ;無(wú)鍵閉合,調(diào)用顯示子程序,延;遲6ms后,跳KEYIAJMPKEYILK1:ACALLDIR ;可能有鍵閉合,軟件延遲12ms去抖ACALLDIRACALLKS1;調(diào)用判有無(wú)鍵閉合子程序JNZLK2 ;經(jīng)去抖,判鍵確實(shí)閉合,跳LK2ACALLDIR ;調(diào)用顯示子程序延遲6msAJMPKEYI ;抖動(dòng)引起,跳KEYILK2:MOVR2,#0FEH ;列選碼→R2MOVR4,#00H ;R4為列號(hào)計(jì)數(shù)器鍵盤(pán)子程序如下:KEYI:ACALLKS1 40LK4:MOVDPTR,#7F01H;列選碼→8155H的PA口MOVA,R2;MOVX@DPTR,A;INCDPTR ;數(shù)據(jù)指針增2,指向PC口INCDPTR;MOVXA,@DPTR ;讀8155HPC口JBAcc.0,LONE ;0行線為高,無(wú)鍵閉合,跳LONE,轉(zhuǎn)判1行MOVA,#00H ;0行有鍵閉合,首鍵號(hào)0→AAJMPLKP ;跳LKP,計(jì)算鍵號(hào)LONE:JBAcc.1,LTW0;1行線為高,無(wú)鍵閉合,跳LTW0,;轉(zhuǎn)判2行MOVA,#08H;1行有鍵閉合,首鍵號(hào)8→AAJMPLKP LK4:MOVDPTR,#7F01H;列選碼→8141LTW0:JBA.2,LTHR;2行線為高,無(wú)鍵閉合,跳 ;LTHR,轉(zhuǎn)判3行

MOVA,#10H;2行有鍵閉合,首鍵號(hào)10H→AAJMPLKP ;跳LKP,計(jì)算鍵號(hào)LTHR:JBAcc.3,NEXT;3行線為高,無(wú)鍵;閉合,跳NEXT,準(zhǔn)備下一列掃描MOVA,#18H ;3行有鍵閉合,首鍵號(hào)18H→ALKP:ADDA,R4;計(jì)算鍵號(hào):首鍵號(hào)+列號(hào)=鍵號(hào)PUSHA ;鍵號(hào)進(jìn)棧保護(hù)LK3:ACALLDIR ;調(diào)用顯示子程序,延時(shí)6msACALLKS1 ;調(diào)用判有無(wú)鍵閉合子程序,延時(shí) ;6ms JNZLK3 ;判鍵釋放否,未釋放,則循環(huán)

POPA ;鍵已釋放,鍵號(hào)出棧→ARETLTW0:JBA.2,LTHR;2行線為高,42NEXT:INCR4;列計(jì)數(shù)器加1,為下一列掃描作準(zhǔn)備MOVA,R2;判是否已掃到最后一列(最右一列)JNBAcc.7,KND;鍵掃描已掃到最后一列,跳KND, ;重新進(jìn)行整個(gè)鍵盤(pán)掃描RLA ;鍵掃描未掃到最后一列,,位選碼左移 ;一位MOVR2,A;位選碼→R2AJMPLK4;KND:AJMPKEYI;KS1:MOVDPTR,#7F01H;判有無(wú)鍵閉合子程序,全“0”→ ;掃描口(PA口)MOVA,#00H ;即列線全為低電平MOVX@DPTR,A;INCDPTR ;DPTR增2,指向PC口NEXT:INCR4;列計(jì)數(shù)器加1,為下一列掃描43INCDPTR ;指針增1,指向PC口MOVXA,@DPTR;從PC口讀行線的狀態(tài)CPLA ;行線取反,如無(wú)鍵按下,則A為0;ANLA,#0FH;屏蔽無(wú)用的高4位RET10.3.2利用8031的串行口實(shí)現(xiàn)鍵盤(pán)/顯示器接口串口未作它用,可用來(lái)外擴(kuò)鍵盤(pán)/顯示器。串口為方式0輸出,串口外接移位寄存器74LS164。接口電路如圖10-17。74LS164(0)~74LS164(7):作為8位LED的段碼輸出,8031的P3.4、P3.5:兩行鍵的行狀態(tài)輸入P3.3(TXD):同步移位脈沖輸出控制線,INCDPTR ;指針增1,指向PC口MOVX44MCS與鍵盤(pán)、顯示器、課件45優(yōu)點(diǎn):亮度大,容易做到顯示不閃爍,且CPU不必頻繁的為顯示服務(wù),從而使單片機(jī)有更多的時(shí)間處理其它事務(wù)。顯示子程序:DIR:SETBP3.3 ;P3.3=1允許TXD腳同步移位 ;脈沖輸出MOVR7,#08H;送出的段碼個(gè)數(shù),R7為段 ;碼個(gè)數(shù)計(jì)數(shù)器MOVR0,#7FH;7FH~78H為顯示數(shù)據(jù)緩沖區(qū)DL0: MOVA,@R0 ;取出要顯示的數(shù)送AADDA,#0DH;加上偏移量MOVCA,@A+PC;查段碼表SEGTAG,取出段碼MOVSBUF,A;將段碼送SBUF

優(yōu)點(diǎn):亮度大,容易做到顯示不閃爍,且CPU不必顯示46DL1:JNBTI,DL1 ;輸出段碼,查詢(xún)TI狀態(tài),1個(gè)字節(jié) ;的段碼輸出完否?CLRTI ;1個(gè)字節(jié)的段碼輸出完,清TI標(biāo)志DECR0 ;指向下一個(gè)顯示數(shù)據(jù)單元 DJNZR7,DL0 ;段碼個(gè)數(shù)計(jì)數(shù)器R7是否為0,如不 ;為0,繼續(xù)送段碼CLRP3.3 ;8個(gè)段碼輸出完畢,關(guān)顯示器輸出RET ;返回SEGTAB:DB0C0H,0F9H,0A4H,0B0H,99H ;共陽(yáng)極段碼表,;0,1,2,3,4DB92H,82H,0F8H,90H ;5,6,7,8,9DB88H,83H,0C6H,0A1H,86H ;A,B,C,D,EDB8FH,0BFH,8CH,0FFH,0FFH ;F,-,P,暗DL1:JNBTI,DL1 ;輸出段碼,查詢(xún)TI47鍵盤(pán)掃描子程序:KEYI:MOVA,#00H ;判有無(wú)鍵按下,使所有列線為0 ;的編碼送AMOVSBUF,A ;掃描鍵盤(pán)的(8)號(hào)74LS164輸 ;出為00H,使所有列線為0KL0:JNBTI,KL0 ;串行輸出完否?CLRTI ;串行輸出完畢,清TIKL1:JNBP3.4,PK1 ;第1行有閉合鍵嗎?如有,跳 ;PK1進(jìn)行處理JBP3.5,KL1 ;在第2行鍵中有閉合鍵嗎?無(wú)閉 ;合鍵跳KL1PK1:ACALLDL10 ;調(diào)用延時(shí)10ms子程序DL10,軟 ;件消除抖動(dòng)JNBP3.4,PK2 ;判是否抖動(dòng)引起的?鍵盤(pán)掃描子程序:KEYI:MOVA,#00H ;判有無(wú)鍵48JBP3.5,KL1PK2: MOVR7,#08H ;不是抖動(dòng)引起的MOVR6,#0FEH ;判別是哪一個(gè)鍵按下,F(xiàn)EH為最 ;左一列為低MOVA,R6 ;KL5:MOVSBUF,A ;列掃描碼從串行口輸出KL2:JNBTI,KL2 ;等待串行口發(fā)送完CLRTI ;串行口發(fā)送完畢,清TI標(biāo)志JNBP3.4,PKONE ;讀第1行線狀態(tài),第1行有鍵閉;合,跳PKONE處理JBP3.5,NEXT;讀第2行狀態(tài),是第2行某鍵否?MOVR3,#00H;掃描的列序號(hào)初始值為0MOVR4,#08H ;第2行鍵中有鍵被按下,行首鍵 ;號(hào)08H送R4AJMPPK3;JBP3.5,KL1PK2: MOVR7,#08H49PKONE:MOVR4,#00H;第1行有鍵按下,行首鍵號(hào)00H送R4PK3: MOVSBUF,#00H;等待鍵釋放,發(fā)送00H使所有列 ;線為低KL3:JNBTI,KL3;CLRTI ;發(fā)送完畢,清標(biāo)志KL4:JNBP3.4,KL4;判行線狀態(tài)JNBP3.5,KL4;MOVA,R4 ;兩行線均為高,說(shuō)明鍵已釋放ADDA,R3 ;計(jì)算得到鍵碼→ARETPKONE:MOVR4,#00H;第1行有鍵按下,50NEXT:MOVA,R6 ;列掃描碼左移一位,判下列鍵RLA;MOVR6,A ;記住列掃描碼于R6中DJNZR7,KL5 ;列計(jì)數(shù)器R7減1,8列鍵都檢查;完?……AJMPKEYI ;8列鍵掃描完畢,開(kāi)始下一個(gè)鍵 ;盤(pán)掃描周期NEXT:MOVA,R6 ;列掃描碼左移一位51作業(yè):現(xiàn)有8031單片機(jī),74LS373鎖存器,1片2764EPROM和兩片6116RAM,請(qǐng)使用它們組成1個(gè)單片機(jī)應(yīng)用系統(tǒng)。作業(yè):現(xiàn)有8031單片機(jī),74LS373鎖存器,1片276452第10章MCS-51與鍵盤(pán)、顯示器、撥盤(pán)、打印機(jī)的接口設(shè)計(jì)

信息技術(shù)教研室溫川雪第10章MCS-51與鍵盤(pán)、顯示器、撥盤(pán)、打印機(jī)的接53輸入外設(shè):鍵盤(pán)、BCD碼撥盤(pán)等;輸出外設(shè):LED顯示器、LCD顯示器、打印機(jī)等。10.1LED顯示器接口原理LED(LightEmittingDiode):發(fā)光二極管的縮寫(xiě)。顯示器前面冠以“LED”。10.1.1LED顯示器的結(jié)構(gòu)常用的LED顯示器為8段(或7段,8段比7段多了一個(gè)小數(shù)點(diǎn)“dp”段)。輸入外設(shè):鍵盤(pán)、BCD碼撥盤(pán)等;輸出外設(shè):LED顯示器、LC54MCS與鍵盤(pán)、顯示器、課件55為使LED顯示不同的符號(hào)或數(shù)字,要為L(zhǎng)ED提供段碼(或稱(chēng)字型碼)。提供給LED顯示器的段碼(字型碼)正好是一個(gè)字節(jié)(8段)。各段與字節(jié)中各位對(duì)應(yīng)關(guān)系如下:按上述格式,8段LED的段碼如表10-1所示。為使LED顯示不同的符號(hào)或數(shù)字,要為L(zhǎng)ED提供段碼提供給LE56顯示字符共陰極段碼共陽(yáng)極段碼顯示字符共陰極段碼共陽(yáng)極段碼03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“滅”00HFFHb7CH83H………表10-1LED段碼(8段)顯示字符共陰極段碼共陽(yáng)極段碼顯示字符共陰極段碼共陽(yáng)極段碼0357表10-1只列出了部分段碼,可根據(jù)實(shí)際情況選用。另外,段碼是相對(duì)的,它由各字段在字節(jié)中所處的位決定。例如表10-1中8段LED段碼是按格式:而形成的,“0”的段碼為3FH(共陰)。反之,如將格式改為下列格式:則“0”的段碼為7EH(共陰)。字型及段碼由設(shè)計(jì)者自行設(shè)定,習(xí)慣上還是以“a”段對(duì)應(yīng)段碼的最低位。表10-1只列出了部分段碼,可根據(jù)實(shí)際情況選用。另外,段碼是58N個(gè)LED顯示塊有N位位選線和8×N根段碼線。10.1.2LED顯示器工作原理圖10-2是4位LED顯示器的結(jié)構(gòu)原理圖。N個(gè)LED顯示塊有N位位選線和8×N根段碼線。10.1.259段碼線控制顯示的字型,位選線控制該顯示位的亮或暗。靜態(tài)顯示和動(dòng)態(tài)顯示兩種顯示方式。1.靜態(tài)顯示方式段碼線控制顯示的字型,位選線控制該顯示位的亮或暗。靜態(tài)顯示和60各位的公共端連接在一起(接地或+5V)。每位的段碼線(a~dp)分別與一個(gè)8位的鎖存器輸出相連。顯示字符一確定,相應(yīng)鎖存器的段碼輸出將維持不變,直到送入另一個(gè)段碼為止。顯示的亮度高。2.動(dòng)態(tài)顯示方式所有位的段碼線相應(yīng)段并在一起,由一個(gè)8位I/O口控制,形成段碼線的多路復(fù)用,各位的公共端分別由相應(yīng)的I/O線控制.各位的公共端連接在一起(接地或+5V)。每位的段碼線(61圖10-4:4位8段LED動(dòng)態(tài)顯示電路。其中段碼線占用一個(gè)8位I/O口,而位選線占用一個(gè)4位I/O口。圖10-4:4位8段LED動(dòng)態(tài)顯示電路。其中段碼線占用一個(gè)862動(dòng)態(tài)顯示接口動(dòng)態(tài)顯示接口63此時(shí)同時(shí)向6位LED燈管輸出相同的字符,如何能實(shí)現(xiàn)顯示多個(gè)不同字符?掃描顯示方式(ScanDisplayMode):

某一時(shí)刻只選通一盞燈(其他5位是熄滅的),同時(shí),段選線上輸出相應(yīng)要顯示的字符的段碼。下一時(shí)刻,位選信號(hào)選通下一位LED,同時(shí),段選線上輸出相應(yīng)要顯示的字符的段碼。000001?此時(shí)同時(shí)向6位LED燈管輸出相同的字符,如何能實(shí)現(xiàn)顯示多個(gè)不641段碼39H字符C11111位選信號(hào)3EH字符U7FH字符83FH字符040H字符-73H字符P位選信號(hào)輪流選中每位LED燈,同時(shí)段碼輸出對(duì)應(yīng)顯示器要顯示的字符。只要實(shí)現(xiàn)間隔足夠短,由于LED顯示器的余輝和人眼視覺(jué)殘留作用,造成多位同時(shí)點(diǎn)亮的假象。SegmentCodeDigitSelectSignal1段碼39H字符C11111位選信號(hào)3EH字符U7FH字符8651段碼00H無(wú)顯示39H字符C73H字符P3EH字符U11111位控信號(hào)1段碼00H無(wú)顯示39H字符C73H字符P3EH字符U11166圖10-5為8位LED動(dòng)態(tài)顯示2003.10.10的過(guò)程。圖10-5為8位LED動(dòng)態(tài)顯示2003.10.10的過(guò)程。67MOVDPTR,#TAB;表首地址MOVCA,@A+DPTR;查表段碼MOVDPTR,#A口地址MOVX@DPTR,A;輸出段碼MOVA,R4;取位碼MOVXDPTR,#C口地址MOVX@DPTR,A;輸出位碼……RLA;左移位碼MOVR4,A;保存新位碼……TAB:DB00H,00H,00H,00H,00HDB39H,73H,3EH,40HDB7FH,3FH,6DH,06H

DB00H,00H,00H,00H,00HMOVDPTR,#TAB;表首地址TAB:6810.2鍵盤(pán)接口原理1.鍵盤(pán)輸入的特點(diǎn)鍵盤(pán):一組按鍵開(kāi)關(guān)的集合。行線電壓信號(hào)通過(guò)鍵盤(pán)開(kāi)關(guān)機(jī)械觸點(diǎn)的斷開(kāi)、閉合,輸出波形如圖10-6。10.2鍵盤(pán)接口原理1.鍵盤(pán)輸入的特點(diǎn)鍵盤(pán):一組按鍵開(kāi)692.按鍵的確認(rèn)檢測(cè)行線電平高電平:斷開(kāi);低電平:閉合,常用軟件來(lái)消除按鍵抖動(dòng)。基本思想:檢測(cè)到有鍵按下,鍵對(duì)應(yīng)的行線為低,軟件延時(shí)10ms后,行線如仍為低,則確認(rèn)該行有鍵按下。3.如何消除按鍵的抖動(dòng)

當(dāng)鍵松開(kāi)時(shí),行線變高,軟件延時(shí)10ms后,行線仍為高,說(shuō)明按鍵已松開(kāi)。采取以上措施,躲開(kāi)了兩個(gè)抖動(dòng)期t1和t3的影響。2.按鍵的確認(rèn)檢測(cè)行線電平常用軟件來(lái)消除按鍵抖動(dòng)。基7010.2.2鍵盤(pán)接口的工作原理獨(dú)立式按鍵接口和行列式鍵盤(pán)接口。1.獨(dú)立式鍵盤(pán)接口各鍵相互獨(dú)立,每個(gè)按鍵各接一根輸入線,通過(guò)檢測(cè)輸入線的電平狀態(tài)可很容易判斷那個(gè)鍵被按下。此種接口適于鍵數(shù)較少或操作速度較高的場(chǎng)合。圖10-7(a)為中斷方式的獨(dú)立式鍵盤(pán)工作電路圖10-7(b)為查詢(xún)方式的獨(dú)立式鍵盤(pán)工作電路。10.2.2鍵盤(pán)接口的工作原理獨(dú)立式按鍵接口和行列式鍵盤(pán)71MCS與鍵盤(pán)、顯示器、課件72圖10-8為8255A擴(kuò)展I/O口的獨(dú)立式按鍵接口電路。圖10-8為8255A擴(kuò)展I/O口的獨(dú)立式按鍵接口電路。73圖10-9用三態(tài)緩沖器擴(kuò)展的I/O口的按鍵接口電路。圖10-9用三態(tài)緩沖器擴(kuò)展的I/O口的按鍵接口電路。74對(duì)圖10-9獨(dú)立式鍵盤(pán)編程,軟件消抖,查詢(xún)方式檢測(cè)鍵的狀態(tài)。僅有一鍵按下時(shí)才有效才處理。KEYIN:MOVDPTR,#0BFFFH;鍵盤(pán)端口地址BFFFH MOVXA,@DPTR ;讀鍵盤(pán)狀態(tài) ANLA,#1FH ;屏蔽高三位MOVR3,A ;保存鍵盤(pán)狀態(tài)值LCALLDELAY10 ;延時(shí)10ms去鍵盤(pán)抖動(dòng)MOVXA,@DPTR ;再讀鍵盤(pán)狀態(tài)ANLA,#1FH ;屏蔽高三位CJNEA,R3,RETURN;兩次不同,抖動(dòng)引起轉(zhuǎn)RETURN CJNEA,#1EH,KEY2;相等,有鍵按下,不等轉(zhuǎn)KEY2對(duì)圖10-9獨(dú)立式鍵盤(pán)編程,軟件消抖,查詢(xún)方式檢測(cè)鍵的狀75 LJMPPKEY1 ;是K1鍵按下,轉(zhuǎn)K1鍵處理 ;子程序PKEY1KEY2:CJNEA,#1DH,KEY3;S2鍵未按下,轉(zhuǎn)KEY3 LJMPPKEY2 ;S2鍵按下,轉(zhuǎn)PKEY2處理KEY3: CJNEA,#1BH,KEY4 ;S3未按下,轉(zhuǎn)KEY4 LJMPPKEY3;S3按下,轉(zhuǎn)PKEY3處理KEY4:CJNEA,#17H,KEY5;S4鍵未按下,轉(zhuǎn)KEY5

LJMPPKEY4;S4按下,轉(zhuǎn)PKEY4處理KEY5: CJNEA,#0FH,PASS;S5未按下,轉(zhuǎn)RETURN LJMPPKEY5;S5按下,轉(zhuǎn)PKEY5處理RETURN:RET;重鍵或無(wú)鍵按下,從子程序返回識(shí)別和編程簡(jiǎn)單,用在按鍵數(shù)較少的場(chǎng)合。 LJMPPKEY1 ;是K1鍵按下,轉(zhuǎn)K1鍵處理 762.行列式(矩陣式)鍵盤(pán)接口用于按鍵數(shù)目較多的場(chǎng)合,由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。如圖10-10所示。2.行列式(矩陣式)鍵盤(pán)接口用于按鍵數(shù)目較多的場(chǎng)合771111無(wú)鍵按下當(dāng)有鍵按下時(shí),行線電平由列線的電平來(lái)決定無(wú)鍵按下,該行線為高電平。00000

011110111101列輸出行輸入逐列置低電平,其余各列置為高電平檢查各行電平變化如檢查出在某行線電平為低,對(duì)應(yīng)此時(shí)列線低電平出現(xiàn)位置,交叉點(diǎn)處為按鍵按下處1111無(wú)鍵按下當(dāng)有鍵按下時(shí)78

按鍵數(shù)目較多的場(chǎng)合,行列式鍵盤(pán)與獨(dú)立式鍵盤(pán)相比,要節(jié)省很多的I/O口線。10.2.3鍵盤(pán)的工作方式單片機(jī)在忙于各項(xiàng)工作任務(wù)時(shí),如何兼顧鍵盤(pán)的輸入,取決于鍵盤(pán)的工作方式。原則:即要保證能及時(shí)響應(yīng)按鍵操作,又不要過(guò)多占用CPU的工作時(shí)間。通常,鍵盤(pán)工作方式有3種,即編程掃描、定時(shí)掃描和中斷掃描。1.編程掃描方式只有當(dāng)單片機(jī)空閑時(shí),才調(diào)用鍵盤(pán)掃描子程序,掃描鍵盤(pán)。按鍵數(shù)目較多的場(chǎng)合,行列式鍵盤(pán)與獨(dú)立式鍵盤(pán)相比,要節(jié)79工作過(guò)程:(1)在鍵盤(pán)掃描子程序中,先判斷有無(wú)鍵按下。方法:PA口8位輸出全0,讀PC口低4位狀態(tài),若PC0~PC3為全1,則說(shuō)明鍵盤(pán)無(wú)鍵按下;若不全為1,則說(shuō)明鍵盤(pán)可能有鍵按下。工作過(guò)程:(1)在鍵盤(pán)掃描子程序中,先判斷有無(wú)鍵按下。方法:80(2)用軟件來(lái)消除按鍵抖動(dòng)的影響。如有鍵按下,則進(jìn)行下一步。(3)求按下鍵的鍵號(hào)。(4)等待按鍵釋放后,再進(jìn)行按鍵功能的處理操作。2.定時(shí)掃描工作方式利用單片機(jī)內(nèi)的定時(shí)器,產(chǎn)生10ms的定時(shí)中斷,對(duì)鍵盤(pán)進(jìn)行掃描。3.中斷工作方式只有在鍵盤(pán)有鍵按下時(shí),才執(zhí)行鍵盤(pán)掃描程序,如無(wú)鍵按下,單片機(jī)將不理睬鍵盤(pán)。(2)用軟件來(lái)消除按鍵抖動(dòng)的影響。如有鍵按下,則(3)求按下81MCS與鍵盤(pán)、顯示器、課件82鍵盤(pán)所做的工作分為三個(gè)層次,如圖10-13。第1層:?jiǎn)纹瑱C(jī)如何來(lái)監(jiān)視鍵盤(pán)的輸入。三種工作方式:①編程掃描②定時(shí)掃描③中斷掃描。第2層:確定具體按鍵的鍵號(hào)。體現(xiàn)在按鍵的識(shí)別方法上就是:①掃描法;②線反轉(zhuǎn)法。第3層:執(zhí)行鍵處理程序。鍵盤(pán)所做的工作分為三個(gè)層次,如圖10-13。第1層:8310.3鍵盤(pán)/顯示器接口設(shè)計(jì)實(shí)例10.3.1利用8155H芯片實(shí)現(xiàn)鍵盤(pán)/顯示器接口10.3鍵盤(pán)/顯示器接口設(shè)計(jì)實(shí)例10.3.1利用815848031外擴(kuò)一片8155H。RAM地址:7E00H~7EFFH。I/O口地址:7F00H~7F05H。

PA口為輸出口,控制鍵盤(pán)列線的掃描,同時(shí)又是6位共陰極顯示器的位掃描口。

PB口作為顯示器段碼輸出口,PC口作為鍵盤(pán)的行線狀態(tài)的輸入口。75452:反相驅(qū)動(dòng)器,7407:同相驅(qū)動(dòng)器。1.動(dòng)態(tài)顯示程序設(shè)計(jì)8031內(nèi)部RAM6個(gè)顯示緩沖單元:79H~7EH,存放要顯示的6位數(shù)據(jù)。8155H的PB口輸出相應(yīng)位的段碼,依次改變PA口輸出為高的位使某一位顯示某一字符,其它位為暗。動(dòng)態(tài)地顯示出由緩沖區(qū)中顯示數(shù)據(jù)所確定的字符。程序流程如圖10-15。8031外擴(kuò)一片8155H。RAM地址:7E00H~85位碼→PA口查表取段碼段碼→PB口位碼左移移完一遍?結(jié)束位碼→PA口查表取段碼段碼→PB口位碼左移移完一遍?結(jié)束86參考程序:DIR:MOVR0,#79H ;置緩沖器指針初值MOVR3,#01H ;位選碼的初值送R3MOVA,R3LD0:MOVDPTR,#7F01H;位選碼→PA口(PA.0位);最左邊LED亮MOVX@DPTR,AINCDPTR ;數(shù)據(jù)指針指向PB口MOVA,@R0;顯示數(shù)據(jù)→AADDA,#0DH;加偏移量(下條指令到表首間;所有指令占的單元數(shù))MOVCA,@A+PC;根據(jù)顯示數(shù)據(jù)來(lái)查表取段碼參考程序:DIR:MOVR0,#79H ;置緩沖器指87DIR1:

MOVX@DPTR,A ;段碼→8155HPB口ACALLDL1ms;該位顯示1msINCR0 ;指針指向下一個(gè)數(shù)據(jù)單元MOVA,R3 ;位選碼送入A中JBAcc.5,LD1;判斷是否掃描到最右邊的;LED,如到最右邊則返回RLA;位選碼向左移一位,準(zhǔn)備讓;右邊的下一位LED亮MOVR3,A ;位選碼送R3中保存AJMPLD0;LD1:RET;DSEG:DB3FH,06H,5BH,4FH,66H,6DH;共陰極段碼表 DB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDIR1:MOVX@DPTR,A ;段碼→815588DB31H,6EH,1CH,23H,40H,03HDB18H,00HDL1ms: MOVR7,#02H ;延時(shí)1ms子程序DL: MOVR6,#0FFHDL6: DJNZR6,DL6DJNZR7,DLRET2.鍵盤(pán)程序設(shè)計(jì)(1)判別鍵盤(pán)上有無(wú)鍵閉合(2)去除鍵的機(jī)械抖動(dòng)(3)判別閉合鍵的鍵號(hào)(4)使CPU對(duì)鍵的一次閉合僅作一次處理DB31H,6EH,1CH,23H,40H,03HDB89(1)判別鍵盤(pán)上有無(wú)鍵閉合PA0~7輸出全“0”,讀PC口的狀態(tài),若PC0~PC3為全“1”,則鍵盤(pán)上沒(méi)有閉合鍵,若PC0~3不全為“1”,則有鍵處于閉合狀態(tài)。(2)去除鍵的機(jī)械抖動(dòng)延遲一定時(shí)間再判別鍵盤(pán)狀態(tài),仍有閉合,則處于穩(wěn)定閉合期,否則是抖動(dòng)(3)判別閉合鍵的鍵號(hào)PA7PA6PA5PA4PA3PA2PA1PA0PC3PC2PC1PC0111111101111111111011101111110111111011111111111….….(1)判別鍵盤(pán)上有無(wú)鍵閉合PA0~7輸出全“0”,讀PC口的90閉合的鍵號(hào):N=行首鍵號(hào)+列號(hào)=8+1=9(4)使CPU對(duì)鍵的一次閉合僅作一次處理處理方法:等待閉合鍵釋放以后再作處理。閉合的鍵號(hào):(4)使CPU對(duì)鍵的一次閉合僅作一次處理處理方91鍵盤(pán)子程序如下:KEYI:ACALLKS1 ;調(diào)用判有無(wú)鍵閉合子程序JNZLK1;有鍵閉合,跳LK1NI:ACALLDIR ;無(wú)鍵閉合,調(diào)用顯示子程序,延;遲6ms后,跳KEYIAJMPKEYILK1:ACALLDIR ;可能有鍵閉合,軟件延遲12ms去抖ACALLDIRACALLKS1;調(diào)用判有無(wú)鍵閉合子程序JNZLK2 ;經(jīng)去抖,判鍵確實(shí)閉合,跳LK2ACALLDIR ;調(diào)用顯示子程序延遲6msAJMPKEYI ;抖動(dòng)引起,跳KEYILK2:MOVR2,#0FEH ;列選碼→R2MOVR4,#00H ;R4為列號(hào)計(jì)數(shù)器鍵盤(pán)子程序如下:KEYI:ACALLKS1 92LK4:MOVDPTR,#7F01H;列選碼→8155H的PA口MOVA,R2;MOVX@DPTR,A;INCDPTR ;數(shù)據(jù)指針增2,指向PC口INCDPTR;MOVXA,@DPTR ;讀8155HPC口JBAcc.0,LONE ;0行線為高,無(wú)鍵閉合,跳LONE,轉(zhuǎn)判1行MOVA,#00H ;0行有鍵閉合,首鍵號(hào)0→AAJMPLKP ;跳LKP,計(jì)算鍵號(hào)LONE:JBAcc.1,LTW0;1行線為高,無(wú)鍵閉合,跳LTW0,;轉(zhuǎn)判2行MOVA,#08H;1行有鍵閉合,首鍵號(hào)8→AAJMPLKP LK4:MOVDPTR,#7F01H;列選碼→8193LTW0:JBA.2,LTHR;2行線為高,無(wú)鍵閉合,跳 ;LTHR,轉(zhuǎn)判3行

MOVA,#10H;2行有鍵閉合,首鍵號(hào)10H→AAJMPLKP ;跳LKP,計(jì)算鍵號(hào)LTHR:JBAcc.3,NEXT;3行線為高,無(wú)鍵;閉合,跳NEXT,準(zhǔn)備下一列掃描MOVA,#18H ;3行有鍵閉合,首鍵號(hào)18H→ALKP:ADDA,R4;計(jì)算鍵號(hào):首鍵號(hào)+列號(hào)=鍵號(hào)PUSHA ;鍵號(hào)進(jìn)棧保護(hù)LK3:ACALLDIR ;調(diào)用顯示子程序,延時(shí)6msACALLKS1 ;調(diào)用判有無(wú)鍵閉合子程序,延時(shí) ;6ms JNZLK3 ;判鍵釋放否,未釋放,則循環(huán)

POPA ;鍵已釋放,鍵號(hào)出棧→ARETLTW0:JBA.2,LTHR;2行線為高,94NEXT:INCR4;列計(jì)數(shù)器加1,為下一列掃描作準(zhǔn)備MOVA,R2;判是否已掃到最后一列(最右一列)JNBAcc.7,KND;鍵掃描已掃到最后一列,跳KND, ;重新進(jìn)行整個(gè)鍵盤(pán)掃描RLA ;鍵掃描未掃到最后一列,,位選碼左移 ;一位MOVR2,A;位選碼→R2AJMPLK4;KND:AJMPKEYI;KS1:MOVDPTR,#7F01H;判有無(wú)鍵閉合子程序,全“0”→ ;掃描口(PA口)MOVA,#00H ;即列線全為低電平MOVX@DPTR,A;INCDPTR ;DPTR增2,指向PC口NEXT:INCR4;列計(jì)數(shù)器加1,為下一列掃描95INCDPTR ;指針增1,指向PC口MOVXA,@DPTR;從PC口讀行線的狀態(tài)CPLA ;行線取反,如無(wú)鍵按下,則A為0;ANLA,#0FH;屏蔽無(wú)用的高4位RET10.3.2利用8031的串行口實(shí)現(xiàn)鍵盤(pán)/顯示器接口串口未作它用,可用來(lái)外擴(kuò)鍵盤(pán)/顯示器。串口為方式0輸出,串口外接移位寄存器74LS164。接口電路如

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論