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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

買的創(chuàng)意旋轉(zhuǎn)時鐘,自己添加ESP8266網(wǎng)絡(luò)自動校時功能 附程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:489769 發(fā)表于 2019-3-14 15:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
前段時間t 寶買了個創(chuàng)意旋轉(zhuǎn)時鐘

用了一段時間感覺走時不準(zhǔn), 打算加個自動校時功能就自己重寫了單片機(jī)程序并配了個ESP8266的模塊
現(xiàn)在終于不用再手工校對時間了,而且還有18650電池,可以充電



單片機(jī)程序
  1. #include <global.h>
  2. #include <stdio.h>
  3. #include "DS1302.h"
  4. #include "DS18B20.h"

  5. //-----------------------------------------------

  6. /* define constants */
  7. #define FOSC 12000000
  8. #define BAUD 19200           //UART baudrate

  9. bit UpdateDisp,UpdateTime,ShowTemp,CapTemp,TempChange,UpdateMsg,ShowFlag;

  10. static uint8 ss=0;
  11. static uint16 ms=0;

  12. #define CommBufSize 0x3F
  13. struct tcomm_buf{
  14.     uint8 sendBuf[CommBufSize],receBuf[CommBufSize];
  15.     uint8        receTimeOut;
  16.     uint8        sendCount;                //發(fā)送字節(jié)個數(shù)
  17.     uint8        receCount;            //接收到的字節(jié)個數(shù)
  18.     uint8        sendPosi;            //發(fā)送位置
  19. };

  20. struct tcomm_buf xdata comm1_data;
  21. /*
  22. void Delay1ms()                //@12.000MHz
  23. {
  24.         unsigned char i, j;

  25.         i = 2;
  26.         j = 239;
  27.         do
  28.         {
  29.                 while (--j);
  30.         } while (--i);
  31. }
  32. void Delayms(uint16 c)                //@12.000MHz
  33. {
  34.         while(c--)
  35.         Delay1ms();
  36. }
  37. */

  38. void Uart_Check(void);

  39. void UpdateLed(void){
  40.     P3= P3|0xF0;  //高四位數(shù)碼管  P3.1 P3.2 串口  P3.2  MODE  P3.3 Plus      
  41.     P2=0xFF;
  42.     P0=~(1<<(sec%8));  //Led/數(shù)碼管公用IO
  43.     P2=~(1<<(sec/8));  //led
  44. }

  45. const uint8 NixieMap[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x9C,0xFF};


  46. void UpdateNixie(uint8 l){
  47.     int8 tmpVal;
  48.     P2=0xFF;  //led
  49.     P3=(P3|0xF0);
  50.     P0= 0xFF;
  51.     if(ShowTemp){
  52.         switch(l){
  53.             case 0:
  54.                 tmpVal = Temp1/10;
  55.                 break;
  56.             case 1:
  57.                 tmpVal = Temp1%10;
  58.                 break;
  59.             case 2:
  60.                 tmpVal = 16;
  61.                 break;
  62.             case 3:
  63.                 tmpVal = 0x0C;
  64.                 break;
  65.         }
  66.         P0= NixieMap[tmpVal];  //Led/數(shù)碼管公用IO        
  67.     }
  68.     else
  69.     {  
  70.         switch(l){
  71.             case 0:
  72.                 tmpVal =  hour/10;
  73.                 //P0= 0xC0;
  74.                 //P3=0xE0|(P3&0x0F);
  75.                 break;
  76.             case 1:
  77.                 tmpVal =  hour%10;
  78.                 //P0= 0xF9;
  79.                 //P3=0xD0|(P3&0x0F);
  80.                 break;
  81.             case 2:
  82.                 tmpVal = min/10;
  83.                 //P0= 0xA4;
  84.                 //P3=0xB0|(P3&0x0F);
  85.                 break;
  86.             case 3:
  87.                 tmpVal = min%10;
  88.                 //P0= 0xB0;
  89.                 //P3=0x70|(P3&0x0F);
  90.                 break;
  91.         }
  92.         if(l==1&&ShowFlag)
  93.             P0= NixieMap[tmpVal] & 0x7F;  //Led/數(shù)碼管公用IO
  94.         else
  95.             P0= NixieMap[tmpVal];  //Led/數(shù)碼管公用IO
  96.     }
  97.     P3=(~(1<<(l+4)))|(P3 & 0x0F);  //高四位數(shù)碼管  P3.0 P3.1 串口  P3.2  MODE  P3.3 Plus      
  98. }

  99. //void UartInit(void)                //115200bps@22.1184MHz
  100. //{
  101. //        PCON |= 0x80;                //使能波特率倍速位SMOD
  102. //        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  103. //        AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
  104. //        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  105. //        TMOD &= 0x0F;                //清除定時器1模式位
  106. //        TMOD |= 0x20;                //設(shè)定定時器1為8位自動重裝方式
  107. //        TL1 = 0xFF;                //設(shè)定定時初值
  108. //        TH1 = 0xFF;                //設(shè)定定時器重裝值
  109. //        ET1 = 0;                //禁止定時器1中斷
  110. //        TR1 = 1;                //啟動定時器1
  111. //    ES=1;
  112. //}

  113. //void UartInit(void)                //19200bps@22.1184MHz
  114. //{
  115. //        PCON &= 0x7F;                //波特率不倍速
  116. //        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  117. //        AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
  118. //        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  119. //        TMOD &= 0x0F;                //清除定時器1模式位
  120. //        TMOD |= 0x20;                //設(shè)定定時器1為8位自動重裝方式
  121. //        TL1 = 0xFD;                //設(shè)定定時初值
  122. //        TH1 = 0xFD;                //設(shè)定定時器重裝值
  123. //        ET1 = 0;                //禁止定時器1中斷
  124. //        TR1 = 1;                //啟動定時器1
  125. //    ES=1;
  126. //}

  127. void UartInit(void)                //9600bps@22.1184MHz
  128. {
  129.         PCON &= 0x7F;                //波特率不倍速
  130.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  131.         AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
  132.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  133.         TMOD &= 0x0F;                //清除定時器1模式位
  134.         TMOD |= 0x20;                //設(shè)定定時器1為8位自動重裝方式
  135.         TL1 = 0xFA;                //設(shè)定定時初值
  136.         TH1 = 0xFA;                //設(shè)定定時器重裝值
  137.         ET1 = 0;                //禁止定時器1中斷
  138.         TR1 = 1;                //啟動定時器1
  139.     ES=1;
  140. }


  141. //void Timer0Init(void)                //1毫秒@22.1184MHz
  142. //{
  143. //        AUXR &= 0x7F;                //定時器時鐘12T模式
  144. //        TMOD &= 0xF0;                //設(shè)置定時器模式
  145. //        TL0 = 0x00;                //設(shè)置定時初值
  146. //        TH0 = 0xB8;                //設(shè)置定時初值
  147. //        TF0 = 0;                //清除TF0標(biāo)志
  148. //        TR0 = 1;                //定時器0開始計時
  149. //    ET0 = 1;                        //enable timer0 interrupt   
  150. //}

  151. void Timer0Init(void)                //25毫秒@22.1184MHz
  152. {
  153.         AUXR &= 0x7F;                //定時器時鐘12T模式
  154.         TMOD &= 0xF0;                //設(shè)置定時器模式
  155.         TL0 = 0x00;                //設(shè)置定時初值
  156.         TH0 = 0x4C;                //設(shè)置定時初值
  157.         TF0 = 0;                //清除TF0標(biāo)志
  158.         TR0 = 1;                //定時器0開始計時
  159.     ET0 = 1;                        //enable timer0 interrupt   
  160. }


  161. /* Timer0 interrupt routine */
  162. void tm0_isr() interrupt 1 using 1
  163. {
  164.     UpdateDisp=1;
  165.     ShowFlag = ms<122;
  166.     if(ms++>222){
  167.         ms=0;
  168.         sec++;
  169.         switch(sec%4){
  170.             case 1:
  171.                 TempChange=1;
  172.                 break;
  173.             case 2:
  174.                 CapTemp=1;
  175.                 break;
  176.             case 3:
  177.                 //ShowTemp=1;
  178.                 break;
  179.         }
  180.         
  181.         if(sec>=60){
  182.             sec=0;
  183.             UpdateTime=1;
  184.         }
  185.         if((sec%5)>=3){
  186.             ShowTemp=1;
  187.         }
  188.         else
  189.             ShowTemp=0;
  190.     }
  191. }

  192. void WaitMs(void){
  193.     while(UpdateDisp==0);
  194. }


  195. void main()
  196. {
  197.     P0=0xFF;  //Led/數(shù)碼管公用IO
  198.     P1=0xFF;  // 蜂鳴器  P1.0 18B20  P1.1 P1.2 P1.3  DS1302
  199.     P2=0xFF;  //led
  200.     P3=0xFF;  //高四位數(shù)碼管  P3.0 P3.1 串口  P3.2  MODE  P3.3 Plus  
  201.     ShowFlag = 0;
  202.     ShowTemp = 0;

  203.     comm1_data.sendCount=0;   
  204.     comm1_data.sendPosi=0;   

  205.         UartInit();
  206.     Timer0Init();

  207.     EA = 1;                 //Open master interrupt switch

  208.     printf("STC89-90xx\r\nUart Test !\r\n");
  209.     DS1302_readtime();
  210.    
  211. //    year=18;
  212. //    month=11;
  213. //    day=2;
  214. //    hour=14;
  215. //    min=32;
  216. //    sec=0;
  217. //   
  218. //    DS1302_Write();
  219.    
  220.     //P0=0x1;   
  221.     //uint8 c=1;
  222.     while(1){
  223.         Uart_Check();
  224.         UpdateNixie(0);
  225.         WaitMs();
  226.         UpdateNixie(1);
  227.         WaitMs();
  228.         UpdateNixie(2);
  229.         WaitMs();
  230.         UpdateNixie(3);
  231.         WaitMs();
  232.         UpdateLed();
  233.         if(UpdateTime){
  234.             UpdateTime=0;
  235.             DS1302_readtime();//sec,min,hour,day,month,week,year
  236.             printf("Update Time %02d-%02d-%02d  %02d:%02d:%02d\r\n",year,month,day,hour,min,sec);
  237.         }
  238.         if(TempChange){
  239.             TempChange=0;
  240.             Start_Change();
  241.         }        
  242.         if(CapTemp){
  243.             CapTemp=0;
  244.             Read_Temperature();
  245.         }        
  246. //        if(ShowTemp){
  247. //            ShowTemp=0;
  248. //            printf("Temperature: %.1f\r\n",Temp);
  249. //        }
  250.         WaitMs();
  251.     }
  252. }


  253. /*----------------------------
  254. UART interrupt service routine
  255. ----------------------------*/
  256. void Uart_Isr() interrupt 4 using 1
  257. {
  258.         if(TI)
  259.         {
  260.                 TI = 0;
  261.                 if(comm1_data.sendPosi < comm1_data.sendCount)
  262.                 {
  263.                         SBUF = comm1_data.sendBuf[comm1_data.sendPosi++];
  264.                 }
  265.                 else
  266.                 {
  267.             comm1_data.sendPosi = 0;
  268.             comm1_data.sendCount = 0;
  269.                         comm1_data.receCount = 0;   //清接收地址偏移寄存器
  270.                 }
  271.         }
  272.         else if(RI)
  273.         {
  274.                 RI = 0;
  275.                 comm1_data.receTimeOut = 5;    //通訊超時值
  276. ……………………

  277. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

NewClock.7z (15.95 KB, 下載次數(shù): 182)
esp8266程序(基于Arduino)
TimeNTP_ESP8266WiFi.7z (2.08 KB, 下載次數(shù): 179)

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:406598 發(fā)表于 2019-3-16 09:24 | 只看該作者
樓主 這個需要連手機(jī)  用網(wǎng)絡(luò)校準(zhǔn)嗎?那個基于安卓什么意思
回復(fù)

使用道具 舉報

板凳
ID:489769 發(fā)表于 2019-3-19 11:14 | 只看該作者
鳳的情緒 發(fā)表于 2019-3-16 09:24
樓主 這個需要連手機(jī)  用網(wǎng)絡(luò)校準(zhǔn)嗎?那個基于安卓什么意思

Arduino 不是安卓哦, 這個不需要手機(jī)的,只要有wifi就可以
回復(fù)

使用道具 舉報

地板
ID:374219 發(fā)表于 2019-3-24 09:51 | 只看該作者
沒有圖紙嗎
回復(fù)

使用道具 舉報

5#
ID:67537 發(fā)表于 2019-5-9 14:34 | 只看該作者
沒有看懂,為什么還要用單獨的單片機(jī)和DS1302,8266完全可以勝任還節(jié)省器件
回復(fù)

使用道具 舉報

6#
ID:12816 發(fā)表于 2019-5-16 13:06 | 只看該作者
你這程序外圈不會亮吧
回復(fù)

使用道具 舉報

7#
ID:565553 發(fā)表于 2019-6-18 11:56 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

8#
ID:615301 發(fā)表于 2020-6-3 21:16 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

9#
ID:26508 發(fā)表于 2020-6-6 21:57 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

10#
ID:103696 發(fā)表于 2020-6-7 12:46 | 只看該作者
其實直接用NodeMCU就行啦,要驅(qū)動LED只要加HC595就行,根本不用用STC單片機(jī)
回復(fù)

使用道具 舉報

11#
ID:64253 發(fā)表于 2020-8-12 10:56 | 只看該作者
看了半天沒研究出個啥,
回復(fù)

使用道具 舉報

12#
ID:800754 發(fā)表于 2021-5-8 14:09 | 只看該作者
太好了,有個同樣的鬧鐘
回復(fù)

使用道具 舉報

13#
ID:59830 發(fā)表于 2021-5-8 18:04 | 只看該作者
看了你改動的,硬件改動不大,也合理,挺好.
我也買過  測試了一下.
1. 18650 電池 (1600MA)  升壓5V   3天左右充一次電.
2. 蜂鳴器 聲音(嘀嘀響  赤耳).
3. 設(shè)置時間鬧鐘參數(shù)時   數(shù)碼管顯示(有些人不一定會調(diào)) 局限性,看說明書才會吧.
4. 如果 改時鐘DS3231 芯片,時間誤差小,價格貴些.
5.  好的地方  花樣燈  可以.
6.  好的地方 初學(xué)者練習(xí)焊接 動手能力 學(xué)習(xí)不錯.

回復(fù)

使用道具 舉報

14#
ID:242753 發(fā)表于 2021-5-9 10:14 | 只看該作者
增加自動校時,是個不錯的主意!
回復(fù)

使用道具 舉報

15#
ID:622100 發(fā)表于 2021-6-20 12:37 | 只看該作者
yyhhgg 發(fā)表于 2019-5-9 14:34
沒有看懂,為什么還要用單獨的單片機(jī)和DS1302,8266完全可以勝任還節(jié)省器件

樓主是不想放棄這個時鐘外圈的燈效吧
回復(fù)

使用道具 舉報

16#
ID:79874 發(fā)表于 2023-3-23 05:28 來自手機(jī) | 只看該作者
能提供下設(shè)計資料嗎
回復(fù)

使用道具 舉報

17#
ID:106272 發(fā)表于 2023-4-4 21:41 | 只看該作者
好東西,標(biāo)記一下
回復(fù)

使用道具 舉報

18#
ID:1112603 發(fā)表于 2024-5-5 16:09 | 只看該作者
這玩意兒誤差太大,加個網(wǎng)絡(luò)校時功能廢物再利用,還不錯。
回復(fù)

使用道具 舉報

19#
ID:76044 發(fā)表于 2024-5-23 17:08 | 只看該作者
樓主,能否指點一下,我制作的時鐘是DS1302走時,8266網(wǎng)絡(luò)單片機(jī)串口接收校準(zhǔn),它們之間如何轉(zhuǎn)換,我發(fā)現(xiàn)DS1302是16進(jìn)制,8266串口接收是十進(jìn)制,我一直沒搞定不知如何轉(zhuǎn)換,單獨的程序都可以用,請樓主不吝賜教
回復(fù)

使用道具 舉報

20#
ID:1043730 發(fā)表于 2024-5-25 12:49 | 只看該作者
哇,謝謝樓主,我也要做一個
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美专区在线视频 | 综合色站导航 | 日韩国产在线观看 | 欧美8一10sex性hd | 久久久久国产精品一区三寸 | 97视频在线观看免费 | 欧美福利一区 | 一区二区av | 男人av的天堂 | 成人国产免费视频 | 国产高清在线精品 | 中文字幕亚洲视频 | 美女黄频 | 秋霞精品| 91极品视频 | 成人亚洲性情网站www在线观看 | av网站免费 | 中文字幕国产 | 久久久精彩视频 | 日韩亚洲视频 | 精品国产乱码久久久久久影片 | 欧美日韩在线观看一区 | 国产精品69av | 中文字幕亚洲一区二区三区 | 久久99精品久久久 | 97免费在线视频 | 国产伦精品一区二区三区高清 | 日本免费一区二区三区四区 | 精品伦精品一区二区三区视频 | 中文字幕在线观看视频一区 | 欧美11一13sex性hd | 精品一区二区久久久久久久网站 | 毛片免费视频 | 日韩欧美久久精品 | 中文字幕日韩欧美一区二区三区 | 中文字幕在线看 | 91精品国产91久久久久久吃药 | 午夜一区 | 天天综合久久 | 99久久久久 | 久久久久久艹 |