单片机的显示LED数码管显示•数码管在仪器仪表中有着广泛的用途,如万用表、转速表等。•显示单片机的输出数据、状态等。•具备数字接口,可以很方便地和单片机系统连接。•体积小、重量轻、功耗低,是一种理想的显示单片机数据输出内容的器件。abcdegGNDfdpGNDabcefgd·dpabcdefgdpdpgfedcba+5V(a)(b)•使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。共阴数码管码表•0x3f,0x06,0x5b,0x4f,0x66,0x6d,•012345•0x7d,0x07,0x7f,0x6f,0x77,0x7c,•6789Ab•0x39,0x5e,0x79,0x71,0x00•CdEF无显示共阳极数码管码表•0xc0,0xf9,0xa4,0xb0,0x99,0x92,•012345•0x82,0xf8,0x80,0x90,0x88,0x83,•6789AB•0xc6,0xa1,0x86,0x8e,0xff•CDEF无显示静态显示方式LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制,显示稳定而具有较高亮度。缺点是硬件电路比较复杂,成本较高。动态显示动态显示(拉幕式数码显示技术)的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。静态显示、动态显示各有利弊•静态:数据显示稳定、占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;•动态:需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多,但使用硬件少,能节省线路板空间。•简单系统中,为降低成本,选用动态显示动态显示举例:显示5678•#includereg51.h•#defineucharunsignedchar•unsignedcharcodetable1[]={•0xc0,0xf9,0xa4,0xb0,•0x99,0x92,0x82,0xf8,•0x80,0x90,0x88,0x83,•0xc6,0xa1,0x86,0x8e};unsignedintnum;•ucharcount;•delay(ucharx)•{•uchara,b;•for(a=x;a0;a--)•for(b=255;b0;b--);•}•display(ucharqian,ucharbai,ucharshi,ucharge)•{•P0=table1[qian];•P10=1;//选通该位•P14=0;•delay(1);•P0=table1[bai];•P14=1;•P13=0;•delay(1);•P0=table1[shi];•P13=1;•P12=0;•delay(1);•P0=table1[ge];•P12=1;•P11=0;•delay(1);•}•voidmain()•{•num=5678;•while(1)•{•display(num/1000,num/100%10,num/10%10,num%10);•}•}做显示电路时有可能会遇到的问题•1.重影问题:•(1)问题重放:•显示过程中,显示管显示的内容无法看清,主要体现在有重影的存在。•(2)分析原因:•这是因为硬件锁存的存在,上一位的结果被锁存了,在片选后,也被显示在选中的位上.•(3)解决方案:•只要在片选前将锁存的结果清除,即可消除这个影响.代码中的体现:在display函数中加入P0=0xff;即,清除上一位结果。若去掉将数码灭掉的那4行代码,显示效果将如下:而最理想的效果应如下:•2.显示亮度不够问题:•(1)问题重放:•LED数码管的显示亮度不够。•(2)分析原因:•如果程序很复杂,有大量的时间要处理其他运算.而显示的时延太小,造成这两者之间,显示时间的占空比明显偏小。显示亮度不够.•(3)解决方案:•在不影响其他运算的情况下,增加显示的次数。代码实现如下:•for(i=20;i0;i--)•{•display(a1,b1,c1,d1,a2,b2,c2,d2);•}•更好的方法是可将LED扫描显示改用定时中断,这样,不管处理多长的程序都不影响显示,留做课后思考…综合练习•在学习板上设计一个00-59秒计时器•要求:•1、使用定时/计数器•2、使用两位数码管显示定时计数器应用的基本方法•1.向TMOD写入工作方式;•2.向计数器TL,TH装入初值;•3.置EA=1,CPU开中断;•4.置ETx=1,允许定时/计数器中断;•5.TRx=1,启动计数;复习:定时/计数器的方式寄存器TMODTMOD.7TMOD.6TMOD.5TMOD.4TMOD.3TMOD.2TMOD.1TMOD.0GATEC/TM1M0GATEC/TM1M0TMOD的控制字•设定:TMOD=0x10;(TMOD不能位寻址,只能按字节操作设置工作方式)•表明是用定时器T1,•C/T=0,设置为定时器方式;•工作方式为:方式1(16位计数器),•GATE门控=0:只是用软件的方法对TR1置1,就能启动定时器。复习:控制寄存器TCONTCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0TF1TR1TF0TR0IE1IT1IE0IT0TCON的控制字TCON高4位用于控制定时器的启动,停止等;低4位两个外部中断;可位寻址;TR1=1;启动定时器;TR1=0:停止定时器;复习:中断允许寄存器IEIE.7IE.6IE.5IE.4IE.3IE.2IE.1IE.0EAXXESET1EX1ET0EX0IE中的控制字中断的开放和屏蔽,是由片内的中断允许寄存器IE控制的(IE可位寻址)EA=1:总开关,CPU的中断开放;ET1=1;允许或禁止定时/计数器1溢出中断。•voidmain()•{EA=1;•ET1=1;•TMOD=0x10;•TH1=(65536-50000)/256;•TL1=(65536-50000)%256;•TR1=1;•while(1)•{•display(num/10,num%10);•if(count==20)•{•count=0;•num++;•if(num==60)num=0;•}•}•}•voidtim1()interrupt3•{•TH1=(65536-50000)/256;•TL1=(65536-50000)%256;•count++;•}课后练习•自制电压表•用ADC0809模块+显示模块做一个数字电压表.