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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

1602+ds1302+stc89c52電子鬧鐘代碼+pcb文件+電路圖

  [復制鏈接]
跳轉到指定樓層
樓主
花了幾個星期制作了一個電子鬧鐘,能顯示自定義字符。三個按鍵調整時間和鬧鐘,主要是程序調試

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源代碼:
  1. #define  _MAIN_C
  2. #include "config.h"
  3. #include "Lcd1602.h"
  4. #include "keyboard.h"
  5. #include "DS1302.h"
  6. #include "DS18B20.h"
  7. #include "Time.h"
  8. #include "main.h"

  9. bit flag2s = 0;    //2s定時標志位
  10. bit flag200ms = 0; //200ms定時標志
  11. uint8 T0RH = 0;    //T0重載值的高字節
  12. uint8 T0RL = 0;    //T0重載值的低字節
  13. enum eStaSystem staSystem = E_NORMAL;  //系統運行狀態
  14. uint8 code table[]={0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,

  15. 0x00,0x00,0x0E,0x00,0x00,0x1F,0x00,0x00,

  16. 0x00,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,

  17. 0x00,0x1F,0x15,0x15,0x1B,0x11,0x1F,0x00,

  18. 0x00,0x1E,0x08,0x1E,0x0A,0x0A,0x0A,0x1F,

  19. 0x00,0x04,0x00,0x1F,0x0A,0x11,0x11,0x00,

  20. 0x00,0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,

  21. 0x00,0x04,0x0E,0x0E,0x0E,0x1F,0x00,0x0E };         

  22. void main()
  23. {
  24.         uint8 ledsj=0;
  25.     EA = 1;           //開總中斷
  26.     ConfigTimer0(1);  //配置T0定時1ms
  27.     InitDS1302();     //初始化實時時鐘模塊
  28.     InitLcd1602();    //初始化液晶模塊
  29.         LED=0;
  30.         WriteROM();
  31.     Start18B20();     //啟動首次溫度轉換
  32.      LcdShowStr(2, 0,"Zhao Wen jie");
  33.           LcdShowStr(0, 1,"Qichuangnaozhong");
  34.    while (!flag2s);  //上電后延時2秒
  35.     flag2s = 0;
  36.    LcdClearScreen();  //液晶清屏
  37.    RefreshDate(1);   //立即刷新日期顯示
  38.    RefreshTemp(1);   //立即刷新溫度顯示
  39.    RefreshTime();   //刷新當前時間

  40.    
  41.     while (1)  //進入主循環
  42.     {
  43.         KeyDriver();      //執行按鍵驅動
  44.                
  45.         if (flag200ms)    //每隔200ms執行以下分支
  46.         {
  47.             flag200ms = 0;
  48.                
  49.            
  50.            if (staSystem == E_NORMAL)  //正常運行時刷新日期顯示
  51.             {
  52.                                    AlarmMonitor();  //監控鬧鐘
  53.                                  if(key==0)
  54.                                          {
  55.                                         if(bakekey==0)
  56.                                                         {
  57.                                                                 LcdClearScreen();  //液晶清
  58.                                                                  RefreshDate(1);   //立即刷新日期顯示
  59.                                                              RefreshTemp(1);   //立即刷新溫度顯示
  60.                                                                 bakekey=1;
  61.                                                         }
  62.                                                   if(bakekey==1)
  63.                                                          {
  64.                                                                 RefreshTime();   //刷新當前時間
  65.                                                                  RefreshDate(0);   //立即刷新日期
  66.                                                         }
  67.                                                 else
  68.                                                 {
  69.                                                         ;;
  70.                                                 }                  
  71.                                         }
  72.                                 else
  73.                                          {
  74.                                                          LcdClearScreen();  //液晶清屏
  75.                                                      RefreshAlarm();
  76.                                         }   
  77.                         
  78.             }
  79.        }
  80.       if (flag2s)  //每隔2s執行以下分支
  81.         {
  82.                         flag2s = 0;
  83.                         if (staSystem == E_NORMAL)  //正常運行時刷新日期顯示
  84.                                 {
  85.                                          ledsj++;
  86.                                         if(ledsj>=30)
  87.                                                 {
  88.                                                         ledsj=0;
  89.                                                         LED=1;
  90.                                                 }
  91.                     
  92.                              RefreshTemp(0);
  93.                                }
  94.         }
  95.     }         
  96. }
  97. /* 溫度刷新函數,讀取當前溫度并根據需要刷新液晶顯示,
  98. ** ops-刷新選項:為0時只當溫度變化才刷新,非0則立即刷新 */
  99. void RefreshTemp(uint8 ops)
  100. {
  101.     int16 temp;
  102.     uint8 pdata str[8];
  103.     static int16 backup = 0;
  104.    
  105.     Get18B20Temp(&temp); //獲取當前溫度值16bit
  106.     Start18B20();        //啟動下一次轉換
  107.     temp >>= 4;          //舍棄4bit小數位
  108.     if ((backup!=temp) || (ops!=0)) //按需要刷新液晶顯示
  109.     {
  110.                 if((temp>>7)&0x1f)
  111.                         {
  112.                           LcdShowChar(12, 1, '-');
  113.                           temp=(uint8)temp<<5;
  114.                           temp=~(temp)+1;
  115.                         }

  116.         str[0] = (temp/10) + '0';  //十位轉為ASCII碼
  117.         str[1] = (temp%10) + '0';  //個位轉為ASCII碼      
  118.         str[2] = 'C';
  119.         str[3] = '\0';             //字符串結束符
  120.         LcdShowStr(13, 1, str);    //顯示到液晶上
  121.         backup = temp;             //刷新上次溫度值
  122.     }
  123. }
  124. /* 配置并啟動T0,ms-T0定時時間 */
  125. void ConfigTimer0(uint16 ms)
  126. {
  127.     uint32 tmp;
  128.    
  129.     tmp = (SYS_MCLK*ms)/1000; //計算所需的計數值
  130.     tmp = 65536 - tmp;        //計算定時器重載值
  131.     tmp = tmp + 33;           //補償中斷響應延時造成的誤差   
  132.     T0RH = (uint8)(tmp>>8);   //定時器重載值拆分為高低字節
  133.     T0RL = (uint8)tmp;
  134.     TMOD &= 0xF0;   //清零T0的控制位
  135.     TMOD |= 0x01;   //配置T0為模式1
  136.     TH0 = T0RH;     //加載T0重載值
  137.     TL0 = T0RL;
  138.     ET0 = 1;        //使能T0中斷
  139.     TR0 = 1;        //啟動T0
  140. }
  141. /* T0中斷服務函數,實現系統定時和按鍵掃描 */
  142. void InterruptTimer0() interrupt 1
  143. {
  144.     static uint8 tmr2s = 0;
  145.     static uint8 tmr200ms = 0;
  146.    
  147.     TH0 = T0RH;  //重新加載重載值
  148.     TL0 = T0RL;
  149.     tmr200ms++;  //定時200ms
  150.     if (tmr200ms >= 200)
  151.     {
  152.         tmr200ms = 0;
  153.         flag200ms = 1;
  154.         tmr2s++;  //定時2s
  155.         if (tmr2s >= 10)
  156.         {
  157.             tmr2s = 0;
  158.             flag2s = 1;
  159.         }
  160.     }
  161.     KeyScan();   //執行按鍵掃描
  162. }
  163.   void WriteROM()
  164.   {
  165.   uint8 i=0;
  166.    LcdWriteCmd(0x40);
  167.    for(i=0;i<64;i++)
  168.    {
  169.         LcdWriteDat(table[i]);
  170.    }
  171.    }
  172. 其他子程序在附件中。
