初学者,请大家不要喷哦,,,,,
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint sz,fz,mz,tt,ss,sg,fs,fg,ms,mg,k;
***it key1=P1^0; // 单独的启停按钮
***it key2=P1^1; // 置位清零
***it key3=P1^3; //调时,指向时分秒
***it key4=P1^6; //时间加
***it key5=P1^7; //时间减
void delay (uint z)//延时函数
{
while(--z);
}
void keyscan() //键值函数
{
if(key1==0) //启停功能
{
delay(200);
if(key1==0)
{
while(!key1) ;
delay(200);
while(!key1) ;
k++;
if(k==1)
{
EA=0;
TR0=0;
}
if(k==2)
{
k=0;
EA=1;
TR0=1;
}
}
}
if(key2==0) //置位清零
{
delay(200);
if(key2==0)
{
while(!key2) ;
delay(200);
while(!key2) ;
TR0=0;
mz=0;
fz=0;
sz=0;
}
}
if(key3==0) //调时选择时分秒
{
delay(200);
if(key3==0)
{
while(!key3) ;
delay(200);
while(!key3) ;
TR0=0;
k++;
if(k==4)
k=0;
//TR0=1;
}
}
if(key4==0&&TR0==0) //加时间
delay(10);
if(key4==0&&TR0==0)
{
while(!key4&&TR0==0);
switch(k)
{
case 1:mz++; if(mz==60) mz=0;
break;
case 2:fz++;if(fz==60)fz=0;
break;
case 3:sz++;if(sz==24)sz=0;break;
//default :;
}
}
if(key5==0&&TR0==0) //减时间
delay(10);
if(key5==0&&TR0==0)
{
while(!key5&&TR0==0);
switch(k)
{
case 1:mz--; if(mz==0) mz=59;
break;
case 2:fz--;if(fz==0)fz=59;
break;
case 3:sz--;if(sz==0)sz=23;break;
}
}
}
void init() //初始化
{
EA=1; //开总中断
ET0=1; //选中断/定时
TR0=1; //开定时器
TMOD=0X01; //选择定时器工作方式1
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
sz=23; //时间初值
fz=59;
mz=50;
}
void display() //显示函数
{
while(1)
{
ss=sz/10;
sg=sz%10;
fs=fz/10;
fg=fz%10;
ms=mz/10;
mg=mz%10;
P2=0; //数码管扫描
P0=table[ss];
delay(300);
P2=1;
P0=table[sg];
delay(300);
P2=2;
P0=0x40;
delay(300);
P2=3;
P0=table[fs];
delay(300);
P2=4;
P0=table[fg];
delay(300);
P2=5;
P0=0x40;
delay(300);
P2=6;
P0=table[ms];
delay(300);
P2=7;
P0=table[mg];
delay(300);
if(mz==60) //时间近位
{ mz=0;
fz++;}
if(fz==60)
{ fz=0;
sz++;
}
if(sz==24)
sz=0;
keyscan();调时函数
}
}
void main() //主函数
{
while(1)
{
init();
display();
}
}
void exter0() interrupt 1 //中断函数
{
TH0=(65530-50000)/256;
TL0=(65535-50000)%256 ;
tt++;
if(tt==20)
{
tt=0;
mz++;
}
}