久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4599|回復: 0
收起左側(cè)

數(shù)碼管電子鐘設計,具有鬧鐘功能(仿真+源程序)分享

[復制鏈接]
ID:656668 發(fā)表于 2020-6-16 09:33 | 顯示全部樓層 |閱讀模式
51單片機電子鐘設計,功能如下
1.具有時間校準功能;
2.具有鬧鐘功能;
3.可以顯示時、分、秒;
批注 2020-06-16 092152.png
鬧鐘設置界面
批注 2020-06-16 092300.png


電子時鐘系統(tǒng).zip (92.97 KB, 下載次數(shù): 86)

程序如下:
#include  "Key.h"
#include  "led.h"

uchar timeSetBuff[8]={'0','0',LED_MODE_COUNT,'0','0',LED_MODE_COUNT,'0','0'};//時鐘數(shù)據(jù)緩沖區(qū)
uchar alarmSetBuff[8]={'0','0',LED_MODE_ALARM,'0','0',LED_MODE_ALARM,'0','0'};//鬧鐘時間數(shù)據(jù)緩沖區(qū)
uchar timeDisMod=0x24;                //00100100
uchar secondTemp,minuteTemp,hourTemp;
uchar secondAlarm,minuteAlarm,hourAlarm;
uchar timer0Temp;
uchar alarmKeyCount;                   //鬧鐘起停鍵計數(shù)
bit alarm_is_ok;                       //鬧鐘起停狀態(tài)
bit time_is_ok;                        //時間是否到
bit interface_mod;                     // 顯示界面模式,0為主時間界面,1為設置界面

/********************************************************************************************
* 函數(shù)名稱:定時器0
* 功    能:定時器0初始化
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************************************************/          
void initTimer0(void)                      //定時10ms
{
   TMOD |= 0x01;                        //GATE=0,TR=1運行;C/T=1,counter,0,timer;01十六進制  
   TH0 = 0xdc;
   TL0 = 0x00;
   TR0 = 1;                                  //timer0 控制位,為1時啟動timer0
   ET0 = 1;                             //timer0 中斷使能
}

/********************************************************************************************
* 函數(shù)名稱:時鐘比較
* 功    能:比較時鐘和鬧鐘的時間緩沖區(qū),只比較時和分
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************************************************/
void timeCompare(void)            
{
  if((minuteTemp == minuteAlarm) && (hourTemp == hourAlarm))
  {
     time_is_ok = 1;
         alarm_is_ok = 0;
         interface_mod = 1;
  }   
}       

/********************************************************************************************
* 函數(shù)名稱:主函數(shù)
* 功    能:調(diào)用并執(zhí)行各個子函數(shù)
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************************************************/
void main()
{
uchar keyRead;
init_led();
init_key();
initTimer0();
timer0Temp = 0x00;
secondTemp = 0x00;
minuteTemp = 0x00;
hourTemp = 0x00;
secondAlarm = 0x00;
minuteAlarm = 0x00;
hourAlarm = 0x00;
alarmKeyCount = 0x02;
alarm_is_ok = 0;     //默認狀態(tài)停止
time_is_ok = 0;      //默認時間未到
interface_mod = 0;
sei();
while(1)
{

   if(interface_mod == 1)
     ledSweepDisplay(alarmSetBuff,timeDisMod);
   else
     ledSweepDisplay(timeSetBuff,timeDisMod);
   if(alarm_is_ok == 1)
     timeCompare();

   keyRead = get_key_value();
   if(keyRead == KEY_ALARM)
   {
      if(alarm_is_ok == 1 || time_is_ok == 1)
          {
            alarm_is_ok = 0;
                time_is_ok = 0;
                interface_mod = 0;
                alarmKeyCount = 0x00;
          }
          else
          {
                if(alarmKeyCount < 0x02)
                alarmKeyCount++;
                else
                   alarmKeyCount = 0x00;
                if(alarmKeyCount == 0x01)
                  interface_mod = 1;
                if(alarmKeyCount == 0x02)
                 {
                   alarm_is_ok = 1;
                   interface_mod = 0;
                 }          
          }   
    }
   if(keyRead == KEY_SECOND)
   { if(interface_mod == 1)
     {
           if(secondAlarm < 59)
             secondAlarm++;
           else
             secondAlarm = 0x00;
           alarmSetBuff[S_L] = secondAlarm % 10 + '0';
           alarmSetBuff[S_H] = secondAlarm / 10 + '0';
         }
     else
         {
           if(secondTemp < 59)
             secondTemp += 1;
           else
             secondTemp = 0x00;
           timeSetBuff[S_L] = secondTemp % 10 + '0';
       timeSetBuff[S_H] = secondTemp / 10 + '0';
         }   
   }
   if(keyRead == KEY_MINUTE)
   { if(interface_mod == 1)
     {
           if(minuteAlarm < 59)
             minuteAlarm++;
           else
             minuteAlarm=0x00;
           alarmSetBuff[M_L]=minuteAlarm%10+'0';
           alarmSetBuff[M_H]=minuteAlarm/10+'0';
         }
         else
         {
           if(minuteTemp < 59)
             minuteTemp += 1;
           else
             minuteTemp = 0x00;
           timeSetBuff[M_L] = minuteTemp % 10 + '0';
       timeSetBuff[M_H] = minuteTemp / 10 + '0';
         }

   }
  if(keyRead == KEY_HOUR)
  {
     if(interface_mod == 1)
         {
           if(hourAlarm < 23)
             hourAlarm++;
           else
             hourAlarm = 0x00;
           alarmSetBuff[H_L] = hourAlarm % 10 + '0';
           alarmSetBuff[H_H] = hourAlarm / 10 + '0';
         }
         else
         {
           if(hourTemp < 23)
             hourTemp += 1;
           else
             hourTemp = 0x00;
           timeSetBuff[H_L] = hourTemp%10+'0';
       timeSetBuff[H_H] = hourTemp/10+'0';
         }

  }

}
}


