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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4447|回復: 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ⅴ码 | 国产精品成人一区二区三区 | 日一区二区 | 国产视频久久 | 在线观看中文字幕 | www国产成人免费观看视频,深夜成人网 | 国产精品久久久久久久久免费软件 | 欧美一级片在线看 | 欧美一区二区视频 | 精品无码久久久久久国产 | 日韩欧美一区二区三区免费观看 | 国产高清精品一区二区三区 | 亚洲国产免费 | 免费99精品国产自在在线 | 精品久久不卡 | 日本精品一区二区三区在线观看视频 | 精区3d动漫一品二品精区 | 国产精品一区二区福利视频 | 午夜电影合集 | 久久久999精品 | 国产精品成人一区二区三区 | 五月激情婷婷网 | 91福利在线观看视频 | 国产一区在线免费观看 | 激情久久网| 成人欧美一区二区三区在线播放 | 免费a在线 | 在线国产小视频 | 91 视频网站 | 精品亚洲永久免费精品 | 亚洲毛片| 色婷婷精品久久二区二区蜜臂av | 亚洲精品大全 | 久久综合久色欧美综合狠狠 | 狠狠久| 在线观看亚洲精品 | www.国产精 | 亚洲九色 | 日韩一区中文字幕 |