📄 clock.c
字号:
#include <REGX52.H>
//==========变量定义===========
int data msAdd=0;//ms累加
char data dispCode[8]=0,timeNum[3]=0;//时间量的字形码//具体时间量
char data whatLed=7;//当前显示的数码管
int data i=0,j=0,k=0,stepAdd=0;//循环变量//时标变量
char data select=3,keyNum=0;//设置位指示//键号
//==========函数定义===========
void setDisp(void);//计算字形码
void runKey(void);//执行键盘功能
void main(void)
{
//==========T0/T1定时3ms/1ms==========
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH0=0xfc;
TL0=0x67;
TH1=0xf5;
TL1=0x33;
TR0=1;
TR1=1;
//=============================
P2=0x7f;
P3_6=1;
P3_7=1;
dispCode[6]=0xbf;//显示"-"
while(1){;}
return;
}
//==========时间/显示==========
void Disp(void) interrupt 1 using 1
{
bit data P2_H;
char data P2_ALL;
ET0=0;
if(select==3)
{
if(msAdd==625)
{
msAdd=0;
//========循环彩灯闪烁=========
if(P1==0x00)
{
P1=0xff;
}
else
{
P1>>=1;
}
//=========时间累加============
if(timeNum[0]==59)
{
timeNum[0]=0;
if(timeNum[1]==59)
{
timeNum[1]=0;
if(timeNum[2]==23)
{
timeNum[2]=0;
}
else
{
timeNum[2]++;
}
}
else
{
timeNum[1]++;
}
}
else
{
timeNum[0]++;
}
}
else
{
msAdd++;
}
}
//=========按键识别============
if(P3_6==0||P3_7==0)
{
if(P3_6==0)
{
keyNum=P2+1;
runKey();
}
else if(P3_7==0)
{
keyNum=P2+2;
runKey();
}
}
//=========上午/下午===========
if(timeNum[2]>=12)
{
dispCode[7]=0x8c;//显示"P"
}
else
{
dispCode[7]=0x88;//显示"A"
}
//==========拆字/显示==========
i=2;
for(j=5;j>=0;j-=2)
{
dispCode[j]=timeNum[i]/10;
dispCode[j-1]=timeNum[i]-dispCode[j]*10;
i--;
}
setDisp();
//========循环显示数值=========
P2_ALL=P2;
P2_H=P2_0;
P2=0xff;
if(whatLed>0)
{
whatLed--;
}
else
{
whatLed=7;
}
P0=dispCode[whatLed];
//=========P2循环右移==========
P2_ALL=P2_ALL>>1;
P2=P2_ALL;
P2_7=P2_H;
//=============================
TH0=0xfc;
TL0=0x67;
TR0=1;
ET0=1;
return;
}
//=========计算字形码==========
void setDisp()
{
for(i=5;i>=0;i--)
{
switch(dispCode[i])
{
case 0:dispCode[i]=0xc0;
break;
case 1:dispCode[i]=0xf9;
break;
case 2:dispCode[i]=0xa4;
break;
case 3:dispCode[i]=0xb0;
break;
case 4:dispCode[i]=0x99;
break;
case 5:dispCode[i]=0x92;
break;
case 6:dispCode[i]=0x82;
break;
case 7:dispCode[i]=0xf8;
break;
case 8:dispCode[i]=0x80;
break;
case 9:dispCode[i]=0x90;
break;
default:dispCode[i]=0xff;
}
}
if(select!=3)
{
if(stepAdd>150)
{
dispCode[select*2]=0xff;
dispCode[select*2+1]=0xff;
}
}
dispCode[2]&=0x7f;
dispCode[4]&=0x7f;
return;
}
//========执行键盘功能=========
void runKey(void)
{
switch(keyNum)
{
case 0x80:
if(stepAdd%50==0)
{
if(select>0)
{
select--;
}
else
{
select=3;
}
}
break;
case 0xc0:
if(stepAdd%50==0)
{
if(select!=3)
{
if(select!=0)
{
timeNum[select]++;
}
else if (timeNum[0]>=30)
{
timeNum[select]=0;
timeNum[1]++;
}
else
{
timeNum[select]=0;
}
if (timeNum[1]==60){timeNum[select]=0;}
if (timeNum[2]==24){timeNum[select]=0;}
}
}
break;
}
return;
}
//=========辅助时标产生=========
void step(void) interrupt 3 using 2
{
ET1=0;
if(stepAdd<333)
{
stepAdd++;
}
else
{
stepAdd=0;
}
TH1=0xf5;
TL1=0x33;
TR1=1;
ET1=1;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -