51单片机数码管动态刷新显示程序封装为一个函数,主函数调用从00000001依次加1显示到99999999

编写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);
	}
		

}

发布了9 篇原创文章 · 获赞 7 · 访问量 1767

猜你喜欢

转载自blog.csdn.net/weixin_44906810/article/details/102768587