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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2880|回復(fù): 1
收起左側(cè)

基于51單片機(jī)的LCD1602多功能時(shí)鐘,代碼分享,視頻講解

[復(fù)制鏈接]
ID:179958 發(fā)表于 2020-4-20 07:49 | 顯示全部樓層 |閱讀模式
記得剛?cè)腴T(mén)51時(shí),在51hei上學(xué)習(xí)到了很多,這一切都源于論壇和大家的無(wú)私奉獻(xiàn)。最近有空寫(xiě)了個(gè)基于51單片機(jī)的LCD1602多功能時(shí)玩玩,主要使用任務(wù)輪詢的思路來(lái)進(jìn)行設(shè)計(jì)的,我也來(lái)分享一下代碼,并做個(gè)視頻講解講解,視頻不知道怎么放上來(lái),今日頭條搜索“單片機(jī)程序零或壹”可以查看哦
51時(shí)鐘1602.png

基于51單片機(jī)的LCD1602多功能時(shí)鐘代碼分析.png

單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "keyfunc.h"
  3. #include "e2stc89.h"

  4. sbit LEDALARM = P1^7;
  5. sbit BUZZER = P3^7;

  6. //全局系統(tǒng)變量
  7. stSysDef stSys;
  8. //E2PROM保存的變量
  9. stSaveVerDef stSaveVer;

  10. void Timer0Init();
  11. void InitPageMainVar();
  12. void UpdateDs1302Time();
  13. void UpdateDs18b20Temp();
  14. void KeyProcess();

  15. void main()
  16. {
  17.     //硬件初始化
  18.     LcdInit();
  19.     Start18B20();
  20.     InitDS1302();
  21.    
  22.     GetSetFromE2prom();
  23.     InitPageMainVar();
  24.     GotoPageMain();

  25.     Timer0Init();
  26.     while(1)
  27.     {
  28.         UpdateDs1302Time();
  29.         UpdateDs18b20Temp();
  30.         KeyProcess();
  31.     }
  32. }

  33. void InitPageMainVar()
  34. {
  35.     memset(&stSys, 0, sizeof(stSys));
  36.     stSys.SecBkp = 88;
  37.     stSys.DayBkp = 88;
  38. }

  39. void KeyProcess()
  40. {
  41.     if(stSys.Flag10ms != 0)
  42.     {
  43.         stSys.Flag10ms = 0;
  44.         KeyAction();
  45.     }
  46. }

  47. void UpdateDs18b20Temp()
  48. {
  49.     s8 res = 0;

  50.     //只在主界面時(shí)更新顯示
  51.     if(stSys.PageNum != defPageMain)    return;

  52.     if(stSys.Flag1s != 0)
  53.     {
  54.         stSys.Flag1s = 0;
  55.         res = Get18B20Temp(&stSys.Temp);
  56.         if(res != 0){
  57.             LcdShowTemp(10, 1, stSys.Temp);
  58.         }
  59.         else{
  60.             LcdShowStr(10, 1, " **.*");
  61.         }
  62.         Start18B20();
  63.     }
  64. }

  65. void AlarmClockCheck()
  66. {
  67.     static u8 cnt10s = 0;
  68.     if(stSaveVer.AlarmSwitch != 0)
  69.     {
  70.         if(stSys.stTime.hour == stSaveVer.stAlarm.hour && \
  71.         stSys.stTime.min == stSaveVer.stAlarm.min && \
  72.         stSys.stTime.sec == stSaveVer.stAlarm.sec)
  73.         {
  74.             stSys.FlagAlarm = 1;
  75.         }
  76.     }

  77.     if(stSys.FlagAlarm != 0)
  78.     {
  79.         LEDALARM = !LEDALARM;
  80.         cnt10s++;
  81.         if(cnt10s >= 10)
  82.         {
  83.             cnt10s = 0;
  84.             stSys.FlagAlarm = 0;
  85.             LEDALARM = 1;
  86.         }
  87.     }
  88. }

  89. void UpdateDs1302Time()
  90. {
  91.     //只在主界面時(shí)更新顯示
  92.     if(stSys.PageNum != defPageMain)    return;

  93.     if(stSys.Flag200ms != 0)
  94.     {
  95.         stSys.Flag200ms = 0;
  96.         GetRealTime(&stSys.stTime);
  97.         if(stSys.SecBkp != stSys.stTime.sec)
  98.         {
  99.             stSys.SecBkp = stSys.stTime.sec;
  100.             LcdShowTime(1, 1, stSys.stTime);

  101.             if(stSys.DayBkp != stSys.stTime.day){
  102.                 stSys.DayBkp = stSys.stTime.day;
  103.                 LcdShowDate(0, 0, stSys.stTime);
  104.             }

  105.             AlarmClockCheck();
  106.         }
  107.     }
  108. }

  109. void Timer10MsAction()
  110. {
  111.     static s8 cnt200ms = 0;
  112.     static s8 cnt1s = 0;

  113.     cnt200ms++;
  114.     if(cnt200ms >= 20){
  115.         cnt200ms = 0;
  116.         stSys.Flag200ms = 1;
  117.     }

  118.     cnt1s++;
  119.     if(cnt1s >= 100){
  120.         cnt1s = 0;
  121.         stSys.Flag1s = 1;
  122.     }

  123.     stSys.Flag10ms = 1;
  124. }

  125. void Timer0Init()
  126. {
  127.     TMOD &= 0xF0;
  128.     TMOD |= 0x01;
  129.     TH0 = 0xFC;
  130.     TL0 = 0x66;
  131.     ET0 = 1;
  132.     TR0 = 1;
  133.     EA = 1;
  134. }

  135. //定時(shí)器中斷函數(shù),1ms一次
  136. void Timer0_ISR(void) interrupt 1
  137. {
  138.     static u8 cnt10ms = 0;
  139.     TH0 = 0xFC;
  140.     TL0 = 0x66;
  141.    
  142.     cnt10ms++;
  143.     if(cnt10ms >= 10){
  144.         cnt10ms = 0;
  145.         Timer10MsAction();
  146.     }
  147.    
  148.     if(LEDALARM == 0) {
  149.         BUZZER = !BUZZER;
  150.     }
  151. }
