先在proteus里画好电路图
稍微了解一下原理
1.动态显示数码管本质是靠数码管快速切换,利用人的视觉残留而产生同时显示的错觉。下面是将程序放慢显示后的样子。可以看到每个数字是独立显示的。
?2.位码的意思是控制当前的数码管显示的第几位。
再看代码
1.开头的声明?
?2.动态显示数码管
最后把完整代码放进来
#include "reg52.h"
#define u8 unsigned char
#define u16 unsigned int
u8 code duanSMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
u8 code weiSMG[]={0x01,0x02,0x04,0x08};
u16 num[4]={0,9,2,0};
u16 count;
sbit duan=P3^6;
sbit wei=P3^7;
void delay()
{
u16 i=100;
while(i)
{
i--;
}
while(count<1);
}
void display()
{
u16 t;
for(t=0;t<4;t++)
{
wei=0;
duan=1;
P0=0xff;
P0=duanSMG[num[t]];
wei=1;
duan=0;
P2=weiSMG[t];
wei=0;
duan=0;
delay();
}
}
void main(void)
{
while(1)
{
display();
}
}
?
|