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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

arduino控制lcd1602+DS1302,顯示時間

  [復制鏈接]
跳轉到指定樓層
樓主
ID:169810 發表于 2017-3-20 22:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   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. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:177116 發表于 2017-3-21 15:58 | 只看該作者
樓主,好棒
回復

使用道具 舉報

板凳
ID:177116 發表于 2017-3-21 15:58 | 只看該作者
發幾個庫文件,謝謝
回復

使用道具 舉報

地板
ID:177116 發表于 2017-3-21 15:59 | 只看該作者
發幾個庫文件
回復

使用道具 舉報

5#
ID:169810 發表于 2017-3-21 19:17 | 只看該作者
1302庫,1602的沒有了,可以自己去下載

DS1302 1.0.rar

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

評分

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

查看全部評分

回復

使用道具 舉報

6#
ID:169810 發表于 2017-3-22 09:46 | 只看該作者
不知道有發現問題的伙伴沒有,程序有點問題。問題1:
回復

使用道具 舉報

7#
ID:169810 發表于 2017-3-22 09:56 | 只看該作者
有發現問題的伙伴嗎?
問題:星期變化,顯示就亂了。
原因:ds1302讀取來的信息儲存在char buf[50];中,每個星期長短不同,從而存儲位數不同,而下面for語句讀取的位數固定,導致星期變化,顯示就亂。
辦法:修改void print_time()函數中case語句和后面的讀取語句for語句,解決問題。
回復

使用道具 舉報

8#
ID:169810 發表于 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. }
復制代碼
回復

使用道具 舉報

9#
ID:199578 發表于 2017-5-11 15:48 | 只看該作者
發一下庫文件可以嗎
回復

使用道具 舉報

10#
ID:253037 發表于 2017-11-24 14:02 | 只看該作者
求庫文件
回復

使用道具 舉報

11#
ID:257414 發表于 2017-12-4 21:52 | 只看該作者
求庫文件
回復

使用道具 舉報

12#
ID:252587 發表于 2017-12-8 12:54 | 只看該作者
怎么一直顯示  2165-25-45 27:165:85
回復

使用道具 舉報

13#
ID:267253 發表于 2018-1-2 19:12 | 只看該作者
WJD917108 發表于 2017-3-21 19:17
1302庫,1602的沒有了,可以自己去下載

1602庫都能用
回復

使用道具 舉報

14#
ID:110588 發表于 2018-6-28 22:54 | 只看該作者
樓主,好棒,學習學習
回復

使用道具 舉報

15#
ID:382476 發表于 2018-8-4 09:58 | 只看該作者
支持 樓主
回復

使用道具 舉報

16#
ID:449921 發表于 2018-12-19 16:11 | 只看該作者
要什么開發板嗎,我的一直顯示“為開發板 Arduino 編譯時出錯。”
回復

使用道具 舉報

17#
ID:444771 發表于 2018-12-28 18:20 | 只看該作者
#include <stdio.h> #include <string.h> 這兩個庫也要自己添加嗎
回復

使用道具 舉報

18#
ID:458497 發表于 2018-12-30 12:26 | 只看該作者
為什么時間顯示一直都是2000:00:00啊
回復

使用道具 舉報

19#
ID:480931 發表于 2019-3-21 11:37 來自手機 | 只看該作者
求庫文件,實物圖
回復

使用道具 舉報

20#
ID:469510 發表于 2019-5-6 13:31 | 只看該作者
樓主,好棒
回復

使用道具 舉報

21#
ID:574730 發表于 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'
回復

使用道具 舉報

22#
ID:355312 發表于 2019-7-10 09:38 | 只看該作者
板子是什么型號
回復

使用道具 舉報

23#
ID:600618 發表于 2019-9-24 13:15 | 只看該作者
你的程序,都寫入項目文件夾了嗎?
回復

使用道具 舉報

24#
ID:600618 發表于 2019-9-24 13:22 | 只看該作者
你的顯示時間的程序,在項目文件夾嗎
回復

使用道具 舉報

25#
ID:615689 發表于 2019-9-24 15:14 | 只看該作者
不錯,學習了
回復

使用道具 舉報

26#
ID:265874 發表于 2019-9-24 17:02 | 只看該作者
太容易了
回復

使用道具 舉報

27#
ID:654204 發表于 2019-12-6 12:01 | 只看該作者

95行編譯的時候出錯
回復

使用道具 舉報

28#
ID:658105 發表于 2019-12-7 12:27 | 只看該作者

程序編譯不成功是為什么
回復

使用道具 舉報

29#
ID:658105 發表于 2019-12-7 12:33 | 只看該作者
為什么編譯會有錯?95行怎么出錯l
回復

使用道具 舉報

30#
ID:658105 發表于 2019-12-7 12:35 | 只看該作者
你的問題解決了嗎
回復

使用道具 舉報

31#
ID:654794 發表于 2019-12-16 17:24 | 只看該作者
好厲害,學習一下
回復

使用道具 舉報

32#
ID:792743 發表于 2020-6-29 14:07 | 只看該作者
C:\Users\admin\Desktop為什么顯示2000——0-0
回復

使用道具 舉報

33#
ID:792743 發表于 2020-6-29 15:34 | 只看該作者
為什么顯示這個,大佬們

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

51hei圖片_20200629140609.jpg
回復

使用道具 舉報

34#
ID:794756 發表于 2020-7-1 14:11 | 只看該作者
如何獲取這個代碼和庫文件?
回復

使用道具 舉報

35#
ID:794756 發表于 2020-7-1 14:12 | 只看該作者
需要庫和程序
回復

使用道具 舉報

36#
ID:593148 發表于 2020-7-18 17:30 | 只看該作者

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

使用道具 舉報

37#
ID:829318 發表于 2020-10-13 14:57 | 只看該作者
Oumuamua01 發表于 2019-6-29 19:45
請教,驗證出現錯誤如下

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

你好,我也是出現這個錯誤。請問你解決了這個問題了嗎,可以告知一下嗎
回復

使用道具 舉報

38#
ID:878521 發表于 2021-1-31 15:34 | 只看該作者
時間改不了呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久亚洲国产800 | 欧美成人在线免费 | 91素人 | va在线 | 久久久免费电影 | 亚洲国产专区 | 国产电影一区二区在线观看 | 91精品久久久 | 91免费看片 | 91国内精品久久 | 亚洲成人精品国产 | 一区二区久久 | 波多野结衣电影一区 | 国产网站久久 | 国产女人精品视频 | 91日b| 精品视频在线免费观看 | 日韩免费高清视频 | 亚洲国产精品人人爽夜夜爽 | 欧美mv日韩mv国产网站91进入 | 亚洲精品黑人 | 在线黄| 日韩欧美高清 | 天天射影院| 成人亚洲视频 | 国产91精品久久久久久久网曝门 | 在线观看av网站 | 国产成人精品一区二区 | 一区二区三区四区在线视频 | 久久免费看 | se婷婷 | 成人在线视频一区二区三区 | 日日骚视频 | 成人免费xxxxx在线视频 | 国产在线精品一区二区 | 澳门永久av免费网站 | 影音先锋亚洲资源 | 四虎国产 | 美国十次成人欧美色导视频 | 亚洲视频一区在线观看 | 久久亚洲欧美日韩精品专区 |