版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第七章 C51單片機(jī)外圍接口電路 C51單片機(jī)與顯示電路的接口 C51單片機(jī)與鍵盤的接口 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)為共陽極結(jié)構(gòu) ( c)圖為管腳圖常用的顯示器:LED、LCDLED:發(fā)光二極管;LED顯示器:將發(fā)光二極管按照一定結(jié)構(gòu)進(jìn)行組合來顯示字段的器件,也稱為數(shù)碼管。在單片機(jī)應(yīng)用系統(tǒng)中通常采用七段、八段式數(shù)碼管;
2、八段式LED數(shù)碼管顯示器,它有共陰極、共陽極兩種;顯示09、AF、小數(shù)點“.”等字符2顯示數(shù)字共陰極小數(shù)點暗十六進(jìn)制共陽極小數(shù)點暗十六進(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ù)點1 000000080H0 11111117FH表7.1 數(shù)字和字符的共陰極和共陽極的字段碼32)LED數(shù)碼管顯示器的譯碼方式硬件譯碼方式譯碼
4、:指將顯示字符轉(zhuǎn)換為對應(yīng)的字段碼的過程。 譯碼方式:硬件譯碼、軟件譯碼 硬件譯碼:指用專門的硬件電路(或顯示譯碼芯片)來實現(xiàn)顯示字符到字段碼的轉(zhuǎn)換,如:MOTOTOLA公司的MC14495芯片。MC14495是共陰極的字段碼轉(zhuǎn)換芯片,能將四位二進(jìn)制表示的一位十六進(jìn)制數(shù)轉(zhuǎn)換為七位字段碼,不帶小數(shù)點。4鎖存器地址譯碼和字段碼ROM陣列ABCDLE569107VssVDD816abcdefgh+iVCR111213141512344軟件譯碼 軟件譯碼:是通過編寫軟件譯碼程序,通過譯碼程序來得到要顯示的字符的字段碼。 優(yōu)點:電路簡單、顯示字符靈活外形尺寸分: “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)顯示、動態(tài)顯示。1. 靜態(tài)顯示靜態(tài)顯示:當(dāng)顯示某個數(shù)字或字符時,相應(yīng)的字段(發(fā)光二極管)恒定地導(dǎo)通或關(guān)斷,直到顯示下一個數(shù)字或字符為止。特點:公共段直接接地(共陰極)或電源(共陽極),每個數(shù)碼管的字段選線直接(ag,dp)與一個8位的并口相連。 應(yīng)用:占有硬件資源多,一般用于顯示器位數(shù)較少的場合。6硬件譯碼靜態(tài)顯示下圖是一個兩位數(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實現(xiàn)段碼的譯碼和驅(qū)動;電路中采用共陰極數(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ù)字,通過P2低4位顯示 k=(i%10)4; /個位上的數(shù)字,通過P2高4位顯示 P2=j|k; delay( ); /調(diào)用延時子程序 92LED動態(tài)顯示方式 LED動態(tài)顯示:是將所有數(shù)碼管的段選線并接在一起,用一個I/O口控制,公共端不直接接地(共陰極)或電源(共陽極),而是通過相應(yīng)的I/O口線控制。 D3D2D1D0I/O(1)I/O(2)特點:各個數(shù)碼管共用一個段碼輸出端口,分時輪流選通顯示。缺點:數(shù)碼管的數(shù)量不能太多。一般在8個以內(nèi),以免每個數(shù)碼管分配到的實際導(dǎo)通時間太短,亮度不夠。動態(tài)顯示電路有三種:
8、并行I/0口顯示電路、并行I/0口與譯碼器構(gòu)成的顯示電路、串行口構(gòu)成的動態(tài)顯示電路。10 數(shù)碼管為共陽極時,工作過程為:第一步使右邊第一個數(shù)碼管的公共端D0為1,其余的數(shù)碼管的公共端為0,同時在I/O(1)上送右邊第一個數(shù)碼管的字段碼,這時,只有右邊第一個數(shù)碼管顯示,其余不顯示;第二步使右邊第二個數(shù)碼管的公共端D1為1,其余的數(shù)碼管的公共端為0,同時在I/O(1)上送右邊第二個數(shù)碼管的字段碼,這時,只有右邊第二個數(shù)碼管顯示,其余不顯示;依此類推,直到最后一個;這樣四個數(shù)碼管輪流顯示相應(yīng)的信息,一個循環(huán)完后,下一循環(huán)又這樣輪流顯示,從計算機(jī)的角度看是一個一個的顯示,但由于人的視覺滯留,只要循環(huán)的
9、周期足夠快,看起來所有的數(shù)碼管都是一起顯示的了。而這個循環(huán)周期對于計算機(jī)來說很容易實現(xiàn)。所以在單片機(jī)中經(jīng)常用到動態(tài)顯示。 117.1.3 MCS-51與LED顯示器的接口電路設(shè)計實例【例7-2】 利用AT89C52單片機(jī)的并行口作為動態(tài)顯示的段口和位口,實現(xiàn)6位數(shù)碼管的動態(tài)顯示。Proteus仿真電路如圖7-5所示。在圖中,以P0口作為段碼控制口,段碼經(jīng)驅(qū)動芯片74HC245實現(xiàn)段碼的驅(qū)動;P3口作為位碼控制口,經(jīng)過7407實現(xiàn)某一位的選通,并經(jīng)軟件延遲,實現(xiàn)6位數(shù)碼管的輪流顯示。12 隨機(jī)調(diào)用隨機(jī)調(diào)用:在主函數(shù)中,當(dāng)顯示緩沖區(qū)的內(nèi)容發(fā)生變化后,就需要對顯示函數(shù)進(jìn)行調(diào)用,兩次調(diào)用的時間間隔不能
10、太長,時間太長將發(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() /延時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 定時調(diào)用定時調(diào)用是
12、通過定時/計數(shù)器的定時功能來定時一定的時間(如20ms),定時時間到后調(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()/延時1ms函數(shù)15void main(void)/定時調(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】是一個8位軟件譯碼動態(tài)顯示的接口電路圖。圖中用8255A擴(kuò)展并行I/O口接數(shù)碼管;數(shù)碼管采用動態(tài)顯示方式,8位數(shù)碼管的段選線并聯(lián)與8255A的A口通過74LS373相連;8
14、位數(shù)碼管的公共端通過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軟件譯碼動態(tài)顯示匯編語言程序:(設(shè)8個數(shù)碼管的顯示緩沖區(qū)為片內(nèi)RAM的57H50H單元)DISPLAY:MOV A,#10000000B ;8255初始化MOV DPTR,#7F03H ;使DPTR指向8155控制寄存器端口MOVX DPTR,AMOV R0,#57H ;動態(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延時子程序19DEC R0 ;指向緩沖區(qū)下一單元MOV A,R3 ;位選碼送累加器AJNB ACC.0,LD1 ;判斷8位是否顯示完畢,顯示完返回RR A ;未顯示完,把位選字變?yōu)橄乱晃贿x字MOV R3,A ;修改后的位選字送R3AJMP LD0 ;循環(huán)實現(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 ;延時子程序DL: MOV R6,#0FFHDL0:DJNZ R6,DL0DJNZ R7,DLRET20軟件譯碼動態(tài)顯示C語言程序為:#include #include /定義絕對地址訪問#define uchar unsigned char#define uint unsigned intvoid delay(uint); /聲明延時函數(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ù)*void delay(uint i) /延時函數(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); /延時1ms227.2 C51單片機(jī)與鍵盤接口7.2.1 鍵盤的工作原理鍵盤實際上是一組按鍵開關(guān)的集合,平時按鍵開關(guān)處于斷開狀態(tài),當(dāng)按下鍵時它才閉合。P1.1VCCGND斷開閉合斷開P1.1( a )( b )通常按鍵開關(guān)為機(jī)械開關(guān),由于機(jī)械觸電的
20、彈性作用,按鍵開關(guān)在閉合和釋放時不會馬上穩(wěn)定的接通或斷開,會伴隨著一串的抖動,其抖動持續(xù)的時間大約為510ms。按鍵的抖動人眼是察覺不到得,但對CPU 產(chǎn)生干擾,產(chǎn)生誤處理。1.按鍵的電路原理232抖動的消除消除按鍵盤抖動通常有兩種方法:硬件消抖和軟件消抖。 硬件消抖:是通過在按鍵輸出電路上加一定的硬件線路來消除抖動,一般采用RS觸發(fā)器或單穩(wěn)態(tài)電路。斷開閉合+5V+5V輸出軟件消抖:是利用延時來跳過抖動過程。是在第一次檢測到按鍵閉合時,執(zhí)行一個10ms的延遲子程序,避開抖動,待電平穩(wěn)定后再讀入按鍵的狀態(tài)信息,確定按鍵是否閉合,以消除抖動影響。243鍵位的編碼通常有兩種方法編碼。 (1)用連接鍵
21、盤的I/O線的二進(jìn)制組合進(jìn)行編碼。如(a)圖 (2)順序排列編碼。如(b)圖,處理方法如下:編碼值=行首編碼值X+列號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 獨立式鍵盤與單片機(jī)的接口鍵盤的結(jié)構(gòu)形式有兩種:獨立式鍵盤與矩陣式鍵盤。 獨立式鍵盤就是各按鍵相互獨立,每個按鍵各接一根I/O口線,每根I/O口線上的按鍵都不會影響其它的
22、I/O口線。 GNDVCCGNDVCC與8051INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.71) 獨立式鍵盤 圖(a)為中斷方式(b)為查詢方式工作26 下面是針對查詢方式的匯編語言形式的鍵盤程序??偣灿?個鍵位,KEY0KEY7為8個鍵的功能程序。START:MOV A,#0FFH;MOV P1,A ;置P1口為輸入狀態(tài)MOV A,P1 ;鍵狀態(tài)輸入CPL AJZ START ;沒有鍵按下,則轉(zhuǎn)開始JB ACC.0,K0 ;檢測0號鍵是否按下,按下轉(zhuǎn)JB ACC.1,K1 ;檢測1號鍵是否按下
23、,按下轉(zhuǎn)JB ACC.2,K2 ;檢測2號鍵是否按下,按下轉(zhuǎn)JB ACC.3,K3 ;檢測3號鍵是否按下,按下轉(zhuǎn)JB ACC.4,K4 ;檢測4號鍵是否按下,按下轉(zhuǎn)JB ACC.5,K5 ;檢測5號鍵是否按下,按下轉(zhuǎn)JB ACC.6,K6 ;檢測6號鍵是否按下,按下轉(zhuǎn)JB ACC.7,K7 ;檢測7號鍵是否按下,按下轉(zhuǎn)JMP START ;無鍵按下返回,再順次檢測27K0:AJMP KEY0K1:AJMP KEY1K7:AJIMP KEY7KEY0: ;0號鍵功能程序JMP START ;0號鍵功能程序執(zhí)行完返回KEY1: ;0號鍵功能程序JMP START ;1號鍵功能程序執(zhí)行完返回KEY7
24、: ;7號鍵功能程序JMP START ;7號鍵功能程序執(zhí)行完返回28【例7-4】 以AT89C51單片機(jī)為核心,對獨立式按鍵進(jìn)行識別并顯示按鍵的鍵號。P1口作為按鍵的輸入口,P3口接一個LED顯示器,編程顯示按鍵的號碼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(); /延時 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. 矩陣鍵盤與單片機(jī)的接口 矩陣式鍵盤又叫行列式鍵盤。用I/O口線組成行、列結(jié)構(gòu),鍵位設(shè)置在行列的交點上。例如44的行、列結(jié)構(gòu)可組成16個鍵的鍵盤,比一個鍵位用一根I/O口線的獨立式鍵盤少了一半的I/O口線。 矩陣鍵盤與單片機(jī)的連接方法:直接與單片機(jī)的I/O口線;利用擴(kuò)展的并行I/O口連接;利用可編程的鍵盤、顯示接口芯片(如8279)進(jìn)行連接。其
27、中,利用擴(kuò)展的并行I/O口連接方便靈活,在單片機(jī)應(yīng)用系統(tǒng)中比較常用。321) 矩陣鍵盤的工作過程判斷是否有鍵閉合。判斷方法:輸出口向所有的列線輸入低電平,然后再輸入各行線狀態(tài)。若行線狀態(tài)均為高電平,則表明沒有鍵閉合;若行線狀態(tài)中有低電平,則表明有鍵閉合。判斷按鍵閉合位置2處理方法是:列線逐列置低電平,檢查行輸入狀態(tài),稱為逐列掃描。鍵碼計算鍵碼可以直接使用閉合鍵的行列值組合產(chǎn)生,但這會使子程序的入口地址比較散亂,所以,通常以鍵的排列順序安排鍵碼。等待鍵的釋放計算鍵碼之后,再延遲一段時間對按鍵進(jìn)行掃描,等待鍵的釋放。等待鍵的釋放是為了保證鍵閉合一次僅進(jìn)行一次處理。3334【例7-5】 以AT89C
28、51單片機(jī)為核心,設(shè)計4x4的鍵盤,并顯示按鍵鍵號。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鍵盤掃描子程序如下:(硬件線路如圖7.4,8255A的A口、B口、C口和控制口地址分別為7F00H、7F01H、7F02H、7F03H
32、,設(shè)8255A已在主程序中初始化。已設(shè)定為A口方式0輸出,C口的低4位方式0輸入。)KEY1:ACALL KS1 ;調(diào)用判斷有無鍵按下子程序 JNZ LK1 ;有鍵按下時,(A)0轉(zhuǎn)消抖延時KEY2:ACALL TM6msAJMP KEY1 ;無鍵按下返回LK1:ACALL TM12ms ;調(diào)12 ms延時子程序ACALL KS1 ;查有無鍵按下,若有則真有鍵按下JNZ LK2 ;鍵(A) 0逐列掃描AJMP KEY2 ;不是真有鍵按下,返回LK2:MOV R2,#0FEH ;初始列掃描字(0列)送入R2MOV R4,#00H ;初始列(0列)號送入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行無鍵按下,轉(zhuǎn)查第1行MOV A,#00H ;第0行有鍵按下,行首鍵碼#00HAAJMP LKP ;轉(zhuǎn)求鍵碼LONE:JB ACC.1,LTWO ;查第1行無鍵按下,轉(zhuǎn)查第2行MOV A,#08H ;第1行有鍵按下,行首鍵碼#08HAAJMP LKP ;轉(zhuǎn)求鍵碼LTWO:JB ACC.2,LTHR ;查第2行無鍵按下,轉(zhuǎn)查第3行MOV A,#1
34、0H ;第2行有鍵按下,行首鍵碼#10HAAJMP LKP ;轉(zhuǎn)求鍵碼LTHR:JB ACC.3,NEXT ;查第3行無鍵按下,轉(zhuǎn)該查下一列MOV A,#18H ;第3行有鍵按下,行首鍵碼#18HALKP:ADD A,R4 ;求鍵碼,鍵碼=行首鍵碼+列號PUSH ACC ;鍵碼進(jìn)棧保護(hù)LK3:ACALL KS1 ;等待鍵釋放JNZ LK3 ;鍵未釋放,等待POP ACC ;鍵釋放,鍵碼ARET ;鍵掃描結(jié)束,出口狀態(tài)(A)=鍵碼40NEXT:INC R4 ;準(zhǔn)備掃描下一列,列號加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時有鍵按下41TM12ms:MOV R7,#18H ;延時12 ms子程序TM:MOV
36、 R6,#0FFHTM6:DJNZ R6,TM6DJNZ R7,TMRETTM6ms:MOV R7,#0CH ;延時6 ms子程序TM2:MOV R6,#0FFHTM62:DJNZ R6,TM6DJNZ R7,TMRETC語言鍵盤掃描子程序:略427.3 MCS-51單片機(jī)與ADC的接口7.3.1 A/D轉(zhuǎn)換器概述 A/D轉(zhuǎn)換器(ADC)的作用:把模擬量轉(zhuǎn)換成數(shù)字量,以便于計算機(jī)進(jìn)行處理。根據(jù)轉(zhuǎn)換原理可分:計數(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)換一次的時間,逐次比較型一般為510us;轉(zhuǎn)換精度:它反映實際A/D在量化值上與理想A/D的差值,用絕對或相位誤差表示。433. A/D轉(zhuǎn)換器的組成一個完整的A/D轉(zhuǎn)換器應(yīng)該包含有: 模擬輸入信號和參考電壓; 數(shù)字輸出信號; 啟動A/D轉(zhuǎn)換信號,輸入信號; 轉(zhuǎn)換結(jié)束信號或者“忙”信號,輸出信號; 數(shù)據(jù)輸出允許信號,輸入信號;圖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)換時間為100s,IN0IN1IN2IN3IN4IN5IN6IN7ADDAADDBADDCALE通道選擇開關(guān)地址鎖存和譯碼定時和控 制逐次逼近寄存器SAR8 位三 態(tài)鎖 存緩沖器DACOEEOCCLOCKSTARTVCCGNDVREF+VREF-ADC0809D0D1D2D3D4D5D6D745IN0IN7:8路模擬量輸入端。D0D7:8位數(shù)字量輸出端。ADDA、ADDB、ADDC:3位地址輸入線,選擇8路模擬通道中的一路。 ADDCADDBADDA選擇通道000IN0001IN1010IN2011
39、IN3100IN4101IN5110IN6111IN7ALE:地址鎖存允許信號,輸入,高電平有效。START:A/D轉(zhuǎn)換啟動信號,輸入,高電平有效。2)ADC0809的引腳EOC:A/D轉(zhuǎn)換結(jié)束信號,輸出。當(dāng)A/D轉(zhuǎn)換結(jié)束時,該線腳輸出高電平。OE:數(shù)據(jù)輸出允許信號,輸入,高電平有效。CLK:時鐘脈沖輸入端。要求時鐘頻率不高于640KHZ.REF+、REF-:基準(zhǔn)電壓輸入端。Vcc:接+5V電源。GND:地。463)ADC0809的工作流程輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,經(jīng)地址譯碼器譯碼從8路模擬通道中選通一路模擬量送到比較器。送START一高脈沖,START的上升沿使逐
40、次逼近寄存器復(fù)位,下降沿啟動A/D轉(zhuǎn)換,并使EOC信號為低電平。當(dāng)轉(zhuǎn)換結(jié)束時,轉(zhuǎn)換的結(jié)果送入到輸出三態(tài)鎖存器,并使EOC信號回到高電平,通知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è)接口電路用于一個
41、8路模擬量輸入的巡回檢測系統(tǒng),使用中斷方式采樣數(shù)據(jù),把采樣轉(zhuǎn)換所得的數(shù)字量按序存于片內(nèi)RAM的30H37H單元中。采樣完一遍后停止采集。48匯編語言編程:ORG 0003HLJMP INT0ORG 0100H ;主程序MOV R0,#30H ;設(shè)立數(shù)據(jù)存儲區(qū)指針MOV R2,#08H ;設(shè)置8路采樣計數(shù)值SETB IT0 ;設(shè)置外部中斷0為邊沿觸發(fā)方式 SETB EA ;CPU開放中斷SETB EX0 ;允許外部中斷0中斷MOV DPTR,#0000H ;送入口地址并指向IN0LOOP: MOVX DPTR,A ;啟動A/D轉(zhuǎn)換,A的值無意義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 ;指向下一個數(shù)據(jù)存儲單元DJNZ R2,NEXT ;8路未轉(zhuǎn)換完,則繼續(xù)CLR EA ;已轉(zhuǎn)換完,則關(guān)中斷CLR EX0 ;禁止外部中斷0中斷RETI ;中斷返回NEXT: MOVX DPTR,A ;再次啟動A/D轉(zhuǎn)換RETI ;中斷返回49C語言編程:#include #include /定義絕對地址訪問#define uchar unsigned char#define IN0 XBYTE0 x0000 /定義IN0為通道0
43、的地址static uchar data x8; /定義8個單元的數(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; /啟動通道0轉(zhuǎn)換for (;) ; /等待中斷50void int_adc(void) interrupt 0 /中斷函數(shù)xi=*ad_adr; /接收當(dāng)前通道轉(zhuǎn)換結(jié)果i+;ad_adr+; /指向下一個通道if (i8)*ad_adr=i; /8個通道未轉(zhuǎn)換完,啟動下一個通道返回elseE
44、A=0;EX0=0; /8個通道轉(zhuǎn)換完,關(guān)中斷返回51【例7-6】一路模擬輸入經(jīng)ADC0809實現(xiàn)A/D轉(zhuǎn)換,并以LED指示燈表示數(shù)值的大小。外部輸入IN0接一個模擬電壓源,口地址為78FFH。MCS-51單片機(jī)可以采用無條件方式、查詢方式、中斷方式實現(xiàn)轉(zhuǎn)換數(shù)據(jù)的讀取。采集到的數(shù)據(jù)通過LED發(fā)光二極管定性指示。當(dāng)采用無條件方式時,硬件電路可以將EOC接到P3.3的信號去掉。52(1) 無條件方式的程序:#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; /啟動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; /啟動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; /啟動AD while(1);void int0() interrupt 2P1=ADC0809; /讀取數(shù)據(jù)ADC0809=0; /啟動AD 558.4.1 D/A轉(zhuǎn)換器概述1)D/A轉(zhuǎn)換器的性能指標(biāo)1分辨率。3線性度4溫度靈敏度2建立時間2)D/A轉(zhuǎn)換的分類按輸入數(shù)字量的位數(shù)分:8位、10位、12位和16位等;按輸入的數(shù)碼分:二進(jìn)制方式、BCD碼方式;按傳送數(shù)字量的方式分:并行方式和串行方式;按輸出形式
47、分:電流輸出型和電壓輸出型,電壓輸出型又有單極性和雙極性;按與單片機(jī)的接口分:帶輸入鎖存的和不帶輸入鎖存的。無鎖存DAC: DAC800、AD7520、AD7521有鎖存DAC:DAC0832、DAC1210、AD7542、AD75498.4 MCS-51單片機(jī)與DAC的接口563)D/A轉(zhuǎn)換器與單片機(jī)的連接 數(shù)據(jù)線的連接考慮兩個問題:一是位數(shù),當(dāng)高于8位的D/A轉(zhuǎn)換器與8位數(shù)據(jù)總線的單片機(jī)接口時,單片機(jī)的數(shù)據(jù)線必須分時輸出;考慮:數(shù)據(jù)分時傳送的格式、輸出電壓的“毛刺”問題;二是D/A轉(zhuǎn)換器有無輸入鎖存器,當(dāng)D/A轉(zhuǎn)換器內(nèi)部沒有輸入鎖存器時,必須在單片機(jī)與D/A轉(zhuǎn)換器之間增設(shè)鎖存器。 地址線的
48、連接D/A轉(zhuǎn)換器只有片選信號,而沒有地址線。單片機(jī)的地址線采用全譯碼或部分譯碼,譯碼輸出控制D/A轉(zhuǎn)換器的片選信號,也可由一位I/O線來控制D/A轉(zhuǎn)換器的片選信號。 控制線的連接 D/A轉(zhuǎn)換器主要有片選信號、寫信號及啟動轉(zhuǎn)換信號等,一般由單片機(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:允許輸入鎖存線,高電平有效。:片選信號。 :寫信號線1。:寫信號線2。 IOUT1:模擬電流輸出線1。IOUT2:模擬電流輸出線2。Rfb:片內(nèi)反饋電阻引出線VREF:基準(zhǔn)電壓輸入線。電壓范圍為10V10V。VCC:工作電源輸入端,可接5V15V電源。AGND:模擬地。DGND:
50、數(shù)字地。傳送控制信號,低電平有效。593)DAC0832的工作方式DAC0832有三種方式:直通方式、單緩沖方式和雙緩沖方式。直通方式:引腳 、 、 、 直接接地,ILE接電源時,DAC0832工作于直通方式。此時,8位輸入寄存器和8位DAC寄存器都處于導(dǎo)通狀態(tài),8位數(shù)字量送到D/A的輸入口,則直接進(jìn)行DA轉(zhuǎn)換,從輸出端得到轉(zhuǎn)換的模擬量。 單緩沖方式當(dāng)引腳 、 、 、 時,使得兩個緩沖器的一個處于導(dǎo)通狀態(tài)、另一個處于受控狀態(tài),或者兩個被控同時導(dǎo)通,DAC0832就工作于單緩沖方式。60Vout-VCCILECSWR1DI0DI7WR2 XFERDGND AGNDVREFRfbIOUT1IOUT2+5V-5V-A+ -P2.7WRP0.0P0.78051圖7-22 單緩沖方式的連接圖61雙緩沖方式:當(dāng)8位輸入鎖存器和8位DAC寄存器分開控制導(dǎo)通時,DAC0832工作于雙緩沖方式。雙緩沖方式時單片機(jī)對DAC0832的操作分兩步:第一步,使8位輸入鎖存器導(dǎo)通,將8位數(shù)字量寫入8位輸入鎖存器;第二步,使8位DAC寄存器導(dǎo)通,8位數(shù)字量從8位輸入鎖存器送入8位DAC寄存器。第二步只使DAC寄存器導(dǎo)通,在數(shù)據(jù)輸入端寫入的數(shù)據(jù)無意義。62當(dāng)要求多個模擬量同時輸出時,可采用雙緩沖方式。63計算輸出量為0CDH時,的輸出。四DAC0832的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年生存保險合同的特約條款
- 2025年分期付款書籍購買合同
- 二零二五年度智能門窗系統(tǒng)安裝勞務(wù)分包合同示范文本3篇
- 二零二五年度出口貨物檢驗檢疫合同4篇
- 2025年《泳池建設(shè)合同》
- 2025年分期付款網(wǎng)球羽毛球課程合同
- 二零二五版農(nóng)業(yè)生態(tài)循環(huán)農(nóng)業(yè)示范項目合同4篇
- 2025年環(huán)保型鋼材料采購合同規(guī)范范本
- 二零二五版奶牛場奶牛場養(yǎng)殖環(huán)境評估與改善合同3篇
- 二零二五年度明光幼兒園食堂改造與食品安全管理合同4篇
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗
- 2025年中核財務(wù)有限責(zé)任公司招聘筆試參考題庫含答案解析
- 春節(jié)文化常識單選題100道及答案
- 華中師大一附中2024-2025學(xué)年度上學(xué)期高三年級第二次考試數(shù)學(xué)試題(含解析)
- 12123交管學(xué)法減分考試題及答案
- 2025年寒假實踐特色作業(yè)設(shè)計模板
- 《數(shù)據(jù)采集技術(shù)》課件-XPath 解析庫
- 24年追覓在線測評28題及答案
- 食堂項目組織架構(gòu)圖
- 原油脫硫技術(shù)
- GB/T 2518-2019連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
評論
0/150
提交評論