第7章續(xù) MCS-51與鍵盤的接口_第1頁
第7章續(xù) MCS-51與鍵盤的接口_第2頁
第7章續(xù) MCS-51與鍵盤的接口_第3頁
第7章續(xù) MCS-51與鍵盤的接口_第4頁
第7章續(xù) MCS-51與鍵盤的接口_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

7.4MCS-51與鍵盤的接口7.4.1MCS-51單片機(jī)與鍵盤接口7.4.2MCS-51單片機(jī)與LED顯示器接口7.4.3MCS-51單片機(jī)與行程開關(guān)、晶閘管、繼電器的接口單片機(jī)7.4.1MCS-51單片機(jī)與鍵盤接口7.4.1鍵盤的工作原理鍵盤實際上是一組按鍵開關(guān)的集合,平時按鍵開關(guān)總是處于斷開狀態(tài),當(dāng)按下鍵時它才閉合。它的結(jié)構(gòu)和產(chǎn)生的波形如圖所示。P1.1VCCGND(a)KP1.1(b)抖動時間<10ms開關(guān)動作時間>100ms“斷開”“閉合”<10ms“斷開”/S為=0,R=l,可得出A=l,A=0。當(dāng)按壓按鍵時,/S=l,/R=0,可得出A=0,A=1,改變了輸出信號A的狀態(tài)。若由于機(jī)械開關(guān)的接觸抖動,則/R的狀態(tài)會在0和1之間變化多次,若/R=l,由于A=0,因此G2門仍然是“有低出高”,不會影響輸出的狀態(tài)。同理,當(dāng)松開按鍵時,/S端出現(xiàn)的接觸抖動亦不會影響輸出的狀態(tài)。因此,圖1所示的電路,開關(guān)每按壓一次,A點的輸出信號僅發(fā)生一次變化。鍵盤的處理主要涉及三個方面:1.按鍵的識別通過檢測輸出線電平的高低判斷鍵位有無按下:鍵位未按下,輸出為高鍵位按下,輸出為低

2.抖動的消除消除按鍵盤抖動通常有兩種方法:硬件消抖和軟件消抖。硬件消抖是通過在按鍵輸出電路上加一定的硬件線路來消除抖動,一般采用R-S觸發(fā)器或單穩(wěn)態(tài)電路。軟件消抖是利用延時來跳過抖動過程。&I/O接口&+5v+5v消除抖動電路開關(guān)單片機(jī)3.鍵位的編碼(也叫掃描碼)

當(dāng)軟件實現(xiàn)查找到一個鍵被按下后,為了要確定該鍵,一般事先用該鍵對應(yīng)的行、列的值(行值和列值)或者利用該鍵對應(yīng)的IO線先組裝一個關(guān)鍵字-----編碼。

然后通過按鍵編碼進(jìn)入該鍵對應(yīng)的按鍵處理程序;矩陣式鍵盤通常有兩種方法編碼。(1)用連接鍵盤的I/O線的二進(jìn)制組合進(jìn)行編碼。如(a)圖。(2)順序排列編碼。如(b)圖。處理方法如下:編碼值=行首編碼值X+列號Y。P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0FEDCBA9876543210(b)第0列第1列第0行第1行P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.088848281484442412824222118141211(a)+5V逐列輸出0以檢查行線行線0,1,2,3分別編碼:80,40,20,10列線0,1,2,3分別編碼:08,04,02,01行線0,1,2,3分別編碼:0,1,2,3列線0,1,2,3分別編碼:0,1,2,3第0行第0列4×行號+列號組裝掃描碼行號+列號組裝掃描碼7.4.2獨立式鍵盤與單片機(jī)的接口鍵盤的結(jié)構(gòu)形式一般有兩種:獨立式鍵盤與矩陣式鍵盤。獨立式鍵盤就是各按鍵相互獨立,每個按鍵各接一根I/O口線,每根I/O口線上的按鍵都不會影響其它的I/O口線。GNDVCCGNDVCC與(b)查詢方式工作的獨立式鍵盤的結(jié)構(gòu)形式8051(a)中斷方式工作的獨立式鍵盤的結(jié)構(gòu)形式INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7按鍵編碼可為:FEH或01H下面是針對圖7.4(b)圖查詢方式的匯編語言形式的鍵盤程序??偣灿?個鍵位,KEY0~KEY7為8個鍵的功能程序。START:MOVA,#0FFH;

