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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2770|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于STC89C52+DS1302+DS18B20+LCD1602的多功能電子鐘

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1002955 發(fā)表于 2022-4-6 10:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
Multi-function electronic clock
多功能電子鐘


一、流程圖


二、功能:
> 1.走時,用DS1302
>
> 2.顯示,點陣,LED,數(shù)碼管,液晶1602
>
> 3.輸入校時,按鍵,遙控器
>
> 4.鬧鐘,蜂鳴器
>
> 5.溫度,DS18B20
  1. /***********************************************************************************
  2. ;功能說明:多功能電子鐘
  3. ;文件名稱:main.c     
  4. ;版本號:v1.0.0  
  5. ;微處理器:STC89C52
  6. ;編譯環(huán)境:Keil uVision V4.10
  7. ;作    者:Xinghai
  8. ;創(chuàng)建日期:2022.4.3   
  9. ;***********************************************************************************/

  10. #define  _MAIN_C
  11. #include "config.h"
  12. #include "Lcd1602.h"
  13. #include "LedBuzzer.h"
  14. #include "keyboard.h"
  15. #include "DS1302.h"
  16. #include "DS18B20.h"
  17. #include "Infrared.h"
  18. #include "Time.h"
  19. #include "main.h"

  20. bit flag2s = 0;    //2s定時標(biāo)志位
  21. bit flag200ms = 0; //200ms定時標(biāo)志
  22. uint8 T0RH = 0;    //T0重載值的高字節(jié)
  23. uint8 T0RL = 0;    //T0重載值的低字節(jié)
  24. enum eStaSystem staSystem = E_NORMAL;  //系統(tǒng)運行狀態(tài)

  25. void main()
  26. {
  27.     EA = 1;           //開總中斷
  28.     ConfigTimer0(1);  //配置T0定時1ms
  29.     InitLed();        //初始化LED模塊
  30.     InitDS1302();     //初始化實時時鐘模塊
  31.     InitInfrared();   //初始化紅外接收模塊
  32.     InitLcd1602();    //初始化液晶模塊
  33.     Start18B20();     //啟動首次溫度轉(zhuǎn)換
  34.    
  35.     while (!flag2s);  //上電后延時2秒
  36.     flag2s = 0;
  37.     RefreshTime();    //刷新當(dāng)前時間
  38.     RefreshDate(1);   //立即刷新日期顯示
  39.     RefreshTemp(1);   //立即刷新溫度顯示
  40.     RefreshAlarm();   //鬧鐘設(shè)定值顯示
  41.    
  42.     while (1)  //進(jìn)入主循環(huán)
  43.     {
  44.         KeyDriver();      //執(zhí)行按鍵驅(qū)動
  45.         InfraredDriver(); //執(zhí)行紅外接收驅(qū)動
  46.         if (flag200ms)    //每隔200ms執(zhí)行以下分支
  47.         {
  48.             flag200ms = 0;
  49.             FlowingLight();  //流水燈效果實現(xiàn)
  50.             RefreshTime();   //刷新當(dāng)前時間
  51.             AlarmMonitor();  //監(jiān)控鬧鐘
  52.             if (staSystem == E_NORMAL)  //正常運行時刷新日期顯示
  53.             {
  54.                 RefreshDate(0);
  55.             }
  56.         }
  57.         if (flag2s)  //每隔2s執(zhí)行以下分支
  58.         {
  59.             flag2s = 0;
  60.             if (staSystem == E_NORMAL)  //正常運行時刷新溫度顯示
  61.             {
  62.                 RefreshTemp(0);
  63.             }
  64.         }
  65.     }
  66. }
  67. /* 溫度刷新函數(shù),讀取當(dāng)前溫度并根據(jù)需要刷新液晶顯示,
  68. ** ops-刷新選項:為0時只當(dāng)溫度變化才刷新,非0則立即刷新 */
  69. void RefreshTemp(uint8 ops)
  70. {
  71.     int16 temp;
  72.     uint8 pdata str[8];
  73.     static int16 backup = 0;
  74.    
  75.     Get18B20Temp(&temp); //獲取當(dāng)前溫度值
  76.     Start18B20();        //啟動下一次轉(zhuǎn)換
  77.     temp >>= 4;          //舍棄4bit小數(shù)位
  78.     if ((backup!=temp) || (ops!=0)) //按需要刷新液晶顯示
  79.     {
  80.         str[0] = (temp/10) + '0';  //十位轉(zhuǎn)為ASCII碼
  81.         str[1] = (temp%10) + '0';  //個位轉(zhuǎn)為ASCII碼
  82.         str[2] = '\'';             //用'C代替℃
  83.         str[3] = 'C';
  84.         str[4] = '\0';             //字符串結(jié)束符
  85.         LcdShowStr(12, 0, str);    //顯示到液晶上
  86.         backup = temp;             //刷新上次溫度值
  87.     }
  88. }
  89. /* 配置并啟動T0,ms-T0定時時間 */
  90. void ConfigTimer0(uint16 ms)
  91. {
  92.     uint32 tmp;
  93.    
  94.     tmp = (SYS_MCLK*ms)/1000; //計算所需的計數(shù)值
  95.     tmp = 65536 - tmp;        //計算定時器重載值
  96.     tmp = tmp + 33;           //補償中斷響應(yīng)延時造成的誤差   
  97.     T0RH = (uint8)(tmp>>8);   //定時器重載值拆分為高低字節(jié)
  98.     T0RL = (uint8)tmp;
  99.     TMOD &= 0xF0;   //清零T0的控制位
  100.     TMOD |= 0x01;   //配置T0為模式1
  101.     TH0 = T0RH;     //加載T0重載值
  102.     TL0 = T0RL;
  103.     ET0 = 1;        //使能T0中斷
  104.     TR0 = 1;        //啟動T0
  105. }
  106. /* T0中斷服務(wù)函數(shù),實現(xiàn)系統(tǒng)定時和按鍵掃描 */
  107. void InterruptTimer0() interrupt 1
  108. {
  109.     static uint8 tmr2s = 0;
  110.     static uint8 tmr200ms = 0;
  111.    
  112.     TH0 = T0RH;  //重新加載重載值
  113.     TL0 = T0RL;
  114.     tmr200ms++;  //定時200ms
  115.     if (tmr200ms >= 200)
  116.     {
  117.         tmr200ms = 0;
  118.         flag200ms = 1;
  119.         tmr2s++;  //定時2s
  120.         if (tmr2s >= 10)
  121.         {
  122.             tmr2s = 0;
  123.             flag2s = 1;
  124.         }
  125.     }
  126.     KeyScan();   //執(zhí)行按鍵掃描
  127. }
