51单片机学习笔记:可对时电子钟
扫描二维码
随时随地手机看文章
本篇是对上一篇的改进,昨天学习了第4章中的独立键盘的使用
独立键盘拥有自己独有的IO口,所以比较简单,我上一篇写的电子钟程序只能烧程序对时,
不能手动按键对时,这肯定是最差劲的做法,所以学习了按键之后,就立马动手改进我的电子钟了
同时改进了数码管小数点的显示,消除了叠影
使用芯片STC89C52RC, 2个锁存器
6个带小数点共阴极数码管显示一个24时制时钟
没有时钟芯片,所以掉电后时间会复位
原理图为TX-1C开发板
==============================
最终显示的<时.分.秒>是 16.31.37 形式
使用3个按键, S2 S3 S5
其中S2和S3是加减数值,S5是切换对时状态,
C代码
#include
#include"MY51.H"
voidshow();
int8shi=22;//初识时间22:45:00按S5键进入对时模式
int8fen=45;
int8miao=0;
uint8timeFlag=0;//0计时模式,1校对时钟,2校对分钟,3校对秒钟
voidmain()
{
startT0(1000);//开始定时器
while(1)
{
show();//送入数码管显示
if(keyS5==keyDown)//按下S5键
{
delayms(5);//消抖处理
if(keyS5==keyDown)
{
while(1)
{
show();
if(keyS5==keyUp)//放开按钮
{
delayms(5);//消抖处理
if(keyS5==keyUp)
{
break;
}
}
}
timeFlag=(++timeFlag)%4;//按S5键进行状态切换
while(timeFlag)
{
if(timeFlag==1)
{
led=0xff;
led7=0;//进入对时钟模式,且打开7号指示灯
}
elseif(timeFlag==2)
{
led=0xff;
led5=0;//进入校对分钟模式,且打开5号指示灯
}
elseif(timeFlag==3)
{
led=0xff;
led3=0;//进入校对秒钟模式,且打开3号指示灯
}
show();//刷新数码管
if(keyS2==keyDown)//S2和S3用于调整数值,加减运算
{
delayms(5);//消抖处理
if(keyS2==keyDown)
{
if(timeFlag==1)
{
shi--;
if(shi<0)
{
shi=23;
}
}
elseif(timeFlag==2)
{