编写51单片机数码管显示程序是一个最基础的学习过程,难度也不大,以前也写过很多次,此次老师要求将显示函数程序封装起来用主函数调用,这时就会有一个问题,即数码管动态显示需要快速的动态扫描,但是又不想要主函数那么快速地发送,当然使用中断就可以解决,但是奈何老师就是不允许使用中断(因为我们并没有学习到中断)。
刚开始一直在调试延时函数,天真地认为只要不断调试一定可以成功,但是后来想想这是不现实的,必须另想办法。
于是,可以用一个for循环,一直不断地重复发送。哈哈哈哈
for(num=1;num<100000000;num++)
{
for(i=0;i<=50;i++)//在不影响动态扫描的情况下重复发送
{
display(num);
}
delay(5);
}`
不知道大家有没有遇到这样的问题,又是怎样解决的。以下是完整代码。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define ulong unsigned long
#define uchar unsigned char
sbit we=P2^7;
sbit du=P2^6;
uchar ledtable[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void display(ulong number)
{
int i=0;
while(number)
{
P0=_cror_(0X7F,i);
we=1;
we=0;
P0=ledtable[number%10];
du=1;
du=0;
delay(5);
P0=0x0;
du=1;
du=0;
number=number/10;
i++;
if(i==8) i=0;
}
}
void main()
{
ulong num;
int i;
for(num=1;num<100000000;num++)
{
for(i=0;i<=50;i++)
{
display(num);
}
delay(5);
}
}