MOVP1,A;置P1口為輸入狀態(tài)

MOVA,P1;鍵狀態(tài)輸入

CPLA JZSTART;沒有鍵按下,則轉(zhuǎn)開始

JBACC.0,K0;檢測0號鍵是否按下,按下轉(zhuǎn)

JBACC.1,K1;檢測1號鍵是否按下,按下轉(zhuǎn)

JBACC.2,K2;檢測2號鍵是否按下,按下轉(zhuǎn)

JBACC.3,K3;檢測3號鍵是否按下,按下轉(zhuǎn)

JBACC.4,K4;檢測4號鍵是否按下,按下轉(zhuǎn)

JBACC.5,K5;檢測5號鍵是否按下,按下轉(zhuǎn)

JBACC.6,K6;檢測6號鍵是否按下,按下轉(zhuǎn)

JBACC.7,K7;檢測7號鍵是否按下,按下轉(zhuǎn)

JMPSTART;無鍵按下返回,再順次檢測K0:AJMPKEY0K1:AJMPKEY1……K7:AJMPKEY7KEY0:…… ;0號鍵功能程序

JMPSTART;0號鍵功能程序執(zhí)行完返回KEY1:…… ;1號鍵功能程序

JMPSTART;1號鍵功能程序執(zhí)行完返回

……KEY7:…… ;7號鍵功能程序

JMPSTART;7號鍵功能程序執(zhí)行完返回7.4.3矩陣鍵盤與單片機(jī)的接口矩陣式鍵盤又叫行列式鍵盤。用I/O口線組成行、列結(jié)構(gòu),鍵位設(shè)置在行列的交點上。例如4×4的行、列結(jié)構(gòu)可組成16個鍵的鍵盤,比一個鍵位用一根I/O口線的獨立式鍵盤少了一半的I/O口線。矩陣鍵盤的連接方法有多種:1可直接連接于單片機(jī)的I/O口線;2可利用擴(kuò)展的并行I/O口(8255、8155等)連接;3也可利用可編程的鍵盤、顯示專用接口芯片

(8279等)進(jìn)行連接等等。其中,利用擴(kuò)展的并行I/O口連接方便靈活,在單片機(jī)應(yīng)用系統(tǒng)中比較常用。下圖就是通過8255A芯片擴(kuò)展的并行I/O口連接48的矩陣鍵盤。P2.7=0:A口地址為:7F00H;C口地址為:7F02H。掃描法:列線輸出,行線輸入。列線逐列輸出0,某行有按鍵,行線輸入就為0;若無按鍵,行線輸入全部為1。PA7PA6PA5PA4PA3PA2PA1PA0PC0PC1PC2PC3012345678910111213141516171819202122232425262728293031CS74LS373WRRDA1A0P2.7WRRDALEP0.0~P0.7D0~D7RESET1K20F+5V+5V82555.1K48051編碼值=行首編碼值X+列號Y=8×行號+列號鍵碼=行首鍵號+列號(鍵號必須依次是從左至右書寫)

或鍵碼=列首鍵號+行號(鍵號必須依次是從上至下書寫)一.矩陣鍵盤的工作過程對矩陣鍵盤的工作過程可分兩步:第一步是CPU首先檢測鍵盤上是否有鍵按下;第二步是再識別是哪一個鍵按下(通過掃描碼)。1.檢測鍵盤上是否有鍵按下處理方法是:將列線送入全掃描字,讀入行線的狀態(tài)來判別。其具體過程如下:PA口輸出00H,即所有列線置成低電平,然后將行線電平狀態(tài)讀入累加器A中。如果有鍵按下,總會有一根行線電平被拉至低電平,從而使行輸入狀態(tài)不全為"1"。2.識別鍵盤中哪一個鍵按下處理方法是:

