51 MCUデジタルチューブダイナミックリフレッシュディスプレイプログラムは関数としてパッケージ化されており、メイン関数呼び出しは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