第七章 MCS-51與鍵盤(pán)、顯示器的接口_第1頁(yè)
第七章 MCS-51與鍵盤(pán)、顯示器的接口_第2頁(yè)
第七章 MCS-51與鍵盤(pán)、顯示器的接口_第3頁(yè)
第七章 MCS-51與鍵盤(pán)、顯示器的接口_第4頁(yè)
第七章 MCS-51與鍵盤(pán)、顯示器的接口_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第七章 C51單片機(jī)外圍接口電路 C51單片機(jī)與顯示電路的接口 C51單片機(jī)與鍵盤(pán)的接口 C51與ADC的接口 C51與DAC的接口17.1 LED顯示器接口7.1.1 LED顯示器工作原理abcdefgdpcomabcdefgdpcomabcdefgdp10 9 8 7 61 2 3 4 5 g f com a be d com c dp( a )( b )(c )(a)為共陰極結(jié)構(gòu) (b)為共陽(yáng)極結(jié)構(gòu) ( c)圖為管腳圖常用的顯示器:LED、LCDLED:發(fā)光二極管;LED顯示器:將發(fā)光二極管按照一定結(jié)構(gòu)進(jìn)行組合來(lái)顯示字段的器件,也稱為數(shù)碼管。在單片機(jī)應(yīng)用系統(tǒng)中通常采用七段、八段式數(shù)碼管;

2、八段式LED數(shù)碼管顯示器,它有共陰極、共陽(yáng)極兩種;顯示09、AF、小數(shù)點(diǎn)“.”等字符2顯示數(shù)字共陰極小數(shù)點(diǎn)暗十六進(jìn)制共陽(yáng)極小數(shù)點(diǎn)暗十六進(jìn)制Dp g f e d c b aDp g f e d c b a00 01111113FH1 1000000C0H10 000011006H1 1111001F9H20 10110115BH1 0100100A4H30 10011114FH1 0110000B0H40 110011066H1 001100199H50 11011016DH1 001001092H60 11111017DH1 000001082H70 000011107H1 1111000F8

3、H80 11111117FH1 000000080H90 11011116FH1 001000090HA0 111011177H1 000100099HB0 11111007CH1 000001183HC0 011100139H1 1000110C6HD0 10111005EH1 0100011A3HE0 111100179H1 000011086HF0 111000171H1 00011108EH滅0 000000000H1 1111111FFH小數(shù)點(diǎn)1 000000080H0 11111117FH表7.1 數(shù)字和字符的共陰極和共陽(yáng)極的字段碼32)LED數(shù)碼管顯示器的譯碼方式硬件譯碼方式譯碼

4、:指將顯示字符轉(zhuǎn)換為對(duì)應(yīng)的字段碼的過(guò)程。 譯碼方式:硬件譯碼、軟件譯碼 硬件譯碼:指用專門(mén)的硬件電路(或顯示譯碼芯片)來(lái)實(shí)現(xiàn)顯示字符到字段碼的轉(zhuǎn)換,如:MOTOTOLA公司的MC14495芯片。MC14495是共陰極的字段碼轉(zhuǎn)換芯片,能將四位二進(jìn)制表示的一位十六進(jìn)制數(shù)轉(zhuǎn)換為七位字段碼,不帶小數(shù)點(diǎn)。4鎖存器地址譯碼和字段碼ROM陣列ABCDLE569107VssVDD816abcdefgh+iVCR111213141512344軟件譯碼 軟件譯碼:是通過(guò)編寫(xiě)軟件譯碼程序,通過(guò)譯碼程序來(lái)得到要顯示的字符的字段碼。 優(yōu)點(diǎn):電路簡(jiǎn)單、顯示字符靈活外形尺寸分: “0.5”和“0.8”顯示的顏色:紅色和綠

5、色亮度強(qiáng)弱分:超亮、高亮、普亮。數(shù)碼管的正向壓降為1.5V2V,額定電流為10mA,最大電流為40 mA。分類:5a b c d e f g dpI/O(1)a b c d e f g dpI/O(2)7.1.2 LED數(shù)碼管的顯示方式LED數(shù)碼管的顯示方式:靜態(tài)顯示、動(dòng)態(tài)顯示。1. 靜態(tài)顯示靜態(tài)顯示:當(dāng)顯示某個(gè)數(shù)字或字符時(shí),相應(yīng)的字段(發(fā)光二極管)恒定地導(dǎo)通或關(guān)斷,直到顯示下一個(gè)數(shù)字或字符為止。特點(diǎn):公共段直接接地(共陰極)或電源(共陽(yáng)極),每個(gè)數(shù)碼管的字段選線直接(ag,dp)與一個(gè)8位的并口相連。 應(yīng)用:占有硬件資源多,一般用于顯示器位數(shù)較少的場(chǎng)合。6硬件譯碼靜態(tài)顯示下圖是一個(gè)兩位數(shù)碼管

6、硬件譯碼靜態(tài)顯示的接口電路圖。 a b c d e f gMC14495a b c d e f ga b c d e f gA B C DLEMC14495a b c d e f gA B C DLEP1.0P1.1P1.2P1.3P1.4P1.580517【例7-1】 譯碼器控制單體、共陰極數(shù)碼管循環(huán)顯示兩位數(shù)字020。 以P2口作為段碼控制口,段碼經(jīng)譯碼芯片7447實(shí)現(xiàn)段碼的譯碼和驅(qū)動(dòng);電路中采用共陰極數(shù)碼管,數(shù)碼管的公共端接地。8循環(huán)顯示030的程序:#include #include #define uchar unsigned charvoid main( ) uchar i,j,k