將列線逐列置低電平,檢查行輸入狀態(tài),稱為逐列掃描。從PA0開始,依次輸出“0”,置對應(yīng)的列線為低電平,然后從PC口讀入行線狀態(tài),如果全為“1”,則按下的鍵不在此列;如果不全為“1”,則按下的鍵必在此列,而且是該列與“0”電平的行線相交的交點上的那個鍵。為求取編碼,用計數(shù)器記錄下當(dāng)前掃描列的列號,檢測到第幾行有鍵按下,就用該行的首鍵碼加列號得到當(dāng)前按鍵的編碼。1.查詢工作方式主程序循環(huán)中插入鍵盤檢測子程序,主程序每循環(huán)一次則鍵盤檢測子程序被執(zhí)行一次,對鍵盤進(jìn)行檢測一次,如果沒有鍵按下,則跳過鍵識別,直接執(zhí)行主程序;如果有鍵按下,則通過鍵盤掃描子程序識別按鍵,得到按鍵的編碼值,然后根據(jù)編碼值進(jìn)行相應(yīng)的處理,處理完后再回到主程序執(zhí)行。二.矩陣鍵盤的工作方式開始有鍵按下否?調(diào)用12ms延時子程序有鍵按下否?判閉合鍵,編碼入棧保護(hù)閉合鍵釋放否?編碼A返回否否否是是是

鍵盤掃描子程序鍵盤掃描子程序如下:(硬件線路如圖7.4,8255A的A口、B口、C口和控制口地址分別為7F00H、7F01H、7F02H、7F03H,設(shè)8255A已在主程序中初始化。已設(shè)定為A口方式0輸出,C口的低4位方式0輸入。)KEY1:ACALLKS1

;調(diào)用判斷有無鍵按下子程序

JNZLK1;有鍵按下時,(A)≠0轉(zhuǎn)消抖延時KEY2:ACALLTM6ms AJMPexit:

;無鍵按下返回LK1:ACALLTM12ms;調(diào)12ms延時子程序

ACALLKS1;查有無鍵按下,若有則真有鍵按下

JNZLK2 ;鍵(A)≠0逐列掃描

AJMPexit ;不是真有鍵按下,返回LK2:MOVR2,#0FEH;初始列掃描字(0列)送入R2 MOVR4,#00H;初始列(0列)號送入R4LK4:MOVDPTR,#7F00H;DPTR指向8255PA口

MOVA,R2 ;列掃描字送至8255PA口

MOVX@DPTR,A INCDPTR ;DPTR指向8255PC口

INCDPTR

MOVXA,@DPTR ;從8255PC口讀入行狀態(tài)

JBACC.0,LONE;查第0行無鍵按下,轉(zhuǎn)查第1行

MOVA,#00H ;第0行有鍵按下,行首鍵碼#00H→A AJMPLKP ;轉(zhuǎn)求鍵碼LONE:JBACC.1,LTWO;查第1行無鍵按下,轉(zhuǎn)查第2行

MOVA,#08H ;第1行有鍵按下,行首鍵碼#08H→A AJMPLKP ;轉(zhuǎn)求鍵碼LTWO:JBACC.2,LTHR ;查第2行無鍵按下,轉(zhuǎn)查第3行

MOVA,#10H ;第2行有鍵按下,行首鍵碼#10H→A AJMPLKP ;轉(zhuǎn)求鍵碼LTHR:JBACC.3,NEXT ;查第3行無鍵按下,轉(zhuǎn)該查下一列

MOVA,#18H ;第3行有鍵按下,行首鍵碼#18H→ALKP:ADDA,R4 ;求鍵碼,鍵碼=行首鍵碼+列號

PUSHACC ;鍵碼進(jìn)棧保護(hù)LK3:ACALLKS1 ;等待鍵釋放

JNZLK3 ;鍵未釋放,等待

POPACC ;鍵釋放,鍵碼→AEXIT: RET ;鍵掃描結(jié)束,出口狀態(tài)(A)=鍵碼NEXT:INCR4 ;準(zhǔn)備掃描下一列,列號加1 MOVA,R2 ;取列掃描字送累加器A JNBACC.7,KEND;判斷8列掃描否?掃描完返回

RLA ;掃描字左移一位,變?yōu)橄乱涣袙呙枳?/p>

MOVR2,A ;掃描字送入R2保存

AJMPLK4 ;轉(zhuǎn)下一列掃描KEND:AJMPKEY1

KS1:

MOVDPTR,#7F00H;DPTR指向8255的PA口

MOVA,#00H ;全掃描字→A MOVX@DPTR,A;全掃描字送往8255的PA口

INCDPTR ;DPTR指向8255的PC口

INCDPTR MOVXA,@DPTR ;讀入PC口行狀態(tài)

CPLA

;變正邏輯,以高電平表示有鍵按下

