📄 digtaled.c.bak
字号:
#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 + -