復制代碼


全部資料51hei下載地址:
電路圖.rar (2.89 MB, 下載次數: 106)
c.rar (107.45 KB, 下載次數: 102)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:425825 發表于 2018-11-13 17:12 | 只看該作者
要是能提供下實物照片看看多好
回復

使用道具 舉報

板凳
ID:425732 發表于 2018-11-14 13:56 | 只看該作者
來51學習 發表于 2018-11-13 17:12
要是能提供下實物照片看看多好

圖片沒上傳上去。然后我不知道怎么能。
回復

使用道具 舉報

地板
ID:229304 發表于 2018-11-20 23:54 | 只看該作者
鬧鐘如何調?文件里面沒有說明
回復

使用道具 舉報

5#
ID:229304 發表于 2018-11-21 00:52 | 只看該作者
原理圖里面的LED指的是什么?
回復

使用道具 舉報

6#
ID:270331 發表于 2018-12-10 19:21 | 只看該作者
程序很規范,一看就是行家里手,贊一個!
回復

使用道具 舉報

7#
ID:443824 發表于 2018-12-11 09:34 | 只看該作者
這是個高手
回復

使用道具 舉報

8#
ID:404878 發表于 2018-12-11 13:57 | 只看該作者
看看程序自己也仿照著試試
回復

使用道具 舉報

9#
ID:683548 發表于 2020-1-8 14:24 來自手機 | 只看該作者
很贊哦希望可以做出實物
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩一 | 亚州精品天堂中文字幕 | 成人免费大片黄在线播放 | 国产精品成人一区二区三区 | 国产精品久久久久久一区二区三区 | 免费毛片网站在线观看 | 国产一区亚洲 | 人人做人人澡人人爽欧美 | 欧美成人精品在线 | 精品久久99 | 神马久久久久久久久久 | 亚洲免费一区二区 | 在线高清免费观看视频 | 全部免费毛片在线播放网站 | 国产一区二区三区在线 | 免费九九视频 | 亚洲精品一区二区三区丝袜 | 欧美一区二区三区在线观看 | 国产精品九九视频 | 亚洲黄色高清视频 | 国产精品美女久久久免费 | 午夜一级做a爰片久久毛片 精品综合 | 365夜爽爽欧美性午夜免费视频 | 一级毛片免费完整视频 | 国产亚洲一区二区三区 | 中国一级特黄真人毛片 | 亚洲国产精品日韩av不卡在线 | 99免费看 | 中文字幕一区二区三区精彩视频 | 欧美激情综合色综合啪啪五月 | 91视在线国内在线播放酒店 | 日本不卡免费新一二三区 | 国产欧美精品一区二区三区 | 亚洲精品在线视频 | 香蕉一区二区 | 亚洲欧洲精品在线 | 亚洲成人播放器 | 91丨九色丨国产在线 | 色综合久久久久 | 国产高清在线精品 | 亚洲欧美另类在线观看 |