?? 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 + -