LED数码管显示接口一、LED数码管LED显示器的扩展(结构)LED数码管的结构:①共阳与共阴@单片机系统扩展LED数码管时多用共阳LED:共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。@通常每个段笔画要串一个数百欧姆的降压电阻。公共阳极hgfedcbaabcdgefh公共阴极hgfedcbaabcdgefhhgf……ahgf……a高电平点亮低电平点亮接高电平接地LED数码管的软件译码八段LED数码管段代码编码表(连线不同可有多种表):公共阳极hgfedcbaabcdgefh公共阴极hgfedcbaabcdgefhhgf……ahgf……a高电平点亮低电平点亮接高电平接地字形0123456789黑共阳0C00F90A40B09992820F880900FF共阴3F065B4F666D7D077F6F00LED数码管分类:按其内部结构可分为共阴型和共阳型;按其外形尺寸有多种形式,使用较多的是0.5和0.8;按显示颜色也有多种形式,主要有红色和绿色;正向压降一般为1.5~2V,额定电流为10mA,最大电流为40mA。静态显示时取10mA为宜,动态扫描显示,可加大脉冲电流,但一般不超过40mA。按亮度强弱可分为超亮、高亮和普亮。二、LED数码管编码方式表1共阴和共阳LED数码管几种八段编码表显示数字共阴顺序小数点暗共阴逆序小数点暗共阳顺序小数点亮共阳顺序小数点暗Dpgfedcba16进制abcdefgDp16进制0001111113FH11111100FCH40HC0H10000011006H0110000060H79HF9H2010110115BH11011010DAH24HA4H3010011114FH11110010F2H30HB0H40110011066H0110011066H19H99H5011011016DH10110110B6H12H92H6011111017DH10111110BEH02H82H70000011107H11100000E0H78HF8H8011111117FH11111110FEH00H80H9011011116FH11110110F6H10H90H【例1】已知显示数存在无符号整型数count中,试将其转换为5位共阴字段码(顺序),存在无符号字符型数组buffer中。⑴从显示数中分离出显示的每一位数字方法是将显示数除以十进制的权显示数转换为显示字段码的步骤:⑵将分离出的显示数字转换为显示字段码方法是查表三、静态显示方式及其典型应用电路⑵动态显示方式,在某一瞬时显示一位,依次循环扫描,轮流显示,由于人的视觉滞留效应,人们看到的是多位同时稳定显示。特点:占用I/O端线少,电路较简单,编程较复杂,CPU要定时扫描刷新显示。一般适用于显示位数较多的场合。LED数码管显示分类:静态显示方式和动态显示方式。⑴静态显示方式,每一位字段码分别从I/O控制口输出,保持不变直至CPU刷新。特点:编程较简单,但占用I/O口线多,一般适用于显示位数较少的场合。LED显示器的扩展(显示方式)静态显示特点:无闪烁,用元器件多,占I/O线多,无须扫描,节省CPU时间,编程简单。静态显示:各数码管在显示过程中持续得到送显信号,与各数码管接口的I/O口线是专用的。1、并行扩展静态显示电路2、串行扩展静态显示电路要求:根据上图编写通过串行口和74LS164驱动共阳LED数码管查表显示的子程序。条件:系统有6个LED数码管,待显数据(00H—09H)已放在35H—30H单元中(分别对应十万位→个位),DSPLY:MOVDPTR,#TABLE;共阳LED数码管译码表首址MOVR0,#30H;待显数据缓冲区的个位地址REDO:MOVA,@R0;通过R0实现寄存器间接寻址MOVCA,@A+DPTR;查表MOVSBUF,A;经串行口发送到74LS164JNBTI,$;查询送完一个字节的第8位?CLRTI;为下一字节发送作准备INCR0;R0指向下一个数据缓冲单元CJNER0,#36H,REDO;判断是否发完6个数?RET;发完6个数就返回TABLE:DB0C0H,0F9H,0A4H,0B0H,99H;共阳LED译码表DB92H,82H,0F8H,80H,90H动态显示电路连结形式:①显示各位的所有相同字段线连在一起,共8段,由一个8位I/O口控制;②每一位的公共端(共阳或共阴COM)由另一个I/O口控制。四、动态显示方式及其典型应用电路动态显示特点:有闪烁,用元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂。(有多个LED时尤为突出)动态显示:各数码管在显示过程中轮流得到送显信号,与各数码管接口的I/O口线是共用的。LED数码管动态显示举例P1.5P1.4P1.3P1.2P1.2P1.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.07406OC门X3上拉电阻×14+5VAT89C51工作原理:从P0口送段代码,P1口送位选信号。段码虽同时到达6个LED,但一次仅一个LED被选中。利用“视觉暂留”,每送一个字符并选中相应位线,延时一会儿,再送/选下一个……循环扫描即可。共阴数码管位选线段代码P1.5P1.4P1.3P1.2P1.2P1.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.07406OC门X3+5VAT89C51位选线段代码要求:此处为共阴数码管,P0口送段代码,P1口送位选信号。通过查表实现动态显示。条件:待显数据(00H—09H)已放在:7FH—7AH单元中(分别对应十万位~个位)说明:由于用了反相驱动器7406,要用共阳译码表。共阴数码管上拉电阻×147406OC门X3+5V(7FH)(7EH)(7DH)(7CH)(7BH)(7AH)十万万位千位百位十位个位数据缓冲区/显示缓冲区P0口送段代码,P1口送位选信号。待显数据已经放在:7FH—7AH单元(分别对应十万位→个位)使用共阳译码表。DIR:MOVDPTR,#DSEG;数码管译码表首址MOVR0,#7AH;待显缓冲区个位地址MOVR3,#01H;个位的位选信号=01HLD1:MOVA,@R0;通过R0间接寻址MOVCA,@A+DPTR;查表MOVP0,A;字段码送到P0口MOVP1,R3;字位选择送到P1口LCALLDELY;调延时1ms子程序INCR0;R0指向下一字节MOVA,R3JBACC.5,LD2;判是否发完6个数?RLA;R1指向下一个位MOVR3,A;位选信号存回R1SJMPLD1;跳去再显示下一个数LD2:RET;发完6个数就返回DSEG:DB0C0H,0F9H,0A4H,0B0H,99H;共阳译码表DB92H,82H,0F8H,80H,90HP0口送段代码,P1口送位选信号。待显数据已经放在:7FH—7AH单元(分别对应十万位→个位)使用共阳译码表。动态显示举例(循环显示“8”的实验)实验箱从P0口扩展了两个8位的简单I/O口:一个送段代码(字形状),地址是0DCH;一个送位选信号(字位置),地址是0DDH。ORG0000HMOVR0,#0DCH;指向字形口MOVA,#80H;送“8”的字形代码MOVX@R0,A;输出字形代码MOVR1,#0DDH;指向字位口MOVA,#20H;从最高位开始LEDO:MOVX@R1,A;输出字位代码ACALLDEYS;调延时子程序RRA;右移一位SJMPLEDO;循环显示“8”1、共阴型8位动态显示电路DIR4:MOVR2,#10;置循环扫描次数MOVDPTR,#7FFFH;置74377口地址DLP1:ANLP1,#11111000B;第0位先显示MOVR0,#30H;置显示字段码首址DLP2:MOVA,@R0;读显示字段码MOVX@DPTR,A;输出显示字段码LCALLDY2ms;调用延时2ms子程序(参阅例4.13)INCR0;指向下一位字段码INCP1;选通下一位显示CJNER0,#38H,DLP2;判8位扫描显示完否?未完继续DJNZR2,DLP1;8位扫描显示完毕,判10次循环完否?CLRA;10次循环完毕,显示暗MOVX@DPTR,A;RET;子程序返回【例9-5】按图9-7,试编制循环扫描(10次)显示子程序,已知显示字段码存在以30H(低位)为首址的8字节内RAM中。解:编程如下:2、共阳型3位动态显示电路DIR5:MOVDPTR,#0BFFFH;置74377地址MOVR2,#100;置循环显示次数DIR50:SETBP1.2;百位停显示MOVA,40H;取个位字段码MOVX@DPTR,A;输出个位字段码CLRP1.0;个位显示LCALLDY2ms;调用延时2ms子程序(参阅例4.13)DIR51:SETBP1.0;个位停显示MOVA,41H;取十位字段码MOVX@DPTR,A;输出十位字段码CLRP1.1;十位显示LCALLDY2ms;延时2msDIR52:SETBP1.1;十位停显示MOVA,42H;取百位字段码MOVX@DPTR,A;输出百位字段码CLRP1.2;百位显示LCALLDY2ms;延时2msDJNZR2,DIR50;判循环显示结束否?未完继续ORLP1,#00000111B;3位灭显示RET;【例9-6】根据图9-8电路,试编制3位动态扫描显示程序(循环100次),已知显示字段码存在以40H(低位)为首址的3字节内RAM中。解:编程如下: