⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 digtaled.c

📁 用keil写89c51的显示数码管的程序
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -