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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4420|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
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();
}




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级做a爰片性色毛片16 | 颜色网站在线观看 | 久久99精品国产 | 成人影视网址 | 国产精品免费av | 99久久99久久精品国产片果冰 | 91麻豆精品国产91久久久久久 | 国产精品久久久久久久久久三级 | 国产精品综合一区二区 | 国产精品日韩欧美一区二区三区 | 亚洲欧洲中文 | jizz亚洲人| 久久久精品一区 | 日韩一区二区在线视频 | 欧美日韩精品 | 国产精品免费在线 | 在线播放亚洲 | 国产一区二区影院 | 久久久久久久一级 | 久久久久91 | 一区二区三区国产 | www.av在线| 青青草在线视频免费观看 | 精品国产乱码久久久久久丨区2区 | 成人在线欧美 | 一区二区三区四区在线免费观看 | 欧美成人a | 欧美精品综合在线 | 伊人狠狠 | 综合二区 | 天天射影院 | 久草精品视频 | 久久久久成人精品 | 亚洲视频欧美视频 | 2022精品国偷自产免费观看 | 欧美videosex性极品hd | 欧美一区视频 | 91亚洲精华国产 | 午夜亚洲 | 成人精品一区二区 | 中文字幕日韩在线观看 |