7、; while(1) for(i=0;i=30;i+) j=i/10; /十位上的數(shù)字,通過(guò)P2低4位顯示 k=(i%10)4; /個(gè)位上的數(shù)字,通過(guò)P2高4位顯示 P2=j|k; delay( ); /調(diào)用延時(shí)子程序 92LED動(dòng)態(tài)顯示方式 LED動(dòng)態(tài)顯示:是將所有數(shù)碼管的段選線并接在一起,用一個(gè)I/O口控制,公共端不直接接地(共陰極)或電源(共陽(yáng)極),而是通過(guò)相應(yīng)的I/O口線控制。 D3D2D1D0I/O(1)I/O(2)特點(diǎn):各個(gè)數(shù)碼管共用一個(gè)段碼輸出端口,分時(shí)輪流選通顯示。缺點(diǎn):數(shù)碼管的數(shù)量不能太多。一般在8個(gè)以內(nèi),以免每個(gè)數(shù)碼管分配到的實(shí)際導(dǎo)通時(shí)間太短,亮度不夠。動(dòng)態(tài)顯示電路有三種:

8、并行I/0口顯示電路、并行I/0口與譯碼器構(gòu)成的顯示電路、串行口構(gòu)成的動(dòng)態(tài)顯示電路。10 數(shù)碼管為共陽(yáng)極時(shí),工作過(guò)程為:第一步使右邊第一個(gè)數(shù)碼管的公共端D0為1,其余的數(shù)碼管的公共端為0,同時(shí)在I/O(1)上送右邊第一個(gè)數(shù)碼管的字段碼,這時(shí),只有右邊第一個(gè)數(shù)碼管顯示,其余不顯示;第二步使右邊第二個(gè)數(shù)碼管的公共端D1為1,其余的數(shù)碼管的公共端為0,同時(shí)在I/O(1)上送右邊第二個(gè)數(shù)碼管的字段碼,這時(shí),只有右邊第二個(gè)數(shù)碼管顯示,其余不顯示;依此類推,直到最后一個(gè);這樣四個(gè)數(shù)碼管輪流顯示相應(yīng)的信息,一個(gè)循環(huán)完后,下一循環(huán)又這樣輪流顯示,從計(jì)算機(jī)的角度看是一個(gè)一個(gè)的顯示,但由于人的視覺(jué)滯留,只要循環(huán)的

9、周期足夠快,看起來(lái)所有的數(shù)碼管都是一起顯示的了。而這個(gè)循環(huán)周期對(duì)于計(jì)算機(jī)來(lái)說(shuō)很容易實(shí)現(xiàn)。所以在單片機(jī)中經(jīng)常用到動(dòng)態(tài)顯示。 117.1.3 MCS-51與LED顯示器的接口電路設(shè)計(jì)實(shí)例【例7-2】 利用AT89C52單片機(jī)的并行口作為動(dòng)態(tài)顯示的段口和位口,實(shí)現(xiàn)6位數(shù)碼管的動(dòng)態(tài)顯示。Proteus仿真電路如圖7-5所示。在圖中,以P0口作為段碼控制口,段碼經(jīng)驅(qū)動(dòng)芯片74HC245實(shí)現(xiàn)段碼的驅(qū)動(dòng);P3口作為位碼控制口,經(jīng)過(guò)7407實(shí)現(xiàn)某一位的選通,并經(jīng)軟件延遲,實(shí)現(xiàn)6位數(shù)碼管的輪流顯示。12 隨機(jī)調(diào)用隨機(jī)調(diào)用:在主函數(shù)中,當(dāng)顯示緩沖區(qū)的內(nèi)容發(fā)生變化后,就需要對(duì)顯示函數(shù)進(jìn)行調(diào)用,兩次調(diào)用的時(shí)間間隔不能

10、太長(zhǎng),時(shí)間太長(zhǎng)將發(fā)生顯示的閃爍現(xiàn)象。程序如下:#include #define uchar unsigned charuchar data dis_buf6; /顯示緩沖區(qū)uchar code table18=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00; void dl_ms() /延時(shí)1ms函數(shù)unsigned int j;for(j=0;j200;j+);13void display(void)/顯示函數(shù)uchar s

11、egcode,bitcode,i;bitcode=0 xfe; /位碼賦初值for(i=0;i6;i+)segcode=dis_bufi; /顯示緩沖區(qū)內(nèi)容查表P0=tablesegcode;P3=bitcode;dl_ms();P3=0 xff; /關(guān)閉顯示bitcode=bitcode1; /調(diào)整位碼bitcode=bitcode|0 x01;void main(void)dis_buf0=6; dis_buf1=5;/顯示緩沖區(qū)賦初值dis_buf2=4; dis_buf3=3;dis_buf4=2; dis_buf5=1;while(1) display(); 14 定時(shí)調(diào)用定時(shí)調(diào)用是

12、通過(guò)定時(shí)/計(jì)數(shù)器的定時(shí)功能來(lái)定時(shí)一定的時(shí)間(如20ms),定時(shí)時(shí)間到后調(diào)用顯示函數(shù)。程序如下:#include #define uchar unsigned charuchar data dis_buf6;/顯示緩沖區(qū)uchar code table18=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00; /代碼表 void display();void dl_ms()/延時(shí)1ms函數(shù)15void main(void)/定時(shí)調(diào)用

