仿真图:
代码:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar num=5;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极数码管段码
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位选码
void delay(uint z) //延迟函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main(){ //主函数
uint i;
while(1){ //动态刷新
for(i=0;i<8;i++){ //逐位显示
P2=wei[i];
P0=table[i+1];
delay(5);
if(i==8)
i=-1;
}
}
}
解析:
数码管的显示是单片机中最基本的功能,一般分为动态显示和静态显示,动态显示的原理就是利用人眼的视觉残留现象快速刷新数码管显示的内容来进行眼中不变的数字显示,一般分为三部分,①是位选码和段选码,位选码根据位选的接口来确定,段选码根据选用的是共阳极数码管还是共阴极数码管来确定。②是延迟部分,正常的延迟函数即可,最好带参数便于调试。③是显示函数,一般通过for循环来逐位输出,并通过while循环来进行动态刷新,一般使用中会用到锁存器进行信号的锁存,避免陷入死循环中