ANLA,#0FH ;屏蔽高4位,只保留低4位行線值

RET ;出口狀態(tài):(A)≠0時有鍵按下執(zhí)行KS1子程序的結(jié)果是:有閉合鍵則(A)≠0;無閉合鍵則(A)=0。CPLA;負(fù)邏輯不直觀,常采取行列線加反相器或軟件求反的方法把鍵盤改成正邏輯。TM12ms:MOVR7,#18H;延時12ms子程序TM: MOVR6,#0FFHTM6: DJNZR6,TM6 DJNZR7,TM RETTM6ms:MOVR7,#0CH;延時6ms子程序TM2: MOVR6,#0FFHTM62:DJNZR6,TM6 DJNZR7,TM RETC語言鍵盤掃描子程序:略2.定時掃描工作方式3.中斷處理方式C子程序:#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedintVoiddelay(uint);Uchar

checkkey(void);Uchar

keyscan(void);Voidmain(void{

ucharkey;While(1){key=keyscan();delay(2000);}}Voiddelay(uinti){uintj;For(j=0;j<I;j++){}}Uchar

checkkey(){UcharI;XBYTE[0x7f00]=0;i=XBYTE[7f02];i=i&0x0f;If(i==0x0f)return(0);Elsereturn(0xff);}Uchar

keysan(){

uchar

scancode;//列掃描碼變量

Uchar

codevalue;//鍵值Ucharm;//行首編碼變量Uchark;//行檢測碼Uchar

I,j;If(checkkey()==0)return(0xff);//無,返回ffElse{ delay(200);//延時

If(checkkey()==0)return(0xff);else{scancode=0xfe;m=0;//

for(i=0;i<8;i++){

k=0x01;//行檢測碼

XBYTE[0x7f00]=scancode;

for(j=0;j<4;j++){

if((XBYTE[0x7f02]&k])==0){

codevalue=m+i;注意書錯

while(checkkey()!=0);//等待按鍵釋放

return(codevalue);//返回編碼

}else

{m=m+8;//下一行首編碼

k=k<<1;}

}

scancode=~((~scancode)<<1);注意書錯

}}}7.5MCS-51單片機(jī)與LED顯示器接口7.5.1LED顯示器的結(jié)構(gòu)與原理在單片機(jī)應(yīng)用系統(tǒng)中通常使用的是8段式LED數(shù)碼管顯示器,它有共陰極和共陽極兩種,如圖所示。abcdefgdpcomabcdefgdpcomabcdefgdp10987612345gfcomabedcomcdp(a)共陰極結(jié)構(gòu)(c)管腳圖(b)共陽極結(jié)構(gòu)代碼位D7D6D5D4D3D2D1D0顯示段hgfedcbaLED(LightEmiting

Diode)其中:(a)為共陰極結(jié)構(gòu)。(b)為共陽極結(jié)構(gòu)。(c)圖為管腳圖,從a~g管腳輸入不同的8位二進(jìn)制編碼,可顯示不同的數(shù)字或字符。共陰極和共陽極的字段碼互為反碼。顯示字符共陰極字段碼共陽極字段碼顯示字符共陰極字段碼共陽極字段碼03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8HY6EH91H87FH80HL38HC7H96FH90H8.FFH00HA77H88H“滅”00FFHB7CH83H………………7.5.2LED數(shù)碼管顯示器的譯碼方式一.硬件譯碼方式譯碼方式是指由顯示字符轉(zhuǎn)換得到對應(yīng)的字段碼的方式。硬件譯碼方式是指利用專門的硬件電路來實現(xiàn)顯示字符到字段碼的轉(zhuǎn)換,這樣的硬件電路有很多,比如MOTORLA公司生產(chǎn)的MC14495芯片就是其中的一種,MC14495是共陰極一位十六進(jìn)制數(shù)——字段碼轉(zhuǎn)換芯片,能夠輸出用四位二進(jìn)制表示形式的一位十六進(jìn)制數(shù)的七位字段碼,不帶小數(shù)點。它的內(nèi)部結(jié)構(gòu)如圖。4鎖存器地址譯碼和字段碼ROM陣列ABCDLE569107VssVDD816abcdefgh+iVCR11121314151234二.軟件譯碼方式軟件譯碼方式就是通過編寫軟件譯碼程序,通過譯碼程序來得到要顯示的字符的字段碼。7.5.3LED數(shù)碼管的顯示方式顯示多位數(shù)據(jù)的兩種電路:1.靜態(tài)顯示;2.動態(tài)顯示。

