it k2=P1^2;
sbit beep=P1^5;//蜂鸣器
sbit smg1=P2^2;//数码管
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar time=0,mode2=0;//系统变量
uchar shi=6,fen=59,miao=55,sec=0;
uchar start=0;
uchar flag1=0,flag2=0,time1=0;//报时控制
uchar flag=0;
uchar change=0;
//延时
void delay(uint i)
{
while(i--);
}
//主函数
void main()
{
uchar k=0;
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
beep=0;
while(1)
{
//正常模式
if(s1)
{
if(change)
{
change=0;
mode2=0;
}
if(mode2==0)//分钟
{
P0=0;smg1=1;P0=smgduan[fen/10];delay(100);
P0=0;smg1=0;P0=smgduan[fen%10];delay(100);
}
else//小时
{
P0=0;smg1=1;P0=smgduan[shi/10];delay(100);
P0=0;smg1=0;P0=smgduan[shi%10];delay(100);
}
//LED
if(flag==0)
{
if(time<11)
P3=0xff;
else
P3=0;
}
//按键切换
if(!k1 &&(k!=1))//小时
{
k=1;
if(sec==0)
{
sec=3;
mode2=1;
start=1;
}
else
{
mode2=0;
start=0;
sec=0;
}
}
if(k1 && k2)
k=0;
}
else//设置模式
{
change=1;
if(mode2==0)//分钟
{
if(time<11)
{
P0=0;smg1=1;P0=smgduan[fen/10];delay(100);
P0=0;smg1=0;P0=smgduan[fen%10];delay(100);
}
else
P0=0;
P3=0xff;
}
else//小时
{
if(time<11)
{
P0=0;smg1=1;P0=smgduan[shi/10];delay(100);
P0=0;smg1=0;P0=smgduan[shi%10];delay(100);
}
else
P0=0;
P3=0;
}
//按键切换
if(!k1 &&(k!=1))//切换
{
k=1;
mode2=!mode2;
}
if(!k2 &&(k!=2))//加
{
k=2;
if(mode2==0)
{
if(fen<59)
fen++;
else
fen=0;
}
资料借鉴于此纷传
阅读全文