/*, */
/********************************************************************************************
* 函數(shù)名稱:定時器0中斷函數(shù)
* 功    能:定時器0溢出中斷入口處,定時10ms
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************************************************/
void timer0_overflow(void) interrupt 1
{
   TH0 = 0xdc;
   TL0 = 0x00;
   if(time_is_ok == 1)            //報警
     WARN_TRUMPET = ~WARN_TRUMPET;
   if(timer0Temp < 99)        //判斷1s是否到
       timer0Temp++;
   else                            //進中斷100次
   {
        timer0Temp = 0x00;           
            if(secondTemp < 59)   //判斷1min是否到         
                {
                  secondTemp++;
                }
                else
                {

                  secondTemp = 0x00;
                  if(minuteTemp < 59)  //判斷1hour是否到
                     minuteTemp++;
                 else
                  {
                    minuteTemp = 0x00;
                        if(hourTemp < 23)
                          hourTemp++;
                        else
                          hourTemp = 0x00;
                  }

                }  
   }
   timeSetBuff[S_L] = secondTemp%10+'0';
   timeSetBuff[S_H] = secondTemp/10+'0';
   timeSetBuff[M_L] = minuteTemp%10+'0';
   timeSetBuff[M_H] = minuteTemp/10+'0';
   timeSetBuff[H_L] = hourTemp%10+'0';
   timeSetBuff[H_H] = hourTemp/10+'0';
   sei();
}




回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日产久久 | 日韩超碰 | 在线观看免费av网 | 亚洲播放一区 | 国产精品久久福利 | 久久一区二区三区电影 | 在线亚洲欧美 | 国产 欧美 日韩 一区 | 国产日韩欧美在线观看 | 一级黄a| 久久久久久免费看 | 91视频亚洲 | 欧美亚洲一区二区三区 | 国产精品视频网站 | 久久久婷婷 | 精品视频一区二区三区 | 国产成人综合在线 | 色网站视频 | 一区二区免费高清视频 | 黄色大片免费看 | 欧美黄色一区 | 久久精品视频播放 | 91精品久久久久久久久中文字幕 | 久久天天躁狠狠躁夜夜躁2014 | www.狠狠操 | 91九色在线观看 | 久久久久久久一区 | 国产三级一区二区 | 亚洲日日操 | 亚洲第一免费播放区 | 久久手机视频 | 欧美日韩一区二区在线 | 亚洲欧美在线视频 | 手机三级电影 | 成人亚洲性情网站www在线观看 | 日批日韩在线观看 | 91大片| av在线免费不卡 | 亚洲一区二区三区四区五区午夜 | 日本不卡在线观看 | 龙珠z在线观看 |