復(fù)制代碼



三、開源鏈接
github/cuixh11/Multi-function-electronic-clock

四、附件
Keil代碼.7z (415.14 KB, 下載次數(shù): 104)





評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1048039 發(fā)表于 2023-3-16 10:29 | 只看該作者
有仿真的圖片和文件嘛
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线观看中文字幕 | 成人国产精品久久 | 98成人网 | 色吧综合网 | 国产精品一区久久久 | 91久久久久久久久久久 | 欧美一区免费 | 日韩精品免费在线观看 | 又爽又黄axxx片免费观看 | 午夜噜噜噜 | 国产成人精品午夜 | 欧美淫片 | 狠狠色综合欧美激情 | 欧美一区二区 | av毛片在线免费观看 | 日批免费在线观看 | 亚洲精选一区二区 | 国产精品一区二区久久 | 一区二区免费在线观看 | 成人国产精品久久久 | 99久久精品国产麻豆演员表 | 国产精品福利视频 | 久久精品成人 | 免费精品| 大学生a级毛片免费视频 | 国产精品亚洲一区 | 欧美日韩亚洲一区 | 国产成人精品视频在线观看 | 久久国产精品久久久久久久久久 | 深爱激情综合 | 久久综合一区二区 | 亚洲一区二区在线 | 欧美一级在线观看 | 国产激情在线 | 亚洲一区二区三区四区在线观看 | av国产精品 | 成人片在线看 | 在线色网址 | 在线观看你懂的网站 | 亚洲综合久久久 | 一区二区三区成人 |