digtaled.c.bak

来自「用keil写89c51的显示数码管的程序」· BAK 代码 · 共 108 行

BAK
108
字号
#include <reg52.h>

#define BYTE unsigned char
#define WORD unsigned int

sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;

sbit DLEDcs1=P2^2;
sbit DLEDcs2=P2^3;
sbit DLEDcs3=P2^1;
sbit DLEDcs4=P2^0;

BYTE const DLEDcodeA[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
BYTE Testdata;

void Delay(WORD i)
{
	while(i--);
}

//动态显示
void DLEDdispNumA(WORD XNum)
{
	WORD Num,i=10;
	XNum%=10000;	
	while(i--)
	{
		Num=XNum;
		DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num/1000];DLEDcs1=0;Num%=1000;Delay(0x100);
		DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num/100];DLEDcs2=0; Num%=100; Delay(0x100);
		DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num/10];DLEDcs3=0;  Num%=10;  Delay(0x100);
		DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num];DLEDcs4=0;               Delay(0x100);
		DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;	
	}
}

//静态单数码管显示
void DispSS(BYTE Num)
{
	P0=0xff;Num%=10;
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num];DLEDcs1=0;
}
//静态四数码管显示
void DispSF(BYTE Num)
{
	P0=0xff;Num%=10;
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;
	P0=DLEDcodeA[Num];
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=0;	
}
//静态四数码管移动显示
void DispMF(BYTE Num)
{
	P0=0xff;Num%=10;
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num];DLEDcs1=0;Delay(0x2000);
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num];DLEDcs2=0;Delay(0x2000);
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num];DLEDcs3=0;Delay(0x2000);
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;P0=DLEDcodeA[Num];DLEDcs4=0;Delay(0x2000);
	DLEDcs1=DLEDcs2=DLEDcs3=DLEDcs4=1;
}

void timer0() interrupt 1 using 1 
{
	TH0=0x4c;TL0=0x00;
	Testdata++;
}

main()
{
	WORD i;
	P0=0xff;//熄掉所有发光二极管
	P2=0xff;//关闭数码管显示
	
	TMOD=0x01;      
   
	while(1)
	{
		//静态单数码管显示
		for(i=0;i<10;i++)
		{DispSS(i);Delay(0xf000);}
		P2=0xff;Delay(0x8000);//关闭数码管显示
		for(i=0;i<10;i++)
		{DispSF(i);Delay(0xf000);}
		P2=0xff;Delay(0x8000);//关闭数码管显示
		for(i=0;i<10;i++)
		{DispMF(i);Delay(0xf000);}
		
		//定时中断动态四数码管显示
		Testdata=0;
		TH0=0x4c;TL0=0x00;//50ms定时
		TR0=1;ET0=1;EA=1;//打开定时器中断
		while(Testdata<200)
			DLEDdispNumA(Testdata/2);
		TR0=0;ET0=0;//关闭定时器中断
   	
		//动态数码管显示,0000-9999记数		
		P2=0xff;Delay(0xf000);//关闭数码管显示
		for(i=0;i<10000;i++)
		{DLEDdispNumA(i);}		
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?