13、TMOD=0 x01;TH0=20000/256;TL0=2000%256;EA=1;ET0=1;TR0=1;dis_buf0=0; dis_buf1=1;/顯示緩沖區(qū)賦初值dis_buf2=2; dis_buf3=3;dis_buf4=4; dis_buf5=5;while(1);void time0_int() interrupt 1TH0=20000/256;TL0=2000%256;display();16【7-3】是一個(gè)8位軟件譯碼動(dòng)態(tài)顯示的接口電路圖。圖中用8255A擴(kuò)展并行I/O口接數(shù)碼管;數(shù)碼管采用動(dòng)態(tài)顯示方式,8位數(shù)碼管的段選線并聯(lián)與8255A的A口通過(guò)74LS373相連;8

14、位數(shù)碼管的公共端通過(guò)74LS373分別與8255A的B口相連。8255A的A口輸出字段碼使數(shù)碼管顯示相應(yīng)的字符,8255A的A口和B口都工作于方式0輸出。A口、B口、C口和控制口的地址分別為7F00H、7F01H、7F02H和7F03H。 17D0D1D2D7Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7G OEVCC74LS373Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7G OEVCC74LS373PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7CSWRRD74LS373P2.7WRRDALEP0.0P0

15、.780C51D0D7A1A0GA1A0825518軟件譯碼動(dòng)態(tài)顯示匯編語(yǔ)言程序:(設(shè)8個(gè)數(shù)碼管的顯示緩沖區(qū)為片內(nèi)RAM的57H50H單元)DISPLAY:MOV A,#10000000B ;8255初始化MOV DPTR,#7F03H ;使DPTR指向8155控制寄存器端口MOVX DPTR,AMOV R0,#57H ;動(dòng)態(tài)顯示初始化,使R0指向緩沖區(qū)首址MOV R3,#7FH ;首位位選字送R3MOV A,R3LD0:MOV DPTR,#7F00H ;使DPTR指向PA口MOVX DPTR,A ;選通顯示器低位(最右端一位)INC DPTR ;使DPTR指向PB口MOV A,R0 ;讀要顯

16、示數(shù)ADD A,#0DH ;調(diào)整距段選碼表首的偏移量MOVC A,A+PC ;查表取得段選碼MOVX DPTR,A ;段選碼從PB口輸出ACALL DL1 ;調(diào)用1 ms延時(shí)子程序19DEC R0 ;指向緩沖區(qū)下一單元MOV A,R3 ;位選碼送累加器AJNB ACC.0,LD1 ;判斷8位是否顯示完畢,顯示完返回RR A ;未顯示完,把位選字變?yōu)橄乱晃贿x字MOV R3,A ;修改后的位選字送R3AJMP LD0 ;循環(huán)實(shí)現(xiàn)按位序依次顯示LD1:RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;字段碼表DB: 7FH,6FH,77H,7CH,39H,5EH,

17、79H,71HDL1:MOV R7,#02H ;延時(shí)子程序DL: MOV R6,#0FFHDL0:DJNZ R6,DL0DJNZ R7,DLRET20軟件譯碼動(dòng)態(tài)顯示C語(yǔ)言程序?yàn)椋?include #include /定義絕對(duì)地址訪問(wèn)#define uchar unsigned char#define uint unsigned intvoid delay(uint); /聲明延時(shí)函數(shù)void display(void); /聲明顯示函數(shù)uchar disbuffer8=0,1,2,3,4,5,6,7; /定義顯示緩沖區(qū)void main(void)XBYTE0 x7f03=0 x80; /8