復(fù)制代碼

所有資料51hei提供下載:
基于51單片機(jī)的LCD1602多功能時(shí)鐘.rar (155.41 KB, 下載次數(shù): 42)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:325985 發(fā)表于 2025-6-4 17:09 | 顯示全部樓層
電原理圖呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色视频一区二区 | 日韩在线精品强乱中文字幕 | 欧美天堂| 国产精品国产三级国产aⅴ中文 | 午夜影院视频在线观看 | 免费午夜视频 | 精品伊人| h在线免费观看 | 免费国产一区二区 | 色婷婷精品国产一区二区三区 | 99久久精品国产麻豆演员表 | 国产成人网 | 欧洲精品在线观看 | 日韩毛片在线观看 | 精品国产乱码久久久久久影片 | 欧美日韩精品免费观看 | 一级毛片视频在线 | 黄免费观看视频 | 久久精品一区二区三区四区 | 国产精品视频在线观看 | 亚洲国产成人精品女人久久久 | 天天拍天天射 | 精品91久久| 久久99精品视频 | 亚洲成av片人久久久 | 伊人春色在线 | 中文字幕在线观看一区 | 国产欧美日韩一区 | 日韩欧美在线观看 | 成人在线观看欧美 | 久久一及片 | 伊人网影院| 亚洲精品久久久 | 91久久久久 | 午夜精品影院 | 国产一区二区三区免费观看视频 | 一区二区国产精品 | 国产综合精品一区二区三区 | 天天操天天插天天干 | 国产综合久久久久久鬼色 | 日韩欧美日韩在线 |