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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

arduino控制lcd1602+DS1302,顯示時間

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:169810 發(fā)表于 2017-3-20 22:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   arduino控制,lcd1602顯示時間(來自DS1302),用串口,可以修改時間(串口輸入格式:年,月,日,時,分,秒,星期),僅供新手練習(xí)、學(xué)習(xí)。  
  需要庫及程序的,可以留言。



  1. /*
  2. Arduino 連接 DS1302
  3. 代碼來源:quadpoint點org/projects/arduino-ds1302
  4. 增加了串口調(diào)整時間代碼
  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. /* 串口數(shù)據(jù)緩存 */
  24. String comdata = "";
  25. int numdata[7] ={0}, j = 0, mark = 0;
  26. /* 創(chuàng)建 DS1302 對象 */
  27. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);

  28. void print_time()
  29. {
  30.     /* 從 DS1302 獲取當(dāng)前時間 */
  31.     Time t = rtc.time();
  32.     /* 將星期從數(shù)字轉(zhuǎn)換為名稱 */
  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.     /* 當(dāng)串口有數(shù)據(jù)的時候,將數(shù)據(jù)拼接到變量comdata */
  61.     while (Serial.available() > 0)
  62.     {
  63.         comdata += char(Serial.read());
  64.         delay(2);
  65.         mark = 1;
  66.     }
  67.     /* 以逗號分隔分解comdata的字符串,分解結(jié)果變成轉(zhuǎn)換成數(shù)字到numdata[]數(shù)組 */
  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.         /* 將轉(zhuǎn)換好的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.     /* 打印當(dāng)前時間 */
  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. }
復(fù)制代碼

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

DS1302 1.0.rar

5.93 KB, 下載次數(shù): 159, 下載積分: 黑幣 -5

評分

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

查看全部評分

回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

8#
ID:169810 發(fā)表于 2017-3-22 09:57 | 只看該作者

  1. /*
  2. Arduino 連接 DS1302
  3. 代碼來源:quadpoint點org/projects/arduino-ds1302
  4. 增加了串口調(diào)整時間代碼
  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. /* 串口數(shù)據(jù)緩存 */
  25. String comdata = "";
  26. int numdata[7] ={0}, j = 0, mark = 0;
  27. /* 創(chuàng)建 DS1302 對象 */
  28. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


  29. void print_time()
  30. {
  31.     /* 從 DS1302 獲取當(dāng)前時間 */
  32.     Time t = rtc.time();
  33.     /* 將星期從數(shù)字轉(zhuǎn)換為名稱 */
  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.     /* 當(dāng)串口有數(shù)據(jù)的時候,將數(shù)據(jù)拼接到變量comdata */
  62.     while (Serial.available() > 0)
  63.     {
  64.         comdata += char(Serial.read());
  65.         delay(2);
  66.         mark = 1;
  67.     }
  68.     /* 以逗號分隔分解comdata的字符串,分解結(jié)果變成轉(zhuǎn)換成數(shù)字到numdata[]數(shù)組 */
  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.         /* 將轉(zhuǎn)換好的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.     /* 打印當(dāng)前時間 */
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

1602庫都能用
回復(fù)

使用道具 舉報

14#
ID:110588 發(fā)表于 2018-6-28 22:54 | 只看該作者
樓主,好棒,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

21#
ID:574730 發(fā)表于 2019-6-29 19:45 | 只看該作者
請教,驗證出現(xiàn)錯誤如下

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" 對應(yīng)多個庫
已使用: 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'
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

25#
ID:615689 發(fā)表于 2019-9-24 15:14 | 只看該作者
不錯,學(xué)習(xí)了
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

95行編譯的時候出錯
回復(fù)

使用道具 舉報

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

程序編譯不成功是為什么
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

31#
ID:654794 發(fā)表于 2019-12-16 17:24 | 只看該作者
好厲害,學(xué)習(xí)一下
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

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

51hei圖片_20200629140609.jpg
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

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

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美va大片 | 久久久久无码国产精品一区 | 国产精品一码二码三码在线 | 国产精品久久一区二区三区 | 992tv人人草 久久精品超碰 | 亚洲国产一区二区三区 | 久久久久亚洲 | 日本久久视频 | 国产精品视频网站 | 国产精品一区二区在线免费观看 | 国产精品自产拍 | 国产精品一区二区三区久久久 | 久久人人爽人人爽人人片av免费 | 伦理午夜电影免费观看 | 91精品久久久 | 精品视频在线观看 | 久久99蜜桃综合影院免费观看 | www亚洲精品 | 亚洲精品在线免费播放 | 精品国产欧美一区二区三区不卡 | 欧美日韩a | 午夜av在线| 日本中文字幕一区 | 成人精品一区二区三区中文字幕 | 91久操视频| 一区二区三区欧美在线 | 精品一区二区电影 | 天天操天天摸天天干 | 日本 欧美 三级 高清 视频 | 一级一级毛片免费看 | 亚洲欧洲精品在线 | 欧美日韩国产一区二区三区 | 女同久久另类99精品国产 | 久久精品色欧美aⅴ一区二区 | 免费视频一区二区 | 中文字幕91av | 成人av片在线观看 | 人妖videosex高潮另类 | 日韩电影一区 | 欧美一二三 | 亚洲欧美国产精品久久 |