图(b)为数码管的解剖图,分别是共阴和共阳型;共阴为例,若想显示数字1,从a端到dp端接P0^0~~P0^7;所以P0=0x06(00000110{从高位到低位});
显示方式:
静态显示:
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。
动态显示:
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
一个共阴数码管
段选是控制数码管的显示什么数字,而位选是控制那个数码管的;
数码管下面有空心那是反向器,也就是说P3^0输入高电平通过反向器后会变成低电平,数码管接的就是低电平了;
单片机的电流是不足以对数码管进行供电的(数码管所需电流大于单片机的电流),所以要接一个数字芯片(起着放大作用);、
如果是静态显示的话,这5个数码管都会显示同一个数字,不比动态显示灵活;
74HC138译码器
ABC表示加权,也就是说A为1是表示1,B为1是表示2,C为1是表示4,其控制着位选;
当你看到数码管同时显示12345时不要以为是同时点亮的,CPU同一时间只能做一件事,你所看到的同时亮是利用了视觉的的暂留和数码管的余晖,数码管是不会一下子熄灭而是慢慢地熄灭;
#include <reg52.h>
sbit smgen=P2^3;
sbit rs=P3^6;
unsigned char table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};
unsigned char table2[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70};
void delay(unsigned int a)
{
while(a--);
}
void main()
{
unsigned char i;
rs=0;
while(1)
{
for(i=0;i<8;i++)
{
P2=table2[i];
smgen=1;
P1=table1[i];
delay(200);
}
}
}
P3^6一定要拉低,如果不拉低,时钟芯片就在工作,从而影响程序,会出现不完整显示