当显示位数较多时,静态显示所需的I/O口太多,这时常采用动态显示方式。动态显示方式是将所以LED数码管的段码端的相应段并接在一起,由一个8位I/O口控制,而各位显示位的公共端分别由I/O线控制,称为位选端。
需求:运用51单片机实现8位8段数码管的动态数字显示,LE数码管的段选信号由51单片机的P0口控制,LED数码管的位选信号由51单片机P2口的低3位控制,8位LED数码管显示0-7这8个十进制数。
效果:
动态数码管
代码:
#include<reg52.h>
#define uchar unsigned char
uchar code seg[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义了一个名为seg的数组,存储了共阴极数码管显示 0 - 9 数字所需的段码
uchar dis[8]={0,1,2,3,4,5,6,7}; //定义了一个名为dis的数组,可能用于选择数码管的位。这里初始化为 0 - 7
//.延时函数
void delayms(uchar ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
//主函数
void main(void)
{
unsigned char i;
while(1)
{ for (i=0;i<8;i++)
{
P0=seg[i];//将seg[i]赋值给P0口。这里P0口可能连接数码管的段选引脚,用于控制数码管显示的数字
P2=dis[i];//将dis[i]赋值给P2口。这里P2口可能连接数码管的位选引脚,用于选择要显示的数码管。
delayms(3);
}
}
}