第七章 MCS-51与键盘、显示器的接口_第1页
第七章 MCS-51与键盘、显示器的接口_第2页
第七章 MCS-51与键盘、显示器的接口_第3页
第七章 MCS-51与键盘、显示器的接口_第4页
第七章 MCS-51与键盘、显示器的接口_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章 C51单片机外围接口电路 C51单片机与显示电路的接口 C51单片机与键盘的接口 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)为共阴极结构 (b)为共阳极结构 ( c)图为管脚图常用的显示器:LED、LCDLED:发光二极管;LED显示器:将发光二极管按照一定结构进行组合来显示字段的器件,也称为数码管。在单片机应用系统中通常采用七段、八段式数码管;

2、八段式LED数码管显示器,它有共阴极、共阳极两种;显示09、AF、小数点“.”等字符2显示数字共阴极小数点暗十六进制共阳极小数点暗十六进制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小数点1 000000080H0 11111117FH表7.1 数字和字符的共阴极和共阳极的字段码32)LED数码管显示器的译码方式硬件译码方式译码

4、:指将显示字符转换为对应的字段码的过程。 译码方式:硬件译码、软件译码 硬件译码:指用专门的硬件电路(或显示译码芯片)来实现显示字符到字段码的转换,如:MOTOTOLA公司的MC14495芯片。MC14495是共阴极的字段码转换芯片,能将四位二进制表示的一位十六进制数转换为七位字段码,不带小数点。4锁存器地址译码和字段码ROM阵列ABCDLE569107VssVDD816abcdefgh+iVCR111213141512344软件译码 软件译码:是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。 优点:电路简单、显示字符灵活外形尺寸分: “0.5”和“0.8”显示的颜色:红色和绿

5、色亮度强弱分:超亮、高亮、普亮。数码管的正向压降为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数码管的显示方式LED数码管的显示方式:静态显示、动态显示。1. 静态显示静态显示:当显示某个数字或字符时,相应的字段(发光二极管)恒定地导通或关断,直到显示下一个数字或字符为止。特点:公共段直接接地(共阴极)或电源(共阳极),每个数码管的字段选线直接(ag,dp)与一个8位的并口相连。 应用:占有硬件资源多,一般用于显示器位数较少的场合。6硬件译码静态显示下图是一个两位数码管

6、硬件译码静态显示的接口电路图。 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】 译码器控制单体、共阴极数码管循环显示两位数字020。 以P2口作为段码控制口,段码经译码芯片7447实现段码的译码和驱动;电路中采用共阴极数码管,数码管的公共端接地。8循环显示030的程序:#include #include #define uchar unsigned charvoid main( ) uchar i,j,k

7、; while(1) for(i=0;i=30;i+) j=i/10; /十位上的数字,通过P2低4位显示 k=(i%10)4; /个位上的数字,通过P2高4位显示 P2=j|k; delay( ); /调用延时子程序 92LED动态显示方式 LED动态显示:是将所有数码管的段选线并接在一起,用一个I/O口控制,公共端不直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。 D3D2D1D0I/O(1)I/O(2)特点:各个数码管共用一个段码输出端口,分时轮流选通显示。缺点:数码管的数量不能太多。一般在8个以内,以免每个数码管分配到的实际导通时间太短,亮度不够。动态显示电路有三种:

8、并行I/0口显示电路、并行I/0口与译码器构成的显示电路、串行口构成的动态显示电路。10 数码管为共阳极时,工作过程为:第一步使右边第一个数码管的公共端D0为1,其余的数码管的公共端为0,同时在I/O(1)上送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的公共端D1为1,其余的数码管的公共端为0,同时在I/O(1)上送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示;依此类推,直到最后一个;这样四个数码管轮流显示相应的信息,一个循环完后,下一循环又这样轮流显示,从计算机的角度看是一个一个的显示,但由于人的视觉滞留,只要循环的

9、周期足够快,看起来所有的数码管都是一起显示的了。而这个循环周期对于计算机来说很容易实现。所以在单片机中经常用到动态显示。 117.1.3 MCS-51与LED显示器的接口电路设计实例【例7-2】 利用AT89C52单片机的并行口作为动态显示的段口和位口,实现6位数码管的动态显示。Proteus仿真电路如图7-5所示。在图中,以P0口作为段码控制口,段码经驱动芯片74HC245实现段码的驱动;P3口作为位码控制口,经过7407实现某一位的选通,并经软件延迟,实现6位数码管的轮流显示。12 随机调用随机调用:在主函数中,当显示缓冲区的内容发生变化后,就需要对显示函数进行调用,两次调用的时间间隔不能

