(十一)c52学习之旅-动态数码管
一、动态数码管显示原理
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
二、动态刷新
刷新频率>50HZ,我们就感觉不到闪烁了,即低于0.02秒(20毫秒)。
所谓动态扫描显示是指轮流向各位数码管送出段选(字形码)和位选,由于人眼的视觉残留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要低,所以在选择限流电阻时应小于静态显示电路中的。
三、6个数码管显示0-5的数字
如下图显示
下面为演示的代码
#include<reg52.h>
#define uint8 unsigned char
//段选锁存控制位p2.6 位选锁存控制位p2.7
sbit DU=P2^6;
sbit WE=P2^7;
//数码管0-9的16进制
uint8 num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x70,0x7f,0x5f};
//位选6个数码管
uint8 smg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
int flag=0;
void init_t0()
{
TMOD=0X01 ;//0000 0001 定时器T0方式1
/*设定初始数值,16位*/
//溢出一次大概3ms 用到了6个数码管,所以20/6约等于3,即延时定在3毫秒
TH0=0Xf4;
TL0=0x48;
ET0=1;//打开定时器开关
EA=1;//打开中断总开关
TR0=1;//开始启动计数器 =0关闭停止计数
}
void main()
{
init_t0();
while(1);
}
void Delay3ms() interrupt 1 //延迟3ms
{
TR0=0;//此时溢出,停止计数
TH0=0Xf4;
TL0=0x48;
DU=1;//打开段选
P0=num[flag];
DU=0;//关闭段选
WE=1;//打来位选
P0=smg[flag];
WE=0;//关闭位选
if(flag++==5)
flag=0;
TR0=1;//开始计数
}