数码管动态扫描过程
在数码管动态扫描的实现中,一般采用共阳或共阴极的数码管。通过微控制器或其他电子设备的驱动,依次点亮每个数码管的每个段,同时关闭其他数码管的所有段。当每个数码管的段都被扫描并点亮后,再继续扫描下一个数码管。这样,数码管将连续显示多个数字,从而实现动态的数字显示效果。在某一时段,只让其中一位数码管“位选端”有效,并送出相应的字型显示编码。此时,其它位的数码管因“位选端”无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。
#include "reg51.h"//头文件 桥梁
sbit w1=P2^0;//位选端,选择哪个数码管亮起来
sbit w2=P2^1;
sbit w3=P2^2;
sbit w4=P2^3;
char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90};//数码管显示字符码
void delay(); //延时函数 子函数的声明
void main()
{
while(1)
{
P0=led[1];//送1的数据到端口
w1=1; //控制显示的位置(共阳极 1就选中亮起来 0的未选中,灭)
w2=0;
w3=0;
w4=0;
delay();//延时
P0=0XFF;//场消隐,就是让数码管不亮
P0=led[2];
w1=0;
w2=1;
w3=0;
w4=0;
delay();
P0=0XFF;//场消隐,就是让数码管不亮
P0=led[3];
w1=0;
w2=0;
w3=1;
w4=0;
delay();
P0=0XFF;//场消隐,就是让数码管不亮
P0=led[4];
w1=0;
w2=0;
w3=0;
w4=1;
delay();
P0=0XFF;//场消隐,就是让数码管不亮
}
}
void delay()
{
unsigned int i=400;
while(i--);
}
图一 数码管动态显示完整代码
图二 数码管动态显示仿真显示
利用P0端作为数据输出端,P2^0/ P2^1/P2^2/P2^3作为位选端,实现单片机控制显示1234的动态显示。其中最为重要的一点是场消隐(就是让数码管不显示)