10、太长,时间太长将发生显示的闪烁现象。程序如下:#include #define uchar unsigned charuchar data dis_buf6; /显示缓冲区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函数unsigned int j;for(j=0;j200;j+);13void display(void)/显示函数uchar s

11、egcode,bitcode,i;bitcode=0 xfe; /位码赋初值for(i=0;i6;i+)segcode=dis_bufi; /显示缓冲区内容查表P0=tablesegcode;P3=bitcode;dl_ms();P3=0 xff; /关闭显示bitcode=bitcode1; /调整位码bitcode=bitcode|0 x01;void main(void)dis_buf0=6; dis_buf1=5;/显示缓冲区赋初值dis_buf2=4; dis_buf3=3;dis_buf4=2; dis_buf5=1;while(1) display(); 14 定时调用定时调用是

12、通过定时/计数器的定时功能来定时一定的时间(如20ms),定时时间到后调用显示函数。程序如下:#include #define uchar unsigned charuchar data dis_buf6;/显示缓冲区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函数15void main(void)/定时调用

13、TMOD=0 x01;TH0=20000/256;TL0=2000%256;EA=1;ET0=1;TR0=1;dis_buf0=0; dis_buf1=1;/显示缓冲区赋初值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位软件译码动态显示的接口电路图。图中用8255A扩展并行I/O口接数码管;数码管采用动态显示方式,8位数码管的段选线并联与8255A的A口通过74LS373相连;8

14、位数码管的公共端通过74LS373分别与8255A的B口相连。8255A的A口输出字段码使数码管显示相应的字符,8255A的A口和B口都工作于方式0输出。A口、B口、C口和控制口的地址分别为7F00H、7F01H、7F02H和7F03H。 17D0D1D2D7Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7G OEVCC74LS373Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7G OEVCC74LS373PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7CSWRRD74LS373P2.7WRRDALEP0.0P0

15、.780C51D0D7A1A0GA1A0825518软件译码动态显示汇编语言程序:(设8个数码管的显示缓冲区为片内RAM的57H50H单元)DISPLAY:MOV A,#10000000B ;8255初始化MOV DPTR,#7F03H ;使DPTR指向8155控制寄存器端口MOVX DPTR,AMOV R0,#57H ;动态显示初始化,使R0指向缓冲区首址MOV R3,#7FH ;首位位选字送R3MOV A,R3LD0:MOV DPTR,#7F00H ;使DPTR指向PA口MOVX DPTR,A ;选通显示器低位(最右端一位)INC DPTR ;使DPTR指向PB口MOV A,R0 ;读要显

16、示数ADD A,#0DH ;调整距段选码表首的偏移量MOVC A,A+PC ;查表取得段选码MOVX DPTR,A ;段选码从PB口输出ACALL DL1 ;调用1 ms延时子程序19DEC R0 ;指向缓冲区下一单元MOV A,R3 ;位选码送累加器AJNB ACC.0,LD1 ;判断8位是否显示完毕,显示完返回RR A ;未显示完,把位选字变为下一位选字MOV R3,A ;修改后的位选字送R3AJMP LD0 ;循环实现按位序依次显示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软件译码动态显示C语言程序为:#include #include /定义绝对地址访问#define uchar unsigned char#define uint unsigned intvoid delay(uint); /声明延时函数void display(void); /声明显示函数uchar disbuffer8=0,1,2,3,4,5,6,7; /定义显示缓冲区void main(void)XBYTE0 x7f03=0 x80; /8

