|
部分程序如下:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LA=P1^2;//段選
sbit LB=P1^3;//段選
sbit LC=P1^4;//段選
sbit deep=P1^5;//鬧鐘
u8 i,j,k,m;
u8 a,b,c,d;
u16 e,s1,s2,s3,s4,s5,s6,s7;//s1秒加,s2秒減,s3分加,s4分減,s5啟動,s6暫停,s7定時(shí)開啟
u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //顯示0~9 共陰
u8 code smg1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //顯示0~9加小數(shù)點(diǎn)
void delay(u16 x)
{
while(x--);
}
void digital()
{
u8 t;
a=0,b=0,c=0,d=0;
for(t=0;t<4;t++)
{
switch(t)
{
case 0:LA=0;LB=0;LC=1;i=0;
P0=smg[i];break;
case 1:LA=1;LB=1;LC=0;j=0;
P0=smg[j];break;
case 2:LA=0;LB=1;LC=0;k=0;
P0=smg1[k];break;
case 3:LA=1;LB=0;LC=0;m=0;
P0=smg[m];break;
default:break;
}
delay(100);
P0=0x00;//數(shù)碼管消隱
}
}
void keypros()//計(jì)時(shí)啟動前手動調(diào)節(jié)時(shí)間
{
P2=0x7f;
if(P2!=0x7f)
{
delay(100);
if(P2!=0x7f)
{
switch(P2)
{
case 0x77:s1=0;break;
case 0x7b:s2=0;break;
case 0x7d:s3=0;break;
case 0x7e:s4=0;break;
default:break;
}
while(P2!=0x7f)
{
LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
}
}
}
P2=0xbf;
if(P2!=0xbf)
{
delay(100);
if(P2!=0xbf)
{
switch(P2)
{
case 0xb7:s5=0;break;
case 0xbd:s7=0;break;
}
while(P2!=0xbf)
{
LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
}
}
}//判斷是否有按鍵按下
if(s1==0)//秒加
{
if(i==9)
{
i=0;
if(j==5)
{
j=0;
if(k==9)
{
k=0;
if(m==5)
{
i=0,j=0,k=0,m=6;
}
else m++;
}
else k++;
}
else j++;
}
else i++;
s1=1;
}
if(s2==0)//秒減
{
if(i==0)
{
i=9;
if(j==0)
{
j=5;
if(k==0)
{
k=9;
if(m==0)
{
i=0,j=0,k=0,m=0;
}
else m--;
}
else k--;
}
else j--;
}
else i--;
s2=1;
}
if(s3==0)//分加
{
if(k==9)
{
k=0;
if(m==5)
{
k=0,m=6;
}
else m++;
}
else k++;
s3=1;
}
if(s4==0)//分減
{
if(k==0)
{
k=9;
if(m==0)
{
k=0,m=0;
}
else m--;
}
else k--;
s4=1;
}
if(s7==0)//定時(shí)
{
a=i,b=j,c=k,d=m;
s7=1;
}
LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
}
void chushi() //定時(shí)器T0初始化
{
TMOD=0X01;//方式1,16位。
TH0=0XD8;//初值設(shè)定
TL0=0XF0;//10ms后溢出
EA=1;ET0=1;
TR0=1;//計(jì)時(shí)啟動
}
void dig() //計(jì)時(shí)子函數(shù)!!!
{
i++;
if(i>9)
{
i=0;j++;
if(j==6&&i==0)
{
j=0;k++;
if(k>9)
{
k=0;m++;
if(m==6&&k==0&&j==0&&i==0)
{
TR0=0;//時(shí)間暫停
}
}
}
}
LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
}
void main() //主函數(shù)
{
|
|