對應(yīng)字位線:D0D1D2D3D4D5

abhCOM

abhCOM

abhCOMafbge

cdh段控和位控靜態(tài)顯示動態(tài)顯示一、LED靜態(tài)顯示

LED靜態(tài)顯示時,其公共端直接接地(共陰極)或接電源(共陽極),各段選線分別與I/O口線相連。要顯示字符,直接在I/O線送相應(yīng)的字段碼。abcdefgdpI/O(1)abcdefgdpI/O(2)特點:顯示亮度大,硬件和軟件都較簡單,應(yīng)用廣泛。顯示緩沖區(qū)與多位LED對應(yīng)關(guān)系:每個LED需要一個8位并行口。共陰極例:顯示80C51片內(nèi)RAM中以30H為首地址的8位字形數(shù)的程序:靜態(tài)顯示電路“0”DIR:PUSH ACC ;保護(hù)現(xiàn)場

PUSH DPH PUSH DPL MOV R2,#08H ;顯示8個數(shù)

MOV R0,#30H ;顯示緩沖區(qū)地址送入R0DL0:MOV A,@R0 ;取要顯示的數(shù)作查表偏移量

MOV DPTR,#TAB ;指向字形碼表首

MOVC A,@A+DPTR ;查表得字形碼

MOV SBUF,A ;發(fā)送顯示DL1:JNB TI,DL1 ;等待發(fā)送完一楨數(shù)據(jù)

CLR TI ;清標(biāo)志,準(zhǔn)備繼續(xù)發(fā)送

INC R0 ;更新顯示單元

DJNZ R2,DL0 ;重復(fù)顯示所有數(shù)碼管

POP DPL ;恢復(fù)現(xiàn)場

POP DPH POP ACC RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4

DB 92H,82H,0F8H,80H,90H,88H;5,6,7,8,9,A

DB 83H,0C6H,0A1H,86H,8EH;B,C,D,E,F(xiàn)程序:二、LED動態(tài)顯示方式

LED動態(tài)顯示是將所有的數(shù)碼管的段選線并接在一起,用一個I/O口控制,公共端不是直接接地(共陰極)或電源(共陽極),而是通過相應(yīng)的I/O口線控制。D3D2D1D0I/O(1)I/O(2)

分時輪流選通數(shù)碼管的公共端,使得各數(shù)碼管輪流導(dǎo)通,在選通相應(yīng)LED后,即在顯示字段上得到顯示字形碼。特點:提高數(shù)碼管的發(fā)光效率,可簡化硬件線路。多位LED共用一個8位字段口(共陰極或共陽極),各位LED公共端用字位口控制,掃描輸出顯示不同字形。設(shè)數(shù)碼管為共陽極,工作過程:

第一步使右邊第一個管的公共端D0為1,其余管的公共端為0,同時在I/O(1)上送右邊第一個數(shù)碼管的字段碼,這時,只有右邊第一個數(shù)碼管顯示,其余不顯示;

第二步使右邊第二個管的公共端D1為1,其余的公共端為0,同時在I/O(1)上送右邊第二個數(shù)碼管的字段碼,這時,只有右邊第二個數(shù)碼管顯示,其余不顯示,

依此類推,直到最后一個,這樣四個數(shù)碼管輪流顯示相應(yīng)的信息,一個循環(huán)完后,下一循環(huán)又這樣輪流顯示,由于人的視覺滯留,只要循環(huán)的周期足夠快,看起來所有的數(shù)碼管都是一起顯示的了。這就是動態(tài)顯示的原理。而這個循環(huán)周期對于計算機(jī)來說很容易實現(xiàn)。所以在單片機(jī)中經(jīng)常用到動態(tài)顯示。三、LCD顯示LCD(LiquidCrystalDisplay):它是一種被動式的顯示器,即液晶本身并不發(fā)光,而是利用液晶經(jīng)過處理后能改變光線通過方向的特性,而達(dá)到白底黑字或黑底白字顯示的目的。

LCD只能工作在靜態(tài)顯示方式。并要求加上專門的驅(qū)動芯片4056。

