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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這是我根據網上找的資料,做的一個LCD1602+DS1302+DS18B20制作的一個電子時鐘

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 Plan3t 于 2018-4-30 19:52 編輯

電路引腳:
DS18B20:
VCC——電源正極
GND——地
OUT——D10

DS1302:
VCC——正極
GND——地
CLK——D7
DAT——D6
RST——D5


IIC:
VCC——正極
GND——地  
SDA——A4
SCK——A5      
連接好之后可能會不能顯示,需要在LCD1602引腳A0端接一個電位計或者電阻,用來調整顯示屏對比度調整時間,在串口監視器連續輸入16個數,如2018042801170406,就是2018年4月28日 1點17分4秒 星期6


下面是整個程序,還有需要的庫
  1.   //#########################################
  2. /* 接口定義
  3.   CE(DS1302 pin5) ->  D5
  4.   IO(DS1302 pin6) -> D6
  5.   SCLK(DS1302 pin7) -> D7
  6. */
  7. //################################
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <DS1302.h>
  11. #include <DallasTemperature.h> // DS18B20 庫
  12. #include <LiquidCrystal_I2C.h> // I2C 1602
  13. #include <Wire.h> // I2C 庫
  14. #include <OneWire.h>
  15. #define ONE_WIRE_BUS 10    // DS18B20 連接arduino D10引腳

  16. // 初始連接在單總線上的單總線設備
  17. OneWire oneWire(ONE_WIRE_BUS);
  18. DallasTemperature sensors(&oneWire);
  19. LiquidCrystal_I2C lcd(0x27,16,2); //設置LCD1602的I2C地址為0x27
  20. uint8_t CE_PIN   = 5;
  21. uint8_t IO_PIN   = 6;
  22. uint8_t SCLK_PIN = 7;

  23. byte nian[8] =
  24. {
  25.         0b01000,
  26.         0b01111,
  27.         0b10010,
  28.         0b01111,
  29.         0b01010,
  30.         0b11111,
  31.         0b00010,
  32.         0b00000
  33. };
  34. byte yue[8] =
  35. {
  36.         0b01111,
  37.         0b01001,
  38.         0b01111,
  39.         0b01001,
  40.         0b01111,
  41.         0b01001,
  42.         0b10011,
  43.         0b00000,
  44. };
  45. byte ri[8] =
  46. {
  47.         0b11111,
  48.         0b10001,
  49.         0b10001,
  50.         0b11111,
  51.         0b10001,
  52.         0b10001,
  53.         0b11111,
  54.         0b00000
  55. };
  56. byte  temp[8]=
  57. {
  58.    0b10000,
  59.     0b01111,
  60.     0b01000,
  61.     0b01000,
  62.     0b01000,
  63.     0b01000,
  64.     0b01111,
  65.     0b00000, //溫度標志— —攝氏度
  66. };

  67. // 日期變量緩存
  68. char buf[50];
  69. char day[10];
  70. // 串口數據緩存
  71. String comdata = "" ;
  72. int numdata[7] = {0}, j = 0, mark = 0;
  73. // 創建 DS1302 對象
  74. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);

  75. Time t;
  76. void print_time()
  77. {
  78.         // 從 DS1302 獲取當前時間
  79.         t = rtc.time();
  80.         // 將星期從數字轉換為名稱
  81.         memset(day, 0, sizeof(day));
  82.         switch (t.day)
  83.         {
  84.         case 7:
  85.                 strcpy(day, "Sunday");
  86.                 break;
  87.         case 1:
  88.                 strcpy(day, "Monday");
  89.                 break;
  90.         case 2:
  91.                 strcpy(day, "Tuesday");
  92.                 break;
  93.         case 3:
  94.                 strcpy(day, "Wednesday");
  95.                 break;
  96.         case 4:
  97.                 strcpy(day, "Thursday");
  98.                 break;
  99.         case 5:
  100.                 strcpy(day, "Friday");
  101.                 break;
  102.         case 6:
  103.                 strcpy(day, "Saturday");
  104.                 break;
  105.         }
  106.         // 將日期代碼格式化湊成buf等待輸出
  107.         snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
  108.         // 輸出日期到串口
  109.         Serial.println(buf);
  110. }


  111. void setup()
  112. {
  113.         Serial.begin(9600);
  114. Serial.println("Temperature Project");

  115.         rtc.write_protect(false);
  116.         rtc.halt(false);
  117.         lcd.init(); // 給LCD的I2C通訊初始化,需要執行兩次
  118.         delay(20);
  119.         lcd.init(); // 給LCD的I2C通訊初始化
  120.         delay(20);
  121.         lcd.backlight();//點亮LCD背光燈
  122.         rtc.write_protect(false);
  123.         rtc.halt(false);
  124.         lcd.begin(16, 2);
  125.         lcd.createChar(0, nian);
  126.         lcd.createChar(1, yue);
  127.         lcd.createChar(2, ri);
  128.         lcd.createChar(3, temp);
  129.         
  130. }

  131. void loop()
  132. {

  133.         // 當串口有數據的時候,將數據拼接到變量comdata
  134.        Serial.print("Requesting temperatures..."); // 串口發送字符
  135.        sensors.requestTemperatures(); // 傳感器發送命令獲取溫度
  136.        Serial.println("DONE"); // 串口發送字符并換行
  137.        Serial.print("Temperature for the device 1 (index 0) is: ");
  138.        Serial.println(sensors.getTempCByIndex(0));
  139.         while (Serial.available() > 0)
  140.         {
  141.                 comdata += char(Serial.read());
  142.                 delay(2);
  143.                 mark = 1;
  144.         }
  145.         //以逗號分隔分解comdata的字符串,分解結果變成轉換成數字到numdata[]數組
  146.         if (mark == 1)
  147.         {
  148.                 Serial.print("You inputed : ");
  149.                 Serial.println(comdata);
  150.                 t.yr = (comdata[0] - '0') * 1000 + (comdata[1] - '0')*100 + (comdata[2] - '0') * 10 + (comdata[3] - '0'); //year
  151.                 t.mon = (comdata[4] - '0') * 10 + (comdata[5] - '0'); //month
  152.                 t.date = (comdata[6] - '0') * 10 + (comdata[7] - '0'); //date
  153.                 t.hr = (comdata[8] - '0') * 10 + (comdata[9] - '0'); //hour
  154.                 t.min = (comdata[10] - '0') * 10 + (comdata[11] - '0'); //minute
  155.                 t.sec = (comdata[12] - '0') * 10 + (comdata[13] - '0'); //second
  156.                 t.day = (comdata[14] - '0') * 10 + (comdata[15] - '0'); //week
  157.                 // 將轉換好的numdata湊成時間格式,寫入DS1302

  158.                 rtc.time(t);
  159.                 mark = 0;
  160.                 j = 0;//清空 comdata 變量,以便等待下一次輸入
  161.                 comdata = String("");// 清空 numdata
  162.                 for (int i = 0; i < 7 ; i++) numdata = 0;
  163.         }

  164.         //打印當前時間
  165.         print_time();

  166.         lcd.setCursor(0, 0);
  167.         lcd.print(t.yr);
  168.         lcd.write(byte(0));
  169.         lcd.print(t.mon);
  170.         lcd.write(byte(1));
  171.         lcd.print(t.date);
  172.         lcd.write(byte(2));
  173.         lcd.print("  ");

  174.         lcd.setCursor(15, 0);
  175.         lcd.print(t.day);

  176.         lcd.setCursor(0, 1);
  177.         lcd.print(t.hr);
  178.         lcd.print(':');
  179.         lcd.print(t.min);
  180.         lcd.print(':');
  181.         lcd.print(t.sec);
  182.         lcd.print("   ");
  183.         lcd.setCursor(10, 1); // 定位光標到第二行靠中位置
  184.         lcd.print(sensors.getTempCByIndex(0)); // 顯示溫度值,來源DallasTemperature.h的函數
  185.         lcd.write(byte(3)); // 不定位光標則繼續前面語句繼續寫字符
  186.         delay(1000);
  187. }
