if(sw5==0&&P3_4==0&&cnt==5) //检查第三个键是否按下
{
delay(3);
if(sw5==0&&P3_4==0&&cnt==5)
{
key3 = 1;
}
}
if(key3==1&&cnt==5&&P3_4==1)
{
key3 = 0;
sw3 = 1;
if(sw3==1&&sw1==1)
{
if(min<=0)
min = 60;
min--; //分针减
}
if(sw3==1&&sw1==2)
{
if(hour<=0)
hour = 24;
hour--; //时针减
}
if(sw3==1&&sw1==3)
{
if(week<=0)
week = 7;
week--;
}
}
if(sw5==1&&P3_4==0&&cnt==5) //在年月日检查第三个键是否按下
{
delay(3);
if(sw5==1&&P3_4==0&&cnt==5)
{
key3 = 7;
}
}
if(key3==7&&cnt==5&&P3_4==1)
{
key3 = 0;
sw3 = 7;
if(sw3==7&&sw1==9)
{
if(day<=0)
day = 32;
day--; //day减
}
if(sw3==7&&sw1==8)
{
if(month<=0)
month = 13;
month--; //month减
}
if(sw3==7&&sw1==7)
{
if(year1<=0)
year1 = 100; //year减
year1--;
}
if(sw3==7&&sw1==6)
{
if(year2<=20)
year2 = 100; //year减
year2--;
}
}
if(P3_4==0&&cnt==4&&sw1!=0&&sw5==0)
{
delay(3);
if(P3_4==0&&cnt==4&&sw1!=0&&sw5==0)
{
sw1=0;sec=0;key4=1;key1=0;
}
}
if(P3_4==0&&cnt==4&&sw1!=0&&sw5==1)
{
delay(3);
if(P3_4==0&&cnt==4&&sw1!=0&&sw5==1)
{
sw1=0;key4=1;key1=0;
}
}
if(P3_4==0&&cnt==3)
{
delay(3);
if(P3_4==0&&cnt==3)
{
key5 = 1;
}
}
if(key5==1&&P3_4==1&&cnt==3)
{
sw5 = 1;
}
if(P3_4==0&&sw5==1&&cnt==3)
{
delay(3);
if(P3_4==0&&sw5==1&&cnt==3)
{
key5 = 0;
}
}
if(P3_4==1&&key5==0&&cnt==3)
{
sw5 = 0;
}
}
/***********************************************主函数********************************************************/
void main(void)
{
PCA0MD = 0 ;
XBR1 = 0x40 ;
P0MDOUT = 0xFF ;
P1MDOUT = 0xFF ;
init();
while(1)
{
conv();
year=year1+year2*100;
}
}
五、调试及性能分析 5.1 硬件调试:主要检查电路的焊接,有无虚焊,漏焊,然后检查电路与单片机的联线,为了方便自己做了一根数据线,然后用万用表测试,全部导通后进行通电检测,上电后排查电路板的各点电平是否正常,测试完毕后进行软件调试。
5.2 软件调试:主要以以编程序为主,并进行单片机输出口线高低电平的检验。本程序采用C语言编写,用Keil C51编译器编程调试,本程序的难点之一在于让它闪烁,也就是再其它灯不变的情况下闪烁需要调整的部分。
经过测试,任务以及要求全部达到,初始化时,时间是1-00:00:00,切换后是20096.08.15,由于时间关系没能经过长时间的验证性测试,短期测试发现每一个小时快一秒钟,只进行了粗调。