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

標題: arduino控制lcd1602+DS1302,顯示時間 [打印本頁]

作者: WJD917108    時間: 2017-3-20 22:30
標題: arduino控制lcd1602+DS1302,顯示時間
   arduino控制,lcd1602顯示時間(來自DS1302),用串口,可以修改時間(串口輸入格式:年,月,日,時,分,秒,星期),僅供新手練習、學習。  
  需要庫及程序的,可以留言。



  1. /*
  2. Arduino 連接 DS1302
  3. 代碼來源:quadpoint點org/projects/arduino-ds1302
  4. 增加了串口調整時間代碼
  5. */
  6. #include <LiquidCrystal.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <DS1302.h>
  10. LiquidCrystal lcd(12, 11, 10, 9, 6, 5);
  11. int i;

  12. /* 接口定義
  13. CE(DS1302 pin5) -> Arduino D5
  14. IO(DS1302 pin6) -> Arduino D6
  15. SCLK(DS1302 pin7) -> Arduino D7
  16. */
  17. uint8_t CE_PIN   = 2;
  18. uint8_t SCLK_PIN = 3;
  19. uint8_t IO_PIN   = 4;
  20. /* 日期變量緩存 */[flash][/flash]
  21. char buf[50];
  22. char day[10];
  23. /* 串口數據緩存 */
  24. String comdata = "";
  25. int numdata[7] ={0}, j = 0, mark = 0;
  26. /* 創建 DS1302 對象 */
  27. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);

  28. void print_time()
  29. {
  30.     /* 從 DS1302 獲取當前時間 */
  31.     Time t = rtc.time();
  32.     /* 將星期從數字轉換為名稱 */
  33.     memset(day, 0, sizeof(day));
  34.     switch (t.day)
  35.     {
  36.     case 1: strcpy(day, "Sunday"); break;
  37.     case 2: strcpy(day, "Monday"); break;
  38.     case 3: strcpy(day, "Tuesday"); break;
  39.     case 4: strcpy(day, "Wednesday"); break;
  40.     case 5: strcpy(day, "Thursday"); break;
  41.     case 6: strcpy(day, "Friday"); break;
  42.     case 7: strcpy(day, "Saturday"); break;
  43.     }
  44.     /* 將日期代碼格式化湊成buf等待輸出 */
  45.     snprintf(buf, sizeof(buf),"%s%04d-%02d-%02d %02d:%02d %02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  46.     /* 輸出日期到串口 */
  47.     Serial.println(buf);
  48. }

  49. void setup()
  50. {
  51.     lcd.begin(16, 2);
  52. //   lcd.setCursor(0, 0);
  53.    
  54.     Serial.begin(9600);
  55.     rtc.write_protect(false);
  56.     rtc.halt(false);
  57. }
  58. void loop()
  59. {
  60.     /* 當串口有數據的時候,將數據拼接到變量comdata */
  61.     while (Serial.available() > 0)
  62.     {
  63.         comdata += char(Serial.read());
  64.         delay(2);
  65.         mark = 1;
  66.     }
  67.     /* 以逗號分隔分解comdata的字符串,分解結果變成轉換成數字到numdata[]數組 */
  68.     if(mark == 1)
  69.     {
  70.         Serial.print("You inputed : ");
  71.         Serial.println(comdata);
  72.         for(int i = 0; i < comdata.length() ; i++)
  73.         {
  74.             if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
  75.             {
  76.                 j++;
  77.             }
  78.             else
  79.             {
  80.                 numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  81.             }
  82.         }
  83.         /* 將轉換好的numdata湊成時間格式,寫入DS1302 */
  84.         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
  85.         rtc.time(t);
  86.         mark = 0;j=0;
  87.         /* 清空 comdata 變量,以便等待下一次輸入 */
  88.         comdata = String("");
  89.         /* 清空 numdata */
  90.         for(int i = 0; i < 7 ; i++) numdata[i]=0;
  91.     }
  92.    
  93.     /* 打印當前時間 */
  94.     print_time();
  95.    lcd.setCursor(0, 0);   //顯示星期
  96.    for(i=0;i<6;i++)               
  97.   {
  98.     lcd.print(buf[i]);
  99.   }
  100.   delay(100);
  101.   
  102.   lcd.setCursor(0, 1);  
  103.   for(i=6;i<22;i++)        //年 月 日 時 分 秒
  104.   {
  105.     lcd.print(buf[i]);
  106.   }
  107.   lcd.setCursor(13, 0);  
  108.   for(i=22;i<25;i++)        // 秒
  109.   {
  110.     lcd.print(buf[i]);
  111.   }
  112.   
  113.   
  114.     delay(1000);
  115. }
復制代碼

作者: 海洋lhk    時間: 2017-3-21 15:58
樓主,好棒
作者: 海洋lhk    時間: 2017-3-21 15:58
發幾個庫文件,謝謝
作者: 海洋lhk    時間: 2017-3-21 15:59
發幾個庫文件
作者: WJD917108    時間: 2017-3-21 19:17
1302庫,1602的沒有了,可以自己去下載

DS1302 1.0.rar

5.93 KB, 下載次數: 159, 下載積分: 黑幣 -5


作者: WJD917108    時間: 2017-3-22 09:46
不知道有發現問題的伙伴沒有,程序有點問題。問題1:
作者: WJD917108    時間: 2017-3-22 09:56
有發現問題的伙伴嗎?
問題:星期變化,顯示就亂了。
原因:ds1302讀取來的信息儲存在char buf[50];中,每個星期長短不同,從而存儲位數不同,而下面for語句讀取的位數固定,導致星期變化,顯示就亂。
辦法:修改void print_time()函數中case語句和后面的讀取語句for語句,解決問題。
作者: WJD917108    時間: 2017-3-22 09:57

  1. /*
  2. Arduino 連接 DS1302
  3. 代碼來源:quadpoint點org/projects/arduino-ds1302
  4. 增加了串口調整時間代碼
  5. */
  6. #include <LiquidCrystal.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <DS1302.h>
  10. LiquidCrystal lcd(12, 11, 10, 9, 6, 5);
  11. int i,c;


  12. /* 接口定義
  13. CE(DS1302 pin5) -> Arduino D5
  14. IO(DS1302 pin6) -> Arduino D6
  15. SCLK(DS1302 pin7) -> Arduino D7
  16. */
  17. uint8_t CE_PIN   = 2;
  18. uint8_t SCLK_PIN = 3;
  19. uint8_t IO_PIN   = 4;

  20. /* 日期變量緩存 */
  21. char buf[50];
  22. char buf1[20];
  23. char day[10];
  24. /* 串口數據緩存 */
  25. String comdata = "";
  26. int numdata[7] ={0}, j = 0, mark = 0;
  27. /* 創建 DS1302 對象 */
  28. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


  29. void print_time()
  30. {
  31.     /* 從 DS1302 獲取當前時間 */
  32.     Time t = rtc.time();
  33.     /* 將星期從數字轉換為名稱 */
  34.     memset(day, 0, sizeof(day));
  35.     switch (t.day)
  36.     {
  37.     case 1: strcpy(day, "Sunday"),c=6; break;
  38.     case 2: strcpy(day, "Monday"),c=6; break;
  39.     case 3: strcpy(day, "Tuesday"),c=7; break;
  40.     case 4: strcpy(day, "Wednesday"),c=9; break;
  41.     case 5: strcpy(day, "Thursday"),c=8; break;
  42.     case 6: strcpy(day, "Friday"),c=6; break;
  43.     case 7: strcpy(day, "Saturday"),c=8; break;
  44.     }
  45.     /* 將日期代碼格式化湊成buf等待輸出 */
  46.     snprintf(buf, sizeof(buf),"%s%04d-%02d-%02d %02d:%02d %02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  47.     /* 輸出日期到串口 */
  48.     Serial.println(buf);
  49. }


  50. void setup()
  51. {
  52.     lcd.begin(16, 2);
  53. //   lcd.setCursor(0, 0);
  54.    
  55.     Serial.begin(9600);
  56.     rtc.write_protect(false);
  57.     rtc.halt(false);
  58. }

  59. void loop()
  60. {
  61.     /* 當串口有數據的時候,將數據拼接到變量comdata */
  62.     while (Serial.available() > 0)
  63.     {
  64.         comdata += char(Serial.read());
  65.         delay(2);
  66.         mark = 1;
  67.     }
  68.     /* 以逗號分隔分解comdata的字符串,分解結果變成轉換成數字到numdata[]數組 */
  69.     if(mark == 1)
  70.     {
  71.         Serial.print("You inputed : ");
  72.         Serial.println(comdata);
  73.         for(int i = 0; i < comdata.length() ; i++)
  74.         {
  75.             if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
  76.             {
  77.                 j++;
  78.             }
  79.             else
  80.             {
  81.                 numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
  82.             }
  83.         }
  84.         /* 將轉換好的numdata湊成時間格式,寫入DS1302 */
  85.         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
  86.         rtc.time(t);
  87.         mark = 0;j=0;
  88.         /* 清空 comdata 變量,以便等待下一次輸入 */
  89.         comdata = String("");
  90.         /* 清空 numdata */
  91.         for(int i = 0; i < 7 ; i++) numdata[i]=0;
  92.     }
  93.    
  94.     /* 打印當前時間 */
  95.     print_time();
  96.    lcd.setCursor(0, 0);   //顯示星期
  97.    lcd.clear();                           
  98.    for(i=0;i<c;i++)               
  99.   {
  100.     lcd.print(buf[i]);
  101.   }
  102. //  delay(100);
  103.   
  104.   lcd.setCursor(0, 1);  
  105.   for(i=c;i<c+16;i++)        //年 月 日 時 分
  106.   {
  107.     lcd.print(buf[i]);
  108.   }

  109.   lcd.setCursor(13, 0);  
  110.   for(i=c+16;i<c+19;i++)        // 秒
  111.   {
  112.     lcd.print(buf[i]);
  113.   }
  114.   
  115.   
  116.     delay(1000);
  117. }
復制代碼

作者: CoffeeTea0rI    時間: 2017-5-11 15:48
發一下庫文件可以嗎
作者: 單調機    時間: 2017-11-24 14:02
求庫文件

作者: 林夕xiscl    時間: 2017-12-4 21:52
求庫文件
作者: hiram-peng    時間: 2017-12-8 12:54
怎么一直顯示  2165-25-45 27:165:85
作者: 246811    時間: 2018-1-2 19:12
WJD917108 發表于 2017-3-21 19:17
1302庫,1602的沒有了,可以自己去下載

1602庫都能用

作者: liutairun    時間: 2018-6-28 22:54
樓主,好棒,學習學習
作者: 259676    時間: 2018-8-4 09:58
支持 樓主

作者: 3274543803    時間: 2018-12-19 16:11
要什么開發板嗎,我的一直顯示“為開發板 Arduino 編譯時出錯。”
作者: 18718377313    時間: 2018-12-28 18:20
#include <stdio.h> #include <string.h> 這兩個庫也要自己添加嗎
作者: radius11    時間: 2018-12-30 12:26
為什么時間顯示一直都是2000:00:00啊
作者: 琉璃破空    時間: 2019-3-21 11:37
求庫文件,實物圖
作者: yzhbyyy    時間: 2019-5-6 13:31
樓主,好棒
作者: Oumuamua01    時間: 2019-6-29 19:45
請教,驗證出現錯誤如下

C:\Arduino\sketch_jun29a\sketch_jun29a.ino: In function 'void setup()':

sketch_jun29a:50:9: error: 'class DS1302' has no member named 'write_protect'

     rtc.write_protect(false);

         ^

C:\Arduino\sketch_jun29a\sketch_jun29a.ino: In function 'void loop()':

C:\Arduino\sketch_jun29a\sketch_jun29a.ino:80:97: warning: invalid conversion from 'int' to 'Time::Day' [-fpermissive]

         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);

                                                                                                 ^

In file included from C:\Arduino\sketch_jun29a\sketch_jun29a.ino:3:0:

C:\Arduino\libraries\arduino-ds1302-master/DS1302.h:35:3: note:   initializing argument 7 of 'Time::Time(uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, Time::Day)'

   Time(uint16_t yr, uint8_t mon, uint8_t date,

   ^

"LiquidCrystal.h" 對應多個庫
已使用: C:\Arduino\libraries\LiquidCrystal
未使用:C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\libraries\LiquidCrystal
exit status 1
'class DS1302' has no member named 'write_protect'

作者: 1299213877    時間: 2019-7-10 09:38
板子是什么型號
作者: xxfxxfxxf    時間: 2019-9-24 13:15
你的程序,都寫入項目文件夾了嗎?
作者: xxfxxfxxf    時間: 2019-9-24 13:22
你的顯示時間的程序,在項目文件夾嗎
作者: brook.zhou    時間: 2019-9-24 15:14
不錯,學習了
作者: 12hyz    時間: 2019-9-24 17:02
太容易了
作者: 222222555RNM    時間: 2019-12-6 12:01
WJD917108 發表于 2017-3-22 09:57

95行編譯的時候出錯

作者: sp15634205307    時間: 2019-12-7 12:27
WJD917108 發表于 2017-3-22 09:57

程序編譯不成功是為什么

作者: sp15634205307    時間: 2019-12-7 12:33
為什么編譯會有錯?95行怎么出錯l
作者: sp15634205307    時間: 2019-12-7 12:35
你的問題解決了嗎
作者: XJJJJJ    時間: 2019-12-16 17:24
好厲害,學習一下
作者: 雪諾~瓊恩    時間: 2020-6-29 14:07
C:\Users\admin\Desktop為什么顯示2000——0-0

作者: 雪諾~瓊恩    時間: 2020-6-29 15:34
為什么顯示這個,大佬們

51hei圖片_20200629140609.jpg (107.77 KB, 下載次數: 209)

51hei圖片_20200629140609.jpg

作者: billzou    時間: 2020-7-1 14:11
如何獲取這個代碼和庫文件?

作者: billzou    時間: 2020-7-1 14:12
需要庫和程序
作者: SHW138    時間: 2020-7-18 17:30
WJD917108 發表于 2017-3-22 09:57

您好,我這邊用的Mixly軟件編寫,出現的問題是當斷電后,不知道怎么讀取ds1302中的程序,斷電以后會重新初始化的時間設定,您知道怎么解決嗎?

作者: lyy1208    時間: 2020-10-13 14:57
Oumuamua01 發表于 2019-6-29 19:45
請教,驗證出現錯誤如下

C:\Arduino\sketch_jun29a\sketch_jun29a.ino: In function 'void setup()':

你好,我也是出現這個錯誤。請問你解決了這個問題了嗎,可以告知一下嗎
作者: wy3128559013    時間: 2021-1-31 15:34
時間改不了呀
作者: gditbbk    時間: 2025-5-21 14:43
非常棒啊,樓主




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲一区二区免费视频 | 亚洲免费在线 | 欧美视频福利 | a级毛片毛片免费观看久潮喷 | 国产一区二区 | 欧美群妇大交群中文字幕 | 欧美精品在线一区 | 91精品久久久久久久久久小网站 | 日韩在线看片 | 亚洲精品乱码久久久久久按摩观 | 日本三级网站在线观看 | 亚洲欧美一区二区三区在线 | 久久新| 欧美6一10sex性hd | 亚洲精品免费视频 | 国产在线观看一区二区 | 国产精品久久久久久久7777 | 亚洲电影第1页 | 在线观看不卡av | 狠狠干天天干 | 日韩中文字幕免费在线 | 国产精品久久久久久久久久 | 色伊人久久 | 国产欧美精品区一区二区三区 | 在线观看免费av片 | 欧美一级特黄aaa大片在线观看 | 亚洲一区二区电影网 | 久久精品色欧美aⅴ一区二区 | 一区二区三区视频在线观看 | 91手机精品视频 | 色婷婷综合久久久久中文一区二区 | 九九热久久免费视频 | 欧一区二区| 国产乱码精品一区二三赶尸艳谈 | 午夜国产羞羞视频免费网站 | 日韩欧美三区 | 久久精品亚洲成在人线av网址 | 中文字幕一区二区三区四区 | 日本精品一区二区 | 亚洲精品99 | 中文字幕亚洲视频 |