基于51单片的电子时钟

记录一下,最近在代做的课程设计。

1、设计一个基于单片机的电子时钟,具体功能如下

有计时功能,有按键启动系统,能实现12小时制和24小时制的转换,可以设置时间。

有闹钟功能,可设置三个闹钟,能够随意设置闹钟时间。

闹钟时间达到时,led可闪烁。

部分源代码如下:

1,定时器部分:

void Timer0Init()
{
    TMOD=0x01;      //用定时
    TH0=0xD8;        //装定时器初值
    TL0=0xF0;
    ET0=1;        //启用定时器中断
    EA=1;            //开总中断
    TR0=0;
}

void Timer0() interrupt 1
{
    TH0=0xD8;
    TL0=0xF0;
    i++;
    if(i==100)        //定时3秒
    {
        i=0;
        sec++;
        if(sec==60)
        {
            sec=0;
            min++;
            if(min==60)
            {
                min=0;
                hour++;
                if((hour==12)&&(zhi==0))
                {
                    if(z==0x08 && hour==12)
                        week++;
                    if(z==0x08)
                        z=0x01;
                    else
                        z=0x08;
                    if(week==8)
                        week=1;
                    hour=0;
                }
                if((hour==24)&&(zhi==1))
                {
                    hour=0;
                    week++;
                    if(week==8)
                        week=1;
                }
            }
        }
    }
}

2、格式的转换

if(k6==0)            //计时模式的切换
        {
            delayms(5);
            if(k6==0)
            {
                zhi=~zhi;
                if((hour>=12)&&(zhi==0))
                    hour-=12;
                if((zhi==0xffff)&&(z==0x08))
                    hour+=12;
            }while(!k6)display();
        }

3、主函数

void main()
{
    P0=0x00;    //清楚数码管的段选
    Int0Init();
    Timer0Init();
    while(1)
    {
        keyScanf();        //按键扫描
        if((alarm==0xffff)&&((hour==ahour)&&(min==amin)||
                                (hour==bhour)&&(min==bmin)||
                                (hour==chour)&&(min==cmin)))        //任何一个闹钟响起,都会闪烁
        {
            if(sec<=30)
            {
                for(d=0;d<20;d++)
                {
                    led=~led;            //led闪烁
                    delayms(80);
                }
            }
            if(sec>30)
                led=1;                //闹钟30s后自动关闭
        }    
        while(flag)
        {
            if(mode==1)
            {
                display1();                //闹钟1
                keyScanf1();            //扫描按键,返回
            }
            if(mode==2)
            {
                display2();                //闹钟2
                keyScanf2();            //扫描按键,返回
            }
            if(mode==3)
            {
                display3();                //闹钟3
                keyScanf3();            //扫描按键,返回
            }
        }
        led=1;
        display();//start
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张_Serendipity !

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值