《C51与显示器LED的接口设计.ppt》由会员分享,可在线阅读,更多相关《C51与显示器LED的接口设计.ppt(29页珍藏版)》请在三一办公上搜索。
1、第10章 89C51与键盘、显示器、拨盘、打印机的接口设计,输入外设:键盘、BCD码拨盘等;输出外设:LED显示器、LCD显示器、打印机等。10.1 LED显示器接口原理LED(Light Emitting Diode):发光二极管的缩写。显示器前面冠以“LED”。10.1.1 LED显示器的结构常用的LED显示器为8段(或7段,8段比7段多了一个小数点“dp”段)。有共阳极和共阴极两种。如图10-1所示。,图10-1,LED显示器的扩展(结构),LED数码管的结构:共阳与共阴,单片机系统扩展LED数码管时多用共阳LED:共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴
2、数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。通常每个段笔画要串一个数百欧姆的降压电阻。,公共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,公共阴极,h g f e d c b a,a,b,c,d,g,e,f,h,h g f a,h g f a,高电平点亮,低电平点亮,接高电平,接地,LED数码管的译码:硬件译码与软件译码,硬件译码特点:采用专用的译码/驱动器件,驱动功率较大;增加了硬件的开销;软件编程简单;字型固定(比如:只有七段,只可译数字,字型不好看)。,共阴LED,a,b,c,d,g,e,f,h,gfedcb a,DCBA,CD4511,AT89C5
3、1,74LS48/CD4511是“BCD码七段共阴译码/驱动”IC;74LS47是“BCD码七段共阳译码/驱动”IC,LED显示器的扩展(结构),LED显示器的扩展(软件译码),LED数码管的译码:软件译码,软件译码特点:不用专用的译码/驱动器件,驱动功率较小;不增加硬件的开销;软件编程较复杂;字型灵活(比如:有八段,只可译多种字符,字型好看)。,共阳LED,a,b,c,d,g,e,f,h,+5V,AT89C51,硬件译码特点:采用专用译码/驱动器件,驱动功率较大;增加了硬件的开销;软件编程简单;字型固定(比如:只有七段,只可译数字,字型不好看)。,LED数码管的软件译码,八段LED数码管段代
4、码编码表(连线不同可有多种表):,公共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,公共阴极,h g f e d c b a,a,b,c,d,g,e,f,h,h g f a,h g f a,高电平点亮,低电平点亮,接高电平,接地,LED数码管分类:,按其内部结构可分为共阴型和共阳型;,按其外形尺寸有多种形式,使用较多的是0.5和0.8;,按显示颜色也有多种形式,主要有红色和绿色;,正向压降一般为1.52V,额定电流为10mA,最大电流为40mA。静态显示时取10mA为宜,动态扫描显示,可加大脉冲电流,但一般不超过40mA。,按亮度强弱可分为超亮、高亮和普亮。,N个LED
5、显示块有N位位选线和8N根段码线。段码线控制显示的字型,位选线控制该显示位的亮或暗。,10.1.2 LED显示器工作原理图10-2是4位 LED显示器的结构原理图。,图10-2,静态显示和动态显示两种显示方式。LED静态显示方式各位的公共端连接在一起(接地或+5V)。每位的段码线(adp)分别与一个8位的锁存器输出相连。显示字符一确定,相应锁存器的段码输出将维持不变,直到送入另一个段码为止。显示的亮度高。图10-3:4位静态LED显示器电路。该电路各位可独立显示,2.LED动态显示方式所有位的段码线相应段并在一起,由一个8位I/O口控制,形成段码线的多路复用,各位的公共端分别由相应的I/O线控
6、制,形成各位的分时选通。图10-4:4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。,图10-5为8位LED动态显示200的过程。,图(a)是显示过程,某一时刻,只有一位LED被选通显示,其 余位则是熄灭的;,图(b)是实际显示结果,人眼看到的是8位稳定的同时显示 的字符。,图10-5,1、并行扩展静态显示电路,应用:静态显示电路,【例1】按上图编制显示子程序,显示数(255)存在内RAM 30H中。,DIR1:MOV A,30H;读显示数 MOV B,#100;置除数 DIV AB;产生百位显示数字 MOVC A,A+DPTR;读百位显示符 MOV
7、DPTR,#0DFFFH;置74377(百位)地址 MOVX DPTR,A;输出百位显示符 MOV A,B;读余数 MOV B,#10;置除数 DIV AB;产生十位显示数字 MOV DPTR,#TAB;置共阳字段码表首址 MOVC A,A+DPTR;读十位显示符 MOV DPTR,#0BFFFH;置74377(十位)地址 MOVX DPTR,A;输出十位显示符 MOV A,B;读个位显示数字 MOV DPTR,#TAB;置共阳字段码表首址 MOVC A,A+DPTR;读个位显示符 MOV DPTR,#7FFFH;置74377(个位)地址 MOVX DPTR,A;输出个位显示符 RET;TAB
8、:DB 0C0H,0F9H,0A4H,0B0H,99H;共阳字段码表 DB 92H,82H,0F8H,80H,90H;,2、串行扩展静态显示电路,DIR2:MOV SCON,#00H;置串口方式0 CLR ES;串口禁中 SETB P1.0;“与”门开,允许TXD发移位脉冲 MOV SBUF,30H;串行输出个位显示字段码 JNB TI,$;等待串行发送完毕 CLR TI;清串行中断标志 MOV SBUF,31H;串行输出十位显示字段码 JNB TI,$;等待串行发送完毕 CLR TI;清串行中断标志 MOV SBUF,32H;串行输出百位显示字段码 JNB TI,$;等待串行发送完毕 CLR
9、 TI;清串行中断标志 CLR P1.0;“与”门关,禁止TXD发移位脉冲 RET;,【例2】按上图编制显示子程序,显示字段码已分别存在32H30H内RAM中。,解:,要求:根据上图编写通过串行口和74LS164驱动共 阳LED数码管查表显示的子程序。条件:系统有6个LED数码管,待显数据(00H09H)已放在35H30H单元中(分别对应十万位个位),,DSPLY:MOV DPTR,#TABLE;共阳LED数码管译码表首址 MOV R0,#30H;待显数据缓冲区的个位地址REDO:MOV A,R0;通过R0实现寄存器间接寻址 MOVC A,A+DPTR;查表 MOV SBUF,A;经串行口发送
10、到74LS164 JNB TI,$;查询送完一个字节的第8位?CLR TI;为下一字节发送作准备 INC R0;R0指向下一个数据缓冲单元 CJNE R0,#36H,REDO;判断是否发完6个数?RET;发完6个数就返回TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H;共阳LED译码表 DB 92H,82H,0F8H,80H,90H,3、BCD码输出静态显示电路,CD4511是“BCD码七段共阴译码/驱动”IC;4511是4线-7段锁存/译码/驱动电路,能将BCD码译成7段显示符输出。图中:4511 ABCD为09二进制数输入端(A是低位),abcdefg为显示段码输出端,LE
11、为输入信号锁存控制(低电平有效),数码管为共阴数码管。,利用4511实现静态显示与一般静态显示电路不同,一是节省I0端线,段码输出只需4根;二是不需专用驱动电路,可直接输出;三是不需译码,直接输出二进制数,编程简单;缺点是只能显示数字,不能显示各种符号。,解:编程如下:DIR3:MOV P1,#11100000B;选通个位 ORL P1,30H;输出个位显示数 MOV P1,#11010000B;选通十位 ORL P1,31H;输出十位显示数 MOV P1,#10110000B;选通百位 ORL P1,32H;输出百位显示数 RET;,【例4】按图9-5试编制显示子程序(小数点固定在第二位),
12、已知显示数存在内RAM 30H32H中。,动态显示电路连结形式:显示各位的所有相同字段线连在一起,共8段,由一个8位I/O口控制;每一位的公共端(共阳或共阴COM)由另一个I/O口控制。,应用:动态显示方式及其典型应用电路,LED数码管动态显示举例,P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0,7406 OC门 X 3,上拉电阻14,+5V,AT89C51,工作原理:从P0口送段代码,P1口送位选信号。段码虽同时到达 6个LED,但一次仅一个LED被选中。利用“视觉暂留”,每送一个字符并选中相应位线,延时一会儿,再送/选下一个循环扫描即可。,共阴 数码管,位选
13、线,段代码,P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0,7406 OC门 X 3,+5V,AT89C51,位选线,段代码,要求:此处为共阴数码管,P0口送段代码,P1口送位选信号。通过查表实现动态显示。条件:待显数据(00H09H)已放在:7FH7AH单元中(分别对应十万位个位)说明:由于用了反相驱动器7406,要用共阳译码表。,共阴 数码管,上拉电阻14,7406 OC门 X 3,+5V,(7FH)(7EH)(7DH)(7CH)(7BH)(7AH)十万 万位 千位 百位 十位 个位,数据缓冲区/显示缓冲区,P0口送段代码,P1口送位选信号。待显数据已经放在
14、:7FH7AH单元(分别对应十万位个位)使用共阳译码表。,DIR:MOV DPTR,#DSEG;数码管译码表首址 MOV R0,#7AH;待显缓冲区个位地址 MOV R3,#01H;个位的位选信号=01HLD1:MOV A,R0;通过R0间接寻址 MOVC A,A+DPTR;查表 MOV P0,A;字段码送到P0口 MOV P1,R3;字位选择送到P1口 LCALL DELY;调延时1ms子程序 INC R0;R0 指向下一字节 MOV A,R3 JB ACC.5,LD2;判是否发完6个数?RL A;R1指向下一个位 MOV R3,A;位选信号存回R1 SJMP LD1;跳去再显示下一个数LD
15、2:RET;发完6个数就返回DSEG:DB 0C0H,0F9H,0A4H,0B0H,99H;共阳译码表 DB 92H,82H,0F8H,80H,90H,P0口送段代码,P1口送位选信号。待显数据已经放在:7FH7AH单元(分别对应十万位个位)使用共阳译码表。,1、共阴型8位动态显示电路,DIR4:MOV R2,#10;置循环扫描次数 MOV DPTR,#7FFFH;置74377口地址DLP1:ANL P1,#11111000B;第0位先显示 MOV R0,#30H;置显示字段码首址DLP2:MOV A,R0;读显示字段码 MOVX DPTR,A;输出显示字段码 LCALL DY2ms;调用延时
16、2ms子程序(参阅例4.13)INC R0;指向下一位字段码 INC P1;选通下一位显示 CJNE R0,#38H,DLP2;判8位扫描显示完否?未完继续 DJNZ R2,DLP1;8位扫描显示完毕,判10次循环完否?CLR A;10次循环完毕,显示暗 MOVX DPTR,A;RET;子程序返回,【例5】按上图,试编制循环扫描(10次)显示子程序,已知显示字段码存在以30H(低位)为首址的8字节内RAM中。解:编程如下:,2、共阳型3位动态显示电路,DIR5:MOV DPTR,#0BFFFH;置74377地址 MOV R2,#100;置循环显示次数DIR50:SETB P1.2;百位停显示
17、MOV A,40H;取个位字段码 MOVX DPTR,A;输出个位字段码 CLR P1.0;个位显示 LCALL DY2ms;调用延时2ms子程序(参阅例4.13)DIR51:SETB P1.0;个位停显示 MOV A,41H;取十位字段码 MOVX DPTR,A;输出十位字段码 CLR P1.1;十位显示 LCALL DY2ms;延时2msDIR52:SETB P1.1;十位停显示 MOV A,42H;取百位字段码 MOVX DPTR,A;输出百位字段码 CLR P1.2;百位显示 LCALL DY2ms;延时2ms DJNZ R2,DIR50;判循环显示结束否?未完继续 ORL P1,#00000111B;3位灭显示 RET;,【例6】根据上图,试编制3位动态扫描显示程序(循环100次),已知显示字段码存在以40H(低位)为首址的3字节内RAM中。解:编程如下:,