#include "reg52.h"
#include"intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u16 i,n,k,miao,fen,hour,feng,fens,hourg,hours,feng1,fens1,hourg1,hours1;
sbit flag=P1^0;
sbit flag1=P1^1;
sbit s1=P1^7;
sbit s11=P1^3;
sbit s2=P1^6;
sbit led=P2^0;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit led6=P0^6;
sbit led7=P0^7;
sbit beep=P1^5;
void delay70ms(void) //??????70ms
{
unsigned char a,b;
for(b=158;b>0;b--)
for(a=220;a>0;a--);
_nop_();
}
void delay(u16 u)
{
u--;
}
void turntime() //??????亯??
{
if(k2==0) //С???λ
{
delay70ms();
if(k2 == 0)
{ miao = 0;
hours++;
hours = hours%3;
delay70ms();
}
while(!k2);
}
if(k1 == 0) //С??λ
{
delay70ms();
if(k1 == 0)
{ miao = 0;
hourg++;
hourg = hourg%10;
delay70ms();
}
while(!k1);
}
if(k3 == 0) //?????λ
{
delay70ms();
if(k3 == 0)
{ miao = 0;
fens++;
fens=fens%6;
delay70ms();
}
while(!k3);
}
if(k4 == 0) //?????λ
{
delay70ms();
if(k4 == 0)
{ miao = 0;
feng++;
feng = feng%10;
delay70ms();
}
while(!k4);
}
}
void turnclock() //???????????
{
if(k2==0) //С???λ
{
delay70ms();
if(k2 == 0)
{ miao = 0;
hours1++;
hours1 = hours1%3;
delay70ms();
}
while(!k2);
}
if(k1 == 0) //С??λ
{
delay70ms();
if(k1 == 0)
{ miao = 0;
hourg1++;
hourg1 = hourg1%10;
delay70ms();
}
while(!k1);
}
if(k3 == 0) //?????λ
{
delay70ms();
if(k3 == 0)
{ miao = 0;
fens1++;
fens1=fens1%6;
delay70ms();
}
while(!k3);
}
if(k4 == 0) //?????λ
{
delay70ms();
if(k4 == 0)
{ miao = 0;
feng1++;
feng1 = feng1%10;
delay70ms();
}
while(!k4);
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = (65535-10000)/256;
TL0 = (65535-10000)%256; //10ms
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = (65535-10000)/256;
TL0 = (65535-10000)%256;
i++;k++;
if(k == 50) //????
{led =~led; k = 0;}
if(i == 100)
{i = 0; miao++;}
if(miao == 60) //????
{miao = 0;feng++;}
if(feng == 10)
{feng=0;fens++;}
if(fens == 6) //С?
{fens=0;hourg++;}
if(hourg == 10)
{hourg=0;hours++;}
if(hours == 2&&hourg == 4) //????
{hours=0;hourg=0;}
}
void select() //?????
{
if(s1==0)
{
delay70ms();
if(s1==0)
{
flag=~flag;
delay70ms();
}
while(!s1);
}
}
void openclock() //??????????
{
if(s2==0)
{
delay70ms();
if(s2==0)
{
flag1=~flag1;
delay70ms();
}
while(!s2);
}
}
void DigDisplay() //???????????????
{
LSA=0;LSB=0;LSC=0;P0=smgduan[feng];delay(100);P0=0x00;
LSA=1;LSB=0;LSC=0;P0=smgduan[fens];delay(100);P0=0x00;
if(led==1)
{LSA=0;LSB=1;LSC=0;led6=1;delay(100);P0=0x00;
LSA=1;LSB=1;LSC=0;led6=1;delay(100);P0=0x00;}
LSA=0;LSB=0;LSC=1;P0=smgduan[hourg];delay(100);P0=0x00;
LSA=1;LSB=0;LSC=1;P0=smgduan[hours];delay(100);P0=0x00;
if(flag1==0)
{LSA=1;LSB=1;LSC=1;led7=smgduan[flag1];delay(100);P0=0x00;}
}
void DigDisplay1() //????????????????
{
LSA=0;LSB=0;LSC=0;P0=smgduan[feng1];delay(100);P0=0x00;
LSA=1;LSB=0;LSC=0;P0=smgduan[fens1];delay(100);P0=0x00;
LSA=0;LSB=0;LSC=1;P0=smgduan[hourg1];delay(100);P0=0x00;
LSA=1;LSB=0;LSC=1;P0=smgduan[hours1];delay(100);P0=0x00;
LSA=1;LSB=1;LSC=1;s1=smgduan[flag1];delay(100);P0=0x00;
}
void alarmclock() //???????ú???
{
turnclock();
DigDisplay1();
}
void clocking() //??????к???
{
openclock();
if((feng1==feng)&&(fens1==fens)&&(flag1==0))
{
if((hourg1==hourg)&&(hours1==hours))
{
while(!flag1)
{
openclock();
beep=~beep;
delay(10);
DigDisplay();
}
}
}
}
void main(void)
{
s11=0;
InitTimer0();
while(1)
{
select();
clocking();
if(flag==1)
{DigDisplay();turntime();}
if(flag==0)
{DigDisplay1();alarmclock();}
}
}
正常模式下 k1 k2 k3 k4 分别为 小时十位 个位 分钟 十位 个位调整函数
|