18、255A初始化while(1)display(); /设显示函数/*延时函数*void delay(uint i) /延时函数uint j;for (j=0;ji;j+)21/*显示函数void display(void) /定义显示函数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; /取当前显示的字符temp=codevaluep; /查得显示字符的字段码XBYTE0 x7f00=temp; /送出字段码temp=chocodei; /取当前的位选码XBYTE0 x7f01=temp; /送出位选码delay(20); /延时1ms227.2 C51单片机与键盘接口7.2.1 键盘的工作原理键盘实际上是一组按键开关的集合,平时按键开关处于断开状态,当按下键时它才闭合。P1.1VCCGND断开闭合断开P1.1( a )( b )通常按键开关为机械开关,由于机械触电的

20、弹性作用,按键开关在闭合和释放时不会马上稳定的接通或断开,会伴随着一串的抖动,其抖动持续的时间大约为510ms。按键的抖动人眼是察觉不到得,但对CPU 产生干扰,产生误处理。1.按键的电路原理232抖动的消除消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。 硬件消抖:是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用RS触发器或单稳态电路。断开闭合+5V+5V输出软件消抖:是利用延时来跳过抖动过程。是在第一次检测到按键闭合时,执行一个10ms的延迟子程序,避开抖动,待电平稳定后再读入按键的状态信息,确定按键是否闭合,以消除抖动影响。243键位的编码通常有两种方法编码。 (1)用连接键

21、盘的I/O线的二进制组合进行编码。如(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 独立式键盘与单片机的接口键盘的结构形式有两种:独立式键盘与矩阵式键盘。 独立式键盘就是各按键相互独立,每个按键各接一根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 下面是针对查询方式的汇编语言形式的键盘程序。总共有8个键位,KEY0KEY7为8个键的功能程序。START:MOV A,#0FFH;MOV P1,A ;置P1口为输入状态MOV A,P1 ;键状态输入CPL AJZ START ;没有键按下,则转开始JB ACC.0,K0 ;检测0号键是否按下,按下转JB ACC.1,K1 ;检测1号键是否按下

23、,按下转JB ACC.2,K2 ;检测2号键是否按下,按下转JB ACC.3,K3 ;检测3号键是否按下,按下转JB ACC.4,K4 ;检测4号键是否按下,按下转JB ACC.5,K5 ;检测5号键是否按下,按下转JB ACC.6,K6 ;检测6号键是否按下,按下转JB ACC.7,K7 ;检测7号键是否按下,按下转JMP START ;无键按下返回,再顺次检测27K0:AJMP KEY0K1:AJMP KEY1K7:AJIMP KEY7KEY0: ;0号键功能程序JMP START ;0号键功能程序执行完返回KEY1: ;0号键功能程序JMP START ;1号键功能程序执行完返回KEY7

24、: ;7号键功能程序JMP START ;7号键功能程序执行完返回28【例7-4】 以AT89C51单片机为核心,对独立式按键进行识别并显示按键的键号。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() /键管理函数 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. 矩阵键盘与单片机的接口 矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,键位设置在行列的交点上。例如44的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。 矩阵键盘与单片机的连接方法:直接与单片机的I/O口线;利用扩展的并行I/O口连接;利用可编程的键盘、显示接口芯片(如8279)进行连接。其

27、中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。321) 矩阵键盘的工作过程判断是否有键闭合。判断方法:输出口向所有的列线输入低电平,然后再输入各行线状态。若行线状态均为高电平,则表明没有键闭合;若行线状态中有低电平,则表明有键闭合。判断按键闭合位置2处理方法是:列线逐列置低电平,检查行输入状态,称为逐列扫描。键码计算键码可以直接使用闭合键的行列值组合产生,但这会使子程序的入口地址比较散乱,所以,通常以键的排列顺序安排键码。等待键的释放计算键码之后,再延迟一段时间对按键进行扫描,等待键的释放。等待键的释放是为了保证键闭合一次仅进行一次处理。3334【例7-5】 以AT89C

28、51单片机为核心,设计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; /数码管黑屏 while(1) P1=0 xf0; /P1高4为设置为输入 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、,设8255A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。)KEY1:ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下时,(A)0转消抖延时KEY2:ACALL TM6msAJMP KEY1 ;无键按下返回LK1:ACALL TM12ms ;调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口读入行状态JB ACC.0,LONE ;查第0行无键按下,转查第1行MOV A,#00H ;第0行有键按下,行首键码#00HAAJMP LKP ;转求键码LONE:JB ACC.1,LTWO ;查第1行无键按下,转查第2行MOV A,#08H ;第1行有键按下,行首键码#08HAAJMP LKP ;转求键码LTWO:JB ACC.2,LTHR ;查第2行无键按下,转查第3行MOV A,#1

34、0H ;第2行有键按下,行首键码#10HAAJMP LKP ;转求键码LTHR:JB ACC.3,NEXT ;查第3行无键按下,转该查下一列MOV A,#18H ;第3行有键按下,行首键码#18HALKP:ADD A,R4 ;求键码,键码=行首键码+列号PUSH ACC ;键码进栈保护LK3:ACALL KS1 ;等待键释放JNZ LK3 ;键未释放,等待POP ACC ;键释放,键码ARET ;键扫描结束,出口状态(A)=键码40NEXT:INC R4 ;准备扫描下一列,列号加1MOV A,R2 ;取列扫描字送累加器AJNB ACC.7,KEND ;判断8列扫描否?扫描完返回RL A ;扫描

35、字左移一位,变为下一列扫描字MOV R2,A ;扫描字送入R2保存AJMP LK4 ;转下一列扫描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口行状态CPL A ;变正逻辑,以高电平表示有键按下ANL A,#0FH ;屏蔽高4位,只保留低4位行线值RET ;出口状态:(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单片机与ADC的接口7.3.1 A/D转换器概述 A/D转换器(ADC)的作用:把模拟量转换成数字量,以便于计算机进行处理。根据转换原理可分:计数型A/D转换器、逐次比较式、双斜率积分型、V/F变换式等;按转换方法:可分为直接A/D转换器和间接A/D转换器;按其分辨率可分:为416位的A/D转换器芯片。与单片机的接口方式:有串联接

37、口和并联接口两种方式。1) 分类2). A/D转换器的主要指标分辨率:一位最小单位的数字量所表示的模拟电压变化量,它与位数有关;转换速度:转换一次的时间,逐次比较型一般为510us;转换精度:它反映实际A/D在量化值上与理想A/D的差值,用绝对或相位误差表示。433. A/D转换器的组成一个完整的A/D转换器应该包含有: 模拟输入信号和参考电压; 数字输出信号; 启动A/D转换信号,输入信号; 转换结束信号或者“忙”信号,输出信号; 数据输出允许信号,输入信号;图7-14 A/D转换流程图447.3.2 ADC0809与MCS-51的接口1)ADC0809芯片ADC0809是CMOS单片型逐次

38、逼近型、8位A/D转换器,具有8路模拟量输入通道,有转换起停控制,模拟输入电压范畴为0+5V,转换时间为100s,IN0IN1IN2IN3IN4IN5IN6IN7ADDAADDBADDCALE通道选择开关地址锁存和译码定时和控 制逐次逼近寄存器SAR8 位三 态锁 存缓冲器DACOEEOCCLOCKSTARTVCCGNDVREF+VREF-ADC0809D0D1D2D3D4D5D6D745IN0IN7:8路模拟量输入端。D0D7:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,选择8路模拟通道中的一路。 ADDCADDBADDA选择通道000IN0001IN1010IN2011

39、IN3100IN4101IN5110IN6111IN7ALE:地址锁存允许信号,输入,高电平有效。START:A/D转换启动信号,输入,高电平有效。2)ADC0809的引脚EOC:A/D转换结束信号,输出。当A/D转换结束时,该线脚输出高电平。OE:数据输出允许信号,输入,高电平有效。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ.REF+、REF-:基准电压输入端。Vcc:接+5V电源。GND:地。463)ADC0809的工作流程输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。送START一高脉冲,START的上升沿使逐

40、次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。当转换结束时,转换的结果送入到输出三态锁存器,并使EOC信号回到高电平,通知CPU已转换结束。当CPU执行一读数据指令,使OE为高电平,则从输出端D0D1读出数据。474)ADC0809与MCS-51单片机的接口P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALE WR P2.7RDINTO+5VGNDD0D1D2D3D4D5D6D7ADDAADDBADDCCLKALESTARTOEEOCIN0IN1IN2IN3IN4IN5IN6IN7 VREF+VREF-ADC08098051分频器2软件编程设接口电路用于一个

41、8路模拟量输入的巡回检测系统,使用中断方式采样数据,把采样转换所得的数字量按序存于片内RAM的30H37H单元中。采样完一遍后停止采集。48汇编语言编程:ORG 0003HLJMP INT0ORG 0100H ;主程序MOV R0,#30H ;设立数据存储区指针MOV R2,#08H ;设置8路采样计数值SETB IT0 ;设置外部中断0为边沿触发方式 SETB EA ;CPU开放中断SETB EX0 ;允许外部中断0中断MOV DPTR,#0000H ;送入口地址并指向IN0LOOP: MOVX DPTR,A ;启动A/D转换,A的值无意义HERE: SJMP HERE ;等待中断ORG 0

42、200H ;中断服务程序INT0: MOVX A,DPTR ;读取转换后的数字量MOV R0,A ;存入片内RAM单元INC DPTR ;指向下一模拟通道INC R0 ;指向下一个数据存储单元DJNZ R2,NEXT ;8路未转换完,则继续CLR EA ;已转换完,则关中断CLR EX0 ;禁止外部中断0中断RETI ;中断返回NEXT: MOVX DPTR,A ;再次启动A/D转换RETI ;中断返回49C语言编程:#include #include /定义绝对地址访问#define uchar unsigned char#define IN0 XBYTE0 x0000 /定义IN0为通道0

43、的地址static uchar data x8; /定义8个单元的数组,存放结果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转换for (;) ; /等待中断50void int_adc(void) interrupt 0 /中断函数xi=*ad_adr; /接收当前通道转换结果i+;ad_adr+; /指向下一个通道if (i8)*ad_adr=i; /8个通道未转换完,启动下一个通道返回elseE

44、A=0;EX0=0; /8个通道转换完,关中断返回51【例7-6】一路模拟输入经ADC0809实现A/D转换,并以LED指示灯表示数值的大小。外部输入IN0接一个模拟电压源,口地址为78FFH。MCS-51单片机可以采用无条件方式、查询方式、中断方式实现转换数据的读取。采集到的数据通过LED发光二极管定性指示。当采用无条件方式时,硬件电路可以将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; /读取数据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; /读取数据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; /读取数据ADC0809=0; /启动AD 558.4.1 D/A转换器概述1)D/A转换器的性能指标1分辨率。3线性度4温度灵敏度2建立时间2)D/A转换的分类按输入数字量的位数分:8位、10位、12位和16位等;按输入的数码分:二进制方式、BCD码方式;按传送数字量的方式分:并行方式和串行方式;按输出形式

47、分:电流输出型和电压输出型,电压输出型又有单极性和双极性;按与单片机的接口分:带输入锁存的和不带输入锁存的。无锁存DAC: DAC800、AD7520、AD7521有锁存DAC:DAC0832、DAC1210、AD7542、AD75498.4 MCS-51单片机与DAC的接口563)D/A转换器与单片机的连接 数据线的连接考虑两个问题:一是位数,当高于8位的D/A转换器与8位数据总线的单片机接口时,单片机的数据线必须分时输出;考虑:数据分时传送的格式、输出电压的“毛刺”问题;二是D/A转换器有无输入锁存器,当D/A转换器内部没有输入锁存器时,必须在单片机与D/A转换器之间增设锁存器。 地址线的

48、连接D/A转换器只有片选信号,而没有地址线。单片机的地址线采用全译码或部分译码,译码输出控制D/A转换器的片选信号,也可由一位I/O线来控制D/A转换器的片选信号。 控制线的连接 D/A转换器主要有片选信号、写信号及启动转换信号等,一般由单片机的引脚或译码器控制。 578.4.2 C51与DAC0832的接口1)DAC0832芯片 DAC0832是一种电流型D/A转换器,数字输入端具有双重缓冲功能.工作方式:双缓冲、单缓冲、直通方式输入。 与与与DI0DI7ILECSWR1WR2XFER输入寄存器DAC寄存器D/A转换器LE1LE2VREFRfbIOUT1IOUT2AGNDVCCDGNDDAC

49、0832582)DAC0832的引脚DAC0832有20引脚,采用双列直插式封装CSWR1AGNDDI3DI2DI2DI0VREF RFB DGNDVCCILEWR2XFERDI4DI5DI6DI7IOUT1IOUT21234567891020191817161514131211DI0DI7:8位数字量输入端。ILE:允许输入锁存线,高电平有效。:片选信号。 :写信号线1。:写信号线2。 IOUT1:模拟电流输出线1。IOUT2:模拟电流输出线2。Rfb:片内反馈电阻引出线VREF:基准电压输入线。电压范围为10V10V。VCC:工作电源输入端,可接5V15V电源。AGND:模拟地。DGND:

50、数字地。传送控制信号,低电平有效。593)DAC0832的工作方式DAC0832有三种方式:直通方式、单缓冲方式和双缓冲方式。直通方式:引脚 、 、 、 直接接地,ILE接电源时,DAC0832工作于直通方式。此时,8位输入寄存器和8位DAC寄存器都处于导通状态,8位数字量送到D/A的输入口,则直接进行DA转换,从输出端得到转换的模拟量。 单缓冲方式当引脚 、 、 、 时,使得两个缓冲器的一个处于导通状态、另一个处于受控状态,或者两个被控同时导通,DAC0832就工作于单缓冲方式。60Vout-VCCILECSWR1DI0DI7WR2 XFERDGND AGNDVREFRfbIOUT1IOUT2+5V-5V-A+ -P2.7WRP0.0P0.78051图7-22 单缓冲方式的连接图61双缓冲方式:当8位输入锁存器和8位DAC寄存器分开控制导通时,DAC0832工作于双缓冲方式。双缓冲方式时单片机对DAC0832的操作分两步:第一步,使8位输入锁存器导通,将8位数字量写入8位输入锁存器;第二步,使8位DAC寄存器导通,8位数字量从8位输入锁存器送入8位DAC寄存器。第二步只使DAC寄存器导通,在数据输入端写入的数据无意义。62当要求多个模拟量同时输出时,可采用双缓冲方式。63计算输出量为0CDH时,的输出。四DAC0832的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论