{ while(~key0);//防抖,直到按键松开时才进行下一步的操作 TR0=0;//控制走时的中断停止 do{ keyvalue1=keyscan();//检测按键按下 if(keyvalue1==2)//如果按键2按下,改变时间 { while(~key1);//防抖 if(hour<23)//如果小时数小于23则加1 { hour++; } else//如果小时数为23,置位为0 { hour=0; } } else if(keyvalue1==3)//如果按键3按下,改变分钟 { while(~key2);//防抖 if(minute<59)//如果分钟数小于59则加1 { minute++; } else//如果分钟数为59,置位为0 { minute=0; } clock_write(); } }while(keyvalue1!=4);//重复对时间的修改直到按键4按下 while(~key3==0);//防抖 TR0=1;//调整时间后重新开始走时 } } } 必须注意,程序设计中,小时、分钟、秒变量hour、minute、second必须置为全局变量,才能如上述函数一样在各处函数中直接进行修改,如为局部变量,则上述形式的直接修改无效。
1602 液晶显示模块以及基于单片机定时器的时钟实现见教材的介绍,不再赘述。 LCD时钟原理电路图如下图。程序执行后工作指示灯D1闪动一下,表示时钟开始运行。按下按键K1后,D1停止闪烁,即时钟停止走时,时钟停在当前时刻;按下按键K2和K3后,可改变小时和分钟;按下按键K4后,时钟从修改后的时间重新开始运行。
为加强AT89C51的驱动能力,原理图中加入作为上拉电阻的排电阻(CTRESPACK-7),即
图中的RP1。
图 LCD电子钟电路原理电路图与仿真