復制代碼



20180428_011708.jpg (2.81 MB, 下載次數: 169)

20180428_011708.jpg

電子時鐘總庫.zip

49.25 KB, 下載次數: 29, 下載積分: 黑幣 -5

評分

參與人數 2黑幣 +55 收起 理由
蔡定銀 + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:318038 發表于 2018-4-30 19:23 | 只看該作者
本帖最后由 Plan3t 于 2018-4-30 19:39 編輯

我硬件軟件都做出來了 求一個大神根據我的這個東西能否幫我繪制一個原理圖和仿真圖呢 因為proteus這個軟件我目前實在不會用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线观看免费爱爱 | a免费在线| 成人国产精品久久 | 国产精品亚洲成在人线 | 国产精品看片 | 亚洲精品91 | 亚洲视频欧美视频 | 日本成年免费网站 | av午夜电影 | 亚洲国产区 | 黄在线免费观看 | 超碰人人91 | 成人在线视频一区 | 一区二区三区亚洲 | 欧美一区二区三区大片 | 欧美日韩在线一区 | 国产精品久久九九 | 国产免费观看视频 | 久久久www成人免费精品张筱雨 | 人人人人干 | 岛国毛片在线观看 | 国产综合久久 | 欧美日韩亚洲在线 | 国产一区二区久久久 | 国产精品免费一区二区三区四区 | 91亚洲视频在线 | 成人永久免费视频 | www.久久| 久草视频在线播放 | 久久久久国产精品午夜一区 | 精品国产视频 | 天堂一区二区三区 | 国产午夜高清 | 日韩成人在线观看 | 成人免费视频网站在线看 | 久久成人激情 | 国产精品伦理一区二区三区 | 91久久精品国产免费一区 | 欧美日韩一区在线播放 | 日本色高清 | 中文字幕成人av |