18、255A初始化while(1)display(); /設(shè)顯示函數(shù)/*延時(shí)函數(shù)*void delay(uint i) /延時(shí)函數(shù)uint j;for (j=0;ji;j+)21/*顯示函數(shù)void display(void) /定義顯示函數(shù)uchar codevalue16=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71; /0F的字段碼表uchar chocode8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0

19、 x7f; /位選碼表uchar i,p,temp;for (i=0;i8;i+)p=disbufferi; /取當(dāng)前顯示的字符temp=codevaluep; /查得顯示字符的字段碼XBYTE0 x7f00=temp; /送出字段碼temp=chocodei; /取當(dāng)前的位選碼XBYTE0 x7f01=temp; /送出位選碼delay(20); /延時(shí)1ms227.2 C51單片機(jī)與鍵盤(pán)接口7.2.1 鍵盤(pán)的工作原理鍵盤(pán)實(shí)際上是一組按鍵開(kāi)關(guān)的集合,平時(shí)按鍵開(kāi)關(guān)處于斷開(kāi)狀態(tài),當(dāng)按下鍵時(shí)它才閉合。P1.1VCCGND斷開(kāi)閉合斷開(kāi)P1.1( a )( b )通常按鍵開(kāi)關(guān)為機(jī)械開(kāi)關(guān),由于機(jī)械觸電的

20、彈性作用,按鍵開(kāi)關(guān)在閉合和釋放時(shí)不會(huì)馬上穩(wěn)定的接通或斷開(kāi),會(huì)伴隨著一串的抖動(dòng),其抖動(dòng)持續(xù)的時(shí)間大約為510ms。按鍵的抖動(dòng)人眼是察覺(jué)不到得,但對(duì)CPU 產(chǎn)生干擾,產(chǎn)生誤處理。1.按鍵的電路原理232抖動(dòng)的消除消除按鍵盤(pán)抖動(dòng)通常有兩種方法:硬件消抖和軟件消抖。 硬件消抖:是通過(guò)在按鍵輸出電路上加一定的硬件線路來(lái)消除抖動(dòng),一般采用RS觸發(fā)器或單穩(wěn)態(tài)電路。斷開(kāi)閉合+5V+5V輸出軟件消抖:是利用延時(shí)來(lái)跳過(guò)抖動(dòng)過(guò)程。是在第一次檢測(cè)到按鍵閉合時(shí),執(zhí)行一個(gè)10ms的延遲子程序,避開(kāi)抖動(dòng),待電平穩(wěn)定后再讀入按鍵的狀態(tài)信息,確定按鍵是否閉合,以消除抖動(dòng)影響。243鍵位的編碼通常有兩種方法編碼。 (1)用連接鍵

21、盤(pán)的I/O線的二進(jìn)制組合進(jìn)行編碼。如(a)圖 (2)順序排列編碼。如(b)圖,處理方法如下:編碼值=行首編碼值X+列號(hào)Y。 P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.788 84 82 8148 44 42 4128 24 22 2118 14 12 11P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7F E D CB A 9 87 6 5 43 2 1 0( a )( b )257.2.2 獨(dú)立式鍵盤(pán)與單片機(jī)的接口鍵盤(pán)的結(jié)構(gòu)形式有兩種:獨(dú)立式鍵盤(pán)與矩陣式鍵盤(pán)。 獨(dú)立式鍵盤(pán)就是各按鍵相互獨(dú)立,每個(gè)按鍵各接一根I/O口線,每根I/O口線上的按鍵都不會(huì)影響其它的

22、I/O口線。 GNDVCCGNDVCC與8051INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.71) 獨(dú)立式鍵盤(pán) 圖(a)為中斷方式(b)為查詢方式工作26 下面是針對(duì)查詢方式的匯編語(yǔ)言形式的鍵盤(pán)程序??偣灿?個(gè)鍵位,KEY0KEY7為8個(gè)鍵的功能程序。START:MOV A,#0FFH;MOV P1,A ;置P1口為輸入狀態(tài)MOV A,P1 ;鍵狀態(tài)輸入CPL AJZ START ;沒(méi)有鍵按下,則轉(zhuǎn)開(kāi)始JB ACC.0,K0 ;檢測(cè)0號(hào)鍵是否按下,按下轉(zhuǎn)JB ACC.1,K1 ;檢測(cè)1號(hào)鍵是否按下

23、,按下轉(zhuǎn)JB ACC.2,K2 ;檢測(cè)2號(hào)鍵是否按下,按下轉(zhuǎn)JB ACC.3,K3 ;檢測(cè)3號(hào)鍵是否按下,按下轉(zhuǎn)JB ACC.4,K4 ;檢測(cè)4號(hào)鍵是否按下,按下轉(zhuǎn)JB ACC.5,K5 ;檢測(cè)5號(hào)鍵是否按下,按下轉(zhuǎn)JB ACC.6,K6 ;檢測(cè)6號(hào)鍵是否按下,按下轉(zhuǎn)JB ACC.7,K7 ;檢測(cè)7號(hào)鍵是否按下,按下轉(zhuǎn)JMP START ;無(wú)鍵按下返回,再順次檢測(cè)27K0:AJMP KEY0K1:AJMP KEY1K7:AJIMP KEY7KEY0: ;0號(hào)鍵功能程序JMP START ;0號(hào)鍵功能程序執(zhí)行完返回KEY1: ;0號(hào)鍵功能程序JMP START ;1號(hào)鍵功能程序執(zhí)行完返回KEY7

24、: ;7號(hào)鍵功能程序JMP START ;7號(hào)鍵功能程序執(zhí)行完返回28【例7-4】 以AT89C51單片機(jī)為核心,對(duì)獨(dú)立式按鍵進(jìn)行識(shí)別并顯示按鍵的鍵號(hào)。P1口作為按鍵的輸入口,P3口接一個(gè)LED顯示器,編程顯示按鍵的號(hào)碼07。29#define uchar unsigned char#define uint unsigned intuchar data key2;code uchar dirtab=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80; /顯示碼表void key() /鍵管理函數(shù) uchar key1;P1=0 xff;

25、/讀鍵key1=P1;if(key1!=0 xff) /判斷 dl_6(); /延時(shí) P1=0 xff; /再讀 key1=P1;if(key1!=0 xff) /再判斷 key1=P1; switch(key1) case 0 xff: key2=8; break; case 0 xfe: key2=0; break; case 0 xfd: key2=1; break; case 0 xfb: key2=2; break; case 0 xf7: key2=3; break; case 0 xef: key2=4; break; case 0 xdf: key2=5; break; cas

26、e 0 xbf: key2=6; break; case 0 x7f: key2=7; break; default : break; 30void main() key2=8;while(1)key();P3=dirtabkey2;/查表并顯示312. 矩陣鍵盤(pán)與單片機(jī)的接口 矩陣式鍵盤(pán)又叫行列式鍵盤(pán)。用I/O口線組成行、列結(jié)構(gòu),鍵位設(shè)置在行列的交點(diǎn)上。例如44的行、列結(jié)構(gòu)可組成16個(gè)鍵的鍵盤(pán),比一個(gè)鍵位用一根I/O口線的獨(dú)立式鍵盤(pán)少了一半的I/O口線。 矩陣鍵盤(pán)與單片機(jī)的連接方法:直接與單片機(jī)的I/O口線;利用擴(kuò)展的并行I/O口連接;利用可編程的鍵盤(pán)、顯示接口芯片(如8279)進(jìn)行連接。其

27、中,利用擴(kuò)展的并行I/O口連接方便靈活,在單片機(jī)應(yīng)用系統(tǒng)中比較常用。321) 矩陣鍵盤(pán)的工作過(guò)程判斷是否有鍵閉合。判斷方法:輸出口向所有的列線輸入低電平,然后再輸入各行線狀態(tài)。若行線狀態(tài)均為高電平,則表明沒(méi)有鍵閉合;若行線狀態(tài)中有低電平,則表明有鍵閉合。判斷按鍵閉合位置2處理方法是:列線逐列置低電平,檢查行輸入狀態(tài),稱為逐列掃描。鍵碼計(jì)算鍵碼可以直接使用閉合鍵的行列值組合產(chǎn)生,但這會(huì)使子程序的入口地址比較散亂,所以,通常以鍵的排列順序安排鍵碼。等待鍵的釋放計(jì)算鍵碼之后,再延遲一段時(shí)間對(duì)按鍵進(jìn)行掃描,等待鍵的釋放。等待鍵的釋放是為了保證鍵閉合一次僅進(jìn)行一次處理。3334【例7-5】 以AT89C

28、51單片機(jī)為核心,設(shè)計(jì)4x4的鍵盤(pán),并顯示按鍵鍵號(hào)。P1.0P1.3作為行線,P1.4P1.7作為列線。P2口作為兩位LED顯示器的接口。圖7-13 矩陣式按鍵Proteus電路仿真圖35程序如下:#include #include #define uchar unsigned charvoid main( ) uchar i,j,k,n; P2=0 xff; /數(shù)碼管黑屏 while(1) P1=0 xf0; /P1高4為設(shè)置為輸入 if(P1&0 xf0)!=0 xf0)/判斷是否有鍵按下 j=0 xfe; /行0輸出低電平,行1、行2和行3輸出高電平 for(i=0;i4;i+) P1=

29、j; /輸入某行為0 k=P1&j; /行值、列值組合 36if(k=0 xee) n=0; delay( );/k0 else if(k=0 xde) n=1; delay( );/k1 else if(k=0 xbe) n=2; delay( );/k2 else if(k=0 x7e) n=3; delay( );/k3 else if(k=0 xed) n=4; delay( );/k4 else if(k=0 xdd) n=5; delay( );/k5 else if(k=0 xbd) n=6; delay( );/k6 else if(k=0 x7d) n=7; delay( )

30、;/k7 else if(k=0 xeb) n=8; delay( );/k8 else if(k=0 xdb) n=9; delay( );/k9 else if(k=0 xbb) n=10; delay( );/k10 else if(k=0 x7b) n=11; delay( );/k11 else if(k=0 xe7) n=12; delay( );/k12 else if(k=0 xd7) n=13; delay( );/k13 else if(k=0 xb7) n=14; delay( );/k14 else if(k=0 x77) n=15; delay( );/k15 j=(

31、j1)|0 xf1; P2=(n%10)4)|(n/10); /顯示鍵值 37PA7PA6PA5PA4PA3PA2PA1PA0PC0PC1PC2PC30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 316 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 CS74LS373WRRDA1A0P2.7WRRDALEP0.0P0.7D0D7RESET1K20F+5V+5V82555.1K4805138鍵盤(pán)掃描子程序如下:(硬件線路如圖7.4,8255A的A口、B口、C口和控制口地址分別為7F00H、7F01H、7F02H、7F03H

32、,設(shè)8255A已在主程序中初始化。已設(shè)定為A口方式0輸出,C口的低4位方式0輸入。)KEY1:ACALL KS1 ;調(diào)用判斷有無(wú)鍵按下子程序 JNZ LK1 ;有鍵按下時(shí),(A)0轉(zhuǎn)消抖延時(shí)KEY2:ACALL TM6msAJMP KEY1 ;無(wú)鍵按下返回LK1:ACALL TM12ms ;調(diào)12 ms延時(shí)子程序ACALL KS1 ;查有無(wú)鍵按下,若有則真有鍵按下JNZ LK2 ;鍵(A) 0逐列掃描AJMP KEY2 ;不是真有鍵按下,返回LK2:MOV R2,#0FEH ;初始列掃描字(0列)送入R2MOV R4,#00H ;初始列(0列)號(hào)送入R4LK4:MOV DPTR,#7F00H

33、;DPTR指向8155PA口MOV A,R2 ;列掃描字送至8155PA口MOVX DPTR,AINC DPTR ;DPTR指向8155PC口INC DPTR 39MOVX A,DPTR ;從8155 PC口讀入行狀態(tài)JB ACC.0,LONE ;查第0行無(wú)鍵按下,轉(zhuǎn)查第1行MOV A,#00H ;第0行有鍵按下,行首鍵碼#00HAAJMP LKP ;轉(zhuǎn)求鍵碼LONE:JB ACC.1,LTWO ;查第1行無(wú)鍵按下,轉(zhuǎn)查第2行MOV A,#08H ;第1行有鍵按下,行首鍵碼#08HAAJMP LKP ;轉(zhuǎn)求鍵碼LTWO:JB ACC.2,LTHR ;查第2行無(wú)鍵按下,轉(zhuǎn)查第3行MOV A,#1

34、0H ;第2行有鍵按下,行首鍵碼#10HAAJMP LKP ;轉(zhuǎn)求鍵碼LTHR:JB ACC.3,NEXT ;查第3行無(wú)鍵按下,轉(zhuǎn)該查下一列MOV A,#18H ;第3行有鍵按下,行首鍵碼#18HALKP:ADD A,R4 ;求鍵碼,鍵碼=行首鍵碼+列號(hào)PUSH ACC ;鍵碼進(jìn)棧保護(hù)LK3:ACALL KS1 ;等待鍵釋放JNZ LK3 ;鍵未釋放,等待POP ACC ;鍵釋放,鍵碼ARET ;鍵掃描結(jié)束,出口狀態(tài)(A)=鍵碼40NEXT:INC R4 ;準(zhǔn)備掃描下一列,列號(hào)加1MOV A,R2 ;取列掃描字送累加器AJNB ACC.7,KEND ;判斷8列掃描否?掃描完返回RL A ;掃描

35、字左移一位,變?yōu)橄乱涣袙呙枳諱OV R2,A ;掃描字送入R2保存AJMP LK4 ;轉(zhuǎn)下一列掃描KEND:AJMP KEY1 KS1:MOV DPTR,#7F00H ;DPTR指向8155PA口MOV A,#00H ;全掃描字AMOVX DPTR,A ;全掃描字送往8155PA口INC DPTR ;DPTR指向8155PC口INC DPTR MOVX A,DPTR ;讀入PC口行狀態(tài)CPL A ;變正邏輯,以高電平表示有鍵按下ANL A,#0FH ;屏蔽高4位,只保留低4位行線值RET ;出口狀態(tài):(A)0時(shí)有鍵按下41TM12ms:MOV R7,#18H ;延時(shí)12 ms子程序TM:MOV

36、 R6,#0FFHTM6:DJNZ R6,TM6DJNZ R7,TMRETTM6ms:MOV R7,#0CH ;延時(shí)6 ms子程序TM2:MOV R6,#0FFHTM62:DJNZ R6,TM6DJNZ R7,TMRETC語(yǔ)言鍵盤(pán)掃描子程序:略427.3 MCS-51單片機(jī)與ADC的接口7.3.1 A/D轉(zhuǎn)換器概述 A/D轉(zhuǎn)換器(ADC)的作用:把模擬量轉(zhuǎn)換成數(shù)字量,以便于計(jì)算機(jī)進(jìn)行處理。根據(jù)轉(zhuǎn)換原理可分:計(jì)數(shù)型A/D轉(zhuǎn)換器、逐次比較式、雙斜率積分型、V/F變換式等;按轉(zhuǎn)換方法:可分為直接A/D轉(zhuǎn)換器和間接A/D轉(zhuǎn)換器;按其分辨率可分:為416位的A/D轉(zhuǎn)換器芯片。與單片機(jī)的接口方式:有串聯(lián)接

37、口和并聯(lián)接口兩種方式。1) 分類2). A/D轉(zhuǎn)換器的主要指標(biāo)分辨率:一位最小單位的數(shù)字量所表示的模擬電壓變化量,它與位數(shù)有關(guān);轉(zhuǎn)換速度:轉(zhuǎn)換一次的時(shí)間,逐次比較型一般為510us;轉(zhuǎn)換精度:它反映實(shí)際A/D在量化值上與理想A/D的差值,用絕對(duì)或相位誤差表示。433. A/D轉(zhuǎn)換器的組成一個(gè)完整的A/D轉(zhuǎn)換器應(yīng)該包含有: 模擬輸入信號(hào)和參考電壓; 數(shù)字輸出信號(hào); 啟動(dòng)A/D轉(zhuǎn)換信號(hào),輸入信號(hào); 轉(zhuǎn)換結(jié)束信號(hào)或者“忙”信號(hào),輸出信號(hào); 數(shù)據(jù)輸出允許信號(hào),輸入信號(hào);圖7-14 A/D轉(zhuǎn)換流程圖447.3.2 ADC0809與MCS-51的接口1)ADC0809芯片ADC0809是CMOS單片型逐次

38、逼近型、8位A/D轉(zhuǎn)換器,具有8路模擬量輸入通道,有轉(zhuǎn)換起??刂?,模擬輸入電壓范疇為0+5V,轉(zhuǎn)換時(shí)間為100s,IN0IN1IN2IN3IN4IN5IN6IN7ADDAADDBADDCALE通道選擇開(kāi)關(guān)地址鎖存和譯碼定時(shí)和控 制逐次逼近寄存器SAR8 位三 態(tài)鎖 存緩沖器DACOEEOCCLOCKSTARTVCCGNDVREF+VREF-ADC0809D0D1D2D3D4D5D6D745IN0IN7:8路模擬量輸入端。D0D7:8位數(shù)字量輸出端。ADDA、ADDB、ADDC:3位地址輸入線,選擇8路模擬通道中的一路。 ADDCADDBADDA選擇通道000IN0001IN1010IN2011

39、IN3100IN4101IN5110IN6111IN7ALE:地址鎖存允許信號(hào),輸入,高電平有效。START:A/D轉(zhuǎn)換啟動(dòng)信號(hào),輸入,高電平有效。2)ADC0809的引腳EOC:A/D轉(zhuǎn)換結(jié)束信號(hào),輸出。當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),該線腳輸出高電平。OE:數(shù)據(jù)輸出允許信號(hào),輸入,高電平有效。CLK:時(shí)鐘脈沖輸入端。要求時(shí)鐘頻率不高于640KHZ.REF+、REF-:基準(zhǔn)電壓輸入端。Vcc:接+5V電源。GND:地。463)ADC0809的工作流程輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,經(jīng)地址譯碼器譯碼從8路模擬通道中選通一路模擬量送到比較器。送START一高脈沖,START的上升沿使逐

40、次逼近寄存器復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換,并使EOC信號(hào)為低電平。當(dāng)轉(zhuǎn)換結(jié)束時(shí),轉(zhuǎn)換的結(jié)果送入到輸出三態(tài)鎖存器,并使EOC信號(hào)回到高電平,通知CPU已轉(zhuǎn)換結(jié)束。當(dāng)CPU執(zhí)行一讀數(shù)據(jù)指令,使OE為高電平,則從輸出端D0D1讀出數(shù)據(jù)。474)ADC0809與MCS-51單片機(jī)的接口P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALE WR P2.7RDINTO+5VGNDD0D1D2D3D4D5D6D7ADDAADDBADDCCLKALESTARTOEEOCIN0IN1IN2IN3IN4IN5IN6IN7 VREF+VREF-ADC08098051分頻器2軟件編程設(shè)接口電路用于一個(gè)

41、8路模擬量輸入的巡回檢測(cè)系統(tǒng),使用中斷方式采樣數(shù)據(jù),把采樣轉(zhuǎn)換所得的數(shù)字量按序存于片內(nèi)RAM的30H37H單元中。采樣完一遍后停止采集。48匯編語(yǔ)言編程:ORG 0003HLJMP INT0ORG 0100H ;主程序MOV R0,#30H ;設(shè)立數(shù)據(jù)存儲(chǔ)區(qū)指針MOV R2,#08H ;設(shè)置8路采樣計(jì)數(shù)值SETB IT0 ;設(shè)置外部中斷0為邊沿觸發(fā)方式 SETB EA ;CPU開(kāi)放中斷SETB EX0 ;允許外部中斷0中斷MOV DPTR,#0000H ;送入口地址并指向IN0LOOP: MOVX DPTR,A ;啟動(dòng)A/D轉(zhuǎn)換,A的值無(wú)意義HERE: SJMP HERE ;等待中斷ORG 0

42、200H ;中斷服務(wù)程序INT0: MOVX A,DPTR ;讀取轉(zhuǎn)換后的數(shù)字量MOV R0,A ;存入片內(nèi)RAM單元INC DPTR ;指向下一模擬通道INC R0 ;指向下一個(gè)數(shù)據(jù)存儲(chǔ)單元DJNZ R2,NEXT ;8路未轉(zhuǎn)換完,則繼續(xù)CLR EA ;已轉(zhuǎn)換完,則關(guān)中斷CLR EX0 ;禁止外部中斷0中斷RETI ;中斷返回NEXT: MOVX DPTR,A ;再次啟動(dòng)A/D轉(zhuǎn)換RETI ;中斷返回49C語(yǔ)言編程:#include #include /定義絕對(duì)地址訪問(wèn)#define uchar unsigned char#define IN0 XBYTE0 x0000 /定義IN0為通道0

43、的地址static uchar data x8; /定義8個(gè)單元的數(shù)組,存放結(jié)果uchar xdata *ad_adr; /定義指向通道的指針uchar i=0;void main(void)IT0=1; /初始化EX0=1;EA=1;i=0;ad_adr=&IN0; /指針指向通道0*ad_adr=i; /啟動(dòng)通道0轉(zhuǎn)換for (;) ; /等待中斷50void int_adc(void) interrupt 0 /中斷函數(shù)xi=*ad_adr; /接收當(dāng)前通道轉(zhuǎn)換結(jié)果i+;ad_adr+; /指向下一個(gè)通道if (i8)*ad_adr=i; /8個(gè)通道未轉(zhuǎn)換完,啟動(dòng)下一個(gè)通道返回elseE

44、A=0;EX0=0; /8個(gè)通道轉(zhuǎn)換完,關(guān)中斷返回51【例7-6】一路模擬輸入經(jīng)ADC0809實(shí)現(xiàn)A/D轉(zhuǎn)換,并以LED指示燈表示數(shù)值的大小。外部輸入IN0接一個(gè)模擬電壓源,口地址為78FFH。MCS-51單片機(jī)可以采用無(wú)條件方式、查詢方式、中斷方式實(shí)現(xiàn)轉(zhuǎn)換數(shù)據(jù)的讀取。采集到的數(shù)據(jù)通過(guò)LED發(fā)光二極管定性指示。當(dāng)采用無(wú)條件方式時(shí),硬件電路可以將EOC接到P3.3的信號(hào)去掉。52(1) 無(wú)條件方式的程序:#include#include#define uchar unsigned char#define ADC0809 XBYTE0 x78ffvoid delay() uchar j;for(j

45、=0;j250;j+) ; void main() while(1)ADC0809=0; /啟動(dòng)ADdelay();P1=ADC0809; /讀取數(shù)據(jù)53(2) 查詢方式的程序:#include#include#define uchar unsigned char#define ADC0809 XBYTE0 x78ffsbit P33=P33;void main()while(1) ADC0809=0; /啟動(dòng)ADll: P33=1;if(P33=0)P1=ADC0809; /讀取數(shù)據(jù)else goto ll;54(3) 中斷方式的程序:#include#include#define ucha

46、r unsigned char#define ADC0809 XBYTE0 x78ffsbit P33=P33;void main()EA=1;EX1=1;IT1=1;ADC0809=0; /啟動(dòng)AD while(1);void int0() interrupt 2P1=ADC0809; /讀取數(shù)據(jù)ADC0809=0; /啟動(dòng)AD 558.4.1 D/A轉(zhuǎn)換器概述1)D/A轉(zhuǎn)換器的性能指標(biāo)1分辨率。3線性度4溫度靈敏度2建立時(shí)間2)D/A轉(zhuǎn)換的分類按輸入數(shù)字量的位數(shù)分:8位、10位、12位和16位等;按輸入的數(shù)碼分:二進(jìn)制方式、BCD碼方式;按傳送數(shù)字量的方式分:并行方式和串行方式;按輸出形式

47、分:電流輸出型和電壓輸出型,電壓輸出型又有單極性和雙極性;按與單片機(jī)的接口分:帶輸入鎖存的和不帶輸入鎖存的。無(wú)鎖存DAC: DAC800、AD7520、AD7521有鎖存DAC:DAC0832、DAC1210、AD7542、AD75498.4 MCS-51單片機(jī)與DAC的接口563)D/A轉(zhuǎn)換器與單片機(jī)的連接 數(shù)據(jù)線的連接考慮兩個(gè)問(wèn)題:一是位數(shù),當(dāng)高于8位的D/A轉(zhuǎn)換器與8位數(shù)據(jù)總線的單片機(jī)接口時(shí),單片機(jī)的數(shù)據(jù)線必須分時(shí)輸出;考慮:數(shù)據(jù)分時(shí)傳送的格式、輸出電壓的“毛刺”問(wèn)題;二是D/A轉(zhuǎn)換器有無(wú)輸入鎖存器,當(dāng)D/A轉(zhuǎn)換器內(nèi)部沒(méi)有輸入鎖存器時(shí),必須在單片機(jī)與D/A轉(zhuǎn)換器之間增設(shè)鎖存器。 地址線的

48、連接D/A轉(zhuǎn)換器只有片選信號(hào),而沒(méi)有地址線。單片機(jī)的地址線采用全譯碼或部分譯碼,譯碼輸出控制D/A轉(zhuǎn)換器的片選信號(hào),也可由一位I/O線來(lái)控制D/A轉(zhuǎn)換器的片選信號(hào)。 控制線的連接 D/A轉(zhuǎn)換器主要有片選信號(hào)、寫(xiě)信號(hào)及啟動(dòng)轉(zhuǎn)換信號(hào)等,一般由單片機(jī)的引腳或譯碼器控制。 578.4.2 C51與DAC0832的接口1)DAC0832芯片 DAC0832是一種電流型D/A轉(zhuǎn)換器,數(shù)字輸入端具有雙重緩沖功能.工作方式:雙緩沖、單緩沖、直通方式輸入。 與與與DI0DI7ILECSWR1WR2XFER輸入寄存器DAC寄存器D/A轉(zhuǎn)換器LE1LE2VREFRfbIOUT1IOUT2AGNDVCCDGNDDAC

49、0832582)DAC0832的引腳DAC0832有20引腳,采用雙列直插式封裝CSWR1AGNDDI3DI2DI2DI0VREF RFB DGNDVCCILEWR2XFERDI4DI5DI6DI7IOUT1IOUT21234567891020191817161514131211DI0DI7:8位數(shù)字量輸入端。ILE:允許輸入鎖存線,高電平有效。:片選信號(hào)。 :寫(xiě)信號(hào)線1。:寫(xiě)信號(hào)線2。 IOUT1:模擬電流輸出線1。IOUT2:模擬電流輸出線2。Rfb:片內(nèi)反饋電阻引出線VREF:基準(zhǔn)電壓輸入線。電壓范圍為10V10V。VCC:工作電源輸入端,可接5V15V電源。AGND:模擬地。DGND:

50、數(shù)字地。傳送控制信號(hào),低電平有效。593)DAC0832的工作方式DAC0832有三種方式:直通方式、單緩沖方式和雙緩沖方式。直通方式:引腳 、 、 、 直接接地,ILE接電源時(shí),DAC0832工作于直通方式。此時(shí),8位輸入寄存器和8位DAC寄存器都處于導(dǎo)通狀態(tài),8位數(shù)字量送到D/A的輸入口,則直接進(jìn)行DA轉(zhuǎn)換,從輸出端得到轉(zhuǎn)換的模擬量。 單緩沖方式當(dāng)引腳 、 、 、 時(shí),使得兩個(gè)緩沖器的一個(gè)處于導(dǎo)通狀態(tài)、另一個(gè)處于受控狀態(tài),或者兩個(gè)被控同時(shí)導(dǎo)通,DAC0832就工作于單緩沖方式。60Vout-VCCILECSWR1DI0DI7WR2 XFERDGND AGNDVREFRfbIOUT1IOUT2+5V-5V-A+ -P2.7WRP0.0P0.78051圖7-22 單緩沖方式的連接圖61雙緩沖方式:當(dāng)8位輸入鎖存器和8位DAC寄存器分開(kāi)控制導(dǎo)通時(shí),DAC0832工作于雙緩沖方式。雙緩沖方式時(shí)單片機(jī)對(duì)DAC0832的操作分兩步:第一步,使8位輸入鎖存器導(dǎo)通,將8位數(shù)字量寫(xiě)入8位輸入鎖存器;第二步,使8位DAC寄存器導(dǎo)通,8位數(shù)字量從8位輸入鎖存器送入8位DAC寄存器。第二步只使DAC寄存器導(dǎo)通,在數(shù)據(jù)輸入端寫(xiě)入的數(shù)據(jù)無(wú)意義。62當(dāng)要求多個(gè)模擬量同時(shí)輸出時(shí),可采用雙緩沖方式。63計(jì)算輸出量為0CDH時(shí),的輸出。四DAC0832的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論