利用51单片机的定时器设计一个数字时钟

利用51单片机的定时器,设计一个数字时钟,具有时间、年月日和星期显示功能,并且可以通过按键设置调整年时间年月日和星期的功能。
1.系统功能模块图
系统主要有led灯显示模块、电源模块、单片机最小系统、lcd1602液晶显示电路、按键设置模块。
2.系统原理图
按键控制电路中共有4个按键,按键1的功能是进行日期,时间的设置。按下1次,进入“秒”设置;按下2次,进入“分”设置;按下3次,进入“时”设置;按下4次,进入“星期”设置;按下5次,进入“日”设计;按下6次;进入“月”设置;按下7次,进入“年”设置。按键2的功能是增加时间或日期。按键3的功能是减少时间或日期。按键4的功能是数码管显示的相应时间进行加或减。
led灯用来是指示当前设置参数:d1亮起表示设置秒,d2亮起表示设置分,d3亮起表示设置时,d4亮起表示设置星期,d5亮起表示设置日,d6亮起表示设置月,d7亮起表示设置年。
3.系统主程序流程图
系统上电首先初始化lcd1602和定时器,设置定时器模式、开启定时器中断,然后循环执行更新显示时间,实时扫描按键状态。当单片机上电以后,lcd上会立即显示出2021. 12.12  sun 7  21:42:00即2021年12月12号,周日,21 时 42 分 0 秒,通过与实时扫描单片机 io 口相连接的按键的控制可以实现对时间以及模式的调整,以调整到正确的时间和模式。主程序流程图如下:
void main()
{initlcd1602();
    init();
    lcdshowstr(4,0, 00:00:00);
    lcdshowstr(0,1, 0000.00.00);
    while(1)
    {
        show();
        key();
  }
}
4.系统运行展示
5.关键代码
定时器中断处理:
void timer0() interrupt 1
{ th0=0xb8;tl0=0x00;
    m++;
    if(m>=50)
    {m=0;second++;}
    if(second==60)
    {second=0;minute++;}
    if(minute==60)
    {minute=0;hour++;}
    if(hour==24)
    {hour=0;week++;day++;}
    if(week==8)
    {week=1;}
    if(day==31)
    {day=1;month++;}
    if(month==13)
    {month=1;year++;}
}
按键的处理
void jia()
{if(second==60)
    {second=0;minute++;}
    if(minute==60)
    {minute=0;hour++;}
    if(hour==24)
    {hour=0;week++;day++;}
    if(week==8)
    {week=1;}
    if(day==31)
    {day=1;month++;}
    if(month==13)
    {month=1;year++;}
}
void jian()
{if(second==-1)
    {second=59;minute--;}
    if(minute==-1)
    {minute=59;hour--;}
    if(hour==-1)
    {hour=23;week--;day--;}
    if(week==0)
    {week=7;}
    if(day==0)
    {day=31;month--;}
    if(month==0)
    {month=12;year--;}
}
void key()
{if(k0==0)
    {delay(1000);
        if(k0==0)
        {s1num++;
        while(!k0);di();
        switch(s1num) //光标闪烁点定位
            { case 1: p1=0xfe;break;
                case 2: p1=0xfd;break;
                case 3: p1=0xfb;break;
                case 4: p1=0xf7;break;
                case 5: p1=0xef;break;
                case 6: p1=0xdf;break;
                case 7: p1=0xbf;break;
                case 8: s1num=0;p1=0xff;break;
        }            
    }        
}
if(s1num!=0)
{
    if(k1==0)
    {delay(1000);
        if(k1==0)
            while(!k1); di();
        switch(s1num)
            { case 1: second++; jia();break;
                case 2: minute++; jia();break;
                case 3: hour++;   jia();break;
                case 4: week++;   jia();break;
                case 5: day++;    jia();break;
                case 6: month++;  jia();break;
                case 7: year++;   jia();break;
                            }
    }
}
if(k2==0)
    {delay(1000);
        if(k2==0)
            while(!k2); di();
        switch(s1num) //根据功能键次数调节相应数值
            { case 1: second--;jian();break;
                case 2: minute--;jian();break;
                case 3: hour--;  jian();break;
                case 4: week--;  jian();break;
                case 5: day--;   jian();break;
                case 6: month--; jian();break;
                case 7: year--;  jian();break;
                }
        }
if(k3==0)
   {delay(100);
       if(k3==0)
        {s1num=0;p1=0xff;
                    }
   }
}


8种常用DC-DC开关电源拓扑图汇总
警务专用手机!华为Mate9搭载EMUI5.1+神盾安全系统,真心可靠
脑机接口可以给人类带来什么?
360借条是如何利用AI技术解决难题的
正式官宣沈义人卸任OPPO全球营销总裁的信息
利用51单片机的定时器设计一个数字时钟
怎样将废旧闹钟制作成天气预报站
疫情之下,创想三维3D打印机火爆海外!
变压器的分类方法
华为预示正在开发一款相对便宜的上下折合翻盖的手机
自动驾驶最新消息:谷歌前自动驾驶工程师获刑 日本德国美国百花齐放
SOLIDWORKS曲面建模实例
工程师DIY智能灌溉器解决植物浇水难题
新紫光体系浮出水面,资产重整一周年交出怎样的答卷?
研发服务获认可 世强元件电商斩获2017中国智造金长城奖
TuyaOS Matter助您低门槛打通智能家居生态
压限器,压限器是什么意思
冰箱市场零售额实现了四年来首次增长
符合JEITA RCX-2326标准的SMT MLC
畅谈汽车产品力的养成,与ADI专家一起洞察汽车产业的热点技术与发展趋势