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

標題: 數碼管電子鐘設計,具有鬧鐘功能(仿真+源程序)分享 [打印本頁]

作者: 物業tuan    時間: 2020-6-16 09:33
標題: 數碼管電子鐘設計,具有鬧鐘功能(仿真+源程序)分享
51單片機電子鐘設計,功能如下
1.具有時間校準功能;
2.具有鬧鐘功能;
3.可以顯示時、分、秒;

鬧鐘設置界面



電子時鐘系統.zip (92.97 KB, 下載次數: 86)

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

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

/********************************************************************************************
* 函數名稱:定時器0
* 功    能:定時器0初始化
* 入口參數:無
* 出口參數:無
*********************************************************************************************/          
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 中斷使能
}

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

/********************************************************************************************
* 函數名稱:主函數
* 功    能:調用并執行各個子函數
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
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;     //默認狀態停止
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';
         }

  }

}
}


/*, */
/********************************************************************************************
* 函數名稱:定時器0中斷函數
* 功    能:定時器0溢出中斷入口處,定時10ms
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
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();
}









歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品视频在线播放 | 日韩欧美成人一区二区三区 | 欧州一区二区三区 | 综合一区二区三区 | 高清一区二区三区 | 亚洲国产看片 | 三级av网址 | 国产精品久久久久久久久 | 亚洲精品av在线 | 啪啪综合网 | 精品国产乱码久久久久久88av | 天天操天天怕 | 国产日韩精品久久 | a视频在线观看 | 国产精品九九九 | 亚洲欧美激情四射 | 中日韩毛片| 国产精品久久久亚洲 | 亚洲成人毛片 | 一级毛片视频免费观看 | 天堂一区二区三区四区 | 成人一区二 | 91精品久久久久久久久久入口 | 精品国产欧美 | 国产午夜精品久久久久免费视高清 | 99久久婷婷国产综合精品电影 | 久久久国产一区 | 天天影视色综合 | 日韩视频在线一区二区 | 欧美成人影院在线 | 久久久国产一区二区三区 | 三区四区在线观看 | 亚洲91视频 | 成年无码av片在线 | 日日操夜夜干 | 亚洲色图婷婷 | 精品国产欧美 | 成人av一区 | 在线免费观看黄a | 久久精品久久精品久久精品 | 亚洲视频在线看 |