单片机轻松入门之五数码管的动态显示
上次说了数码管的静态显示,这次介绍动态显示。动态显示是每隔一段很小的时间依次点亮一个数码管,再利用人视觉的暂留效应,从而看起来数码管显示是连续的。相对而言,动态显示的电路、程序稍微复杂,但是可以节约单片机的接口资源。动态显示涉及位选和段选。位选就是选通显示的数码管,段选就是控制该片数码管所要显示的内容。
本次实验让4片数码管显示“1234”,实验中用到了74LS373锁存器。
实验原理图如下:
实验程序如下:
#include
#define uchar unsigned char;
#define uint unsigned int;
sbit du=P2^0; //位定义段选端
sbit we=P2^1; //位定义位选端
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段选数据表
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位选数据表
uchar i,j,z;
uint numd,numw;
void delay(z) //延时子函数
{
for(j=z;j>0;j--)
for(i=110;i>0;i--);
}
void display() //显示子程序
{
P0=tabledu[numd]; //控制段显示
delay(10);
du=1; //打开段选信号
du=0; //锁存信号
P0=tablewe[numw]; //控制位选
delay(10);
we=1; //打开位选信号
we=0; //锁存信号
numd++; //段选自加
if(numd==5)
numd=1;
numw++; //位选自加
if(numw==4)
numw=0;
}
void main()
{
numd=1;
numw=0;
while(1)
{
display(); //调用显示子程序
delay(30);
}
}
试验结果图:
仿真软件在截图时,老显示不全,所以图片上无法看出连续显示。但是在实验板上效果很好。
上一篇:51单片机入门之六:1602液晶显示
下一篇:51单片机入门之四:静态数码管
推荐阅读最新更新时间:2024-03-16 15:44