原理與LED類似??!串行口控制的靜態(tài)LCD顯示(2位)輸出2位顯示,即1字節(jié)。程序:#include<reg51.h>#defineucharunsignedcharucharbyte=0x59;voiddisplay(ucharx){ SBUF=x; /*由串行口輸出*/

while(TI==0); /*等待8位發(fā)送結(jié)束*/ TI=0;}voidmain(void){

display(byte);}因4056是BCD的LCD驅(qū)動芯片,故byte中包含的BCD碼可直接輸出顯示。一.硬件譯碼靜態(tài)顯示下圖是一個兩位數(shù)碼管硬件譯碼靜態(tài)顯示的接口電路圖。abcdefgMC14495abcdefgabcdefgABCDLEMC14495abcdefgABCDLEP1.0P1.1P1.2P1.3P1.4P1.580517.5.4LED顯示器與單片機(jī)的接口

LED顯示器從譯碼方式上有硬件譯碼方式和軟件譯碼方式。從顯示方式上有靜態(tài)顯示方式和動態(tài)顯示方式。在使用時可以把它們組合起來。在實際應(yīng)用時,如果數(shù)碼管個數(shù)較少,通常用硬件譯碼靜態(tài)顯示,在數(shù)碼管個數(shù)較多時,則通常用軟件譯碼動態(tài)顯示。二.軟件譯碼動態(tài)顯示下圖是一個8位軟件譯碼動態(tài)顯示的接口電路圖。用8255A擴(kuò)展并行I/O口接數(shù)碼管,數(shù)碼管采用動態(tài)顯示方式,8位數(shù)碼管的段選線并聯(lián)與8255A的A口通過74LS373相連,8位數(shù)碼管的公共端通過74LS373分別與8255A的B口相連。也即8255A的B口輸出位選碼選擇要顯示的數(shù)碼管,8255A的A口輸出字段碼使數(shù)碼管顯示相應(yīng)的字符,8255A的A口和B口都工作于方式0輸出。

A口、B口、C口和控制口的地址分別為7F00H、7F01H、7F02H和7F03H。D0D1D2D7Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7CSWRRD74LS373P2.7WRRDALEP0.0~P0.78051D0~D7A1A0GA1A08255地址:A口:7F00HB口:7F01HC口:7F02H控制口:7F03H

………共陰極顯示完畢?NY8255初始化動態(tài)顯示初始化送段碼和位掃描碼讓第一個數(shù)碼管亮1ms生成下一個數(shù)碼管的位碼指針指向下一個顯示單元指針指向顯示緩沖區(qū)(8字節(jié))首單元從顯示緩沖區(qū)取數(shù)碼管要顯示的數(shù)查表求該數(shù)對應(yīng)的共陰極段碼12345678軟件譯碼動態(tài)顯示匯編語言程序為:(設(shè)8個數(shù)碼管的顯示緩沖區(qū)為片內(nèi)RAM的57H~50H單元)DISPLAY:MOVA,#10000000B ;8255初始化

MOVDPTR,#7F03H;使DPTR指向8255控制寄存器端口

MOVX@DPTR,A MOVR0,#57H;動態(tài)顯示初始化,使R0指向緩沖區(qū)首址

MOVR3,#7FH

;首位位選字送R3 MOVA,R3LD0:MOVDPTR,#7F01H ;使DPTR指向PB口

MOVX@DPTR,A ;選通顯示器高位(最右端一位) DECDPTR ;使DPTR指向PA口

MOVA,@R0 ;讀要顯示數(shù)

ADDA,#0DH ;調(diào)整距段選碼表首的偏移量

MOVCA,@A+PC ;查表取得段選碼

MOVX@DPTR,A ;段選碼從PA口輸出

ACALLDL1 ;調(diào)用1ms延時子程序

DECR0 ;指向緩沖區(qū)下一單元

MOVA,R3 ;位選碼送累加器A

JNBACC.0,LD1;判斷8位是否顯示完畢,顯示完返回

RRA ;未顯示完,把位選字變?yōu)橄乱晃贿x字

MOVR3,A;修改后的位選字送R3 AJMPLD0;循環(huán)實現(xiàn)按位序依次顯示LD1:RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

;共陰極字段碼表DB:7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOVR7,#02H ;延時子程序DL:MOVR6,#0FFHDL0:DJNZR6,DL0DJNZR7,DLRET軟件譯碼動態(tài)顯示C語言程序為:#in

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論