哈哈......我做了個LCD時鐘帶溫度顯示、星期顯示。曬下代碼:先發下3個庫文件:
DallasTemperature.rar
(16.4 KB, 下載次數: 39)
2016-4-14 03:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
DS1302.rar
(5.92 KB, 下載次數: 42)
2016-4-14 03:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
LiquidCrystal_I2C1602V1.rar
(31.16 KB, 下載次數: 31)
2016-4-14 03:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- #include <Wire.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <LiquidCrystal_I2C.h>
- #include <stdio.h>
- #include <string.h>
- #include <DS1302.h>
- int Mode=0;
- int h = 0;
- int m = 0;
- int s = 0;
- int d = 12;
- int mo = 5;
- int y = 15;
- uint8_t CE_PIN = 5;
- uint8_t IO_PIN = 6;
- uint8_t SCLK_PIN = 7;
- float c = 0.00;
- String comdata = "";
- int numdata[7] ={0}, j = 0, mark = 0;
- char day[10];
- byte one[8] = {
- B00000,
- B00000,
- B00000,
- B11111,
- B00000,
- B00000,
- B00000,
- B00000,
- };
- byte two[8] = {
- B00000,
- B01110,
- B00000,
- B00000,
- B00000,
- B11111,
- B00000,
- B00000,
- };
- byte three [8] = {
- B00000,
- B01110,
- B00000,
- B01110,
- B00000,
- B11111,
- B00000,
- B00000,
- };
- byte four[8] = {
- B00000,
- B11111,
- B10001,
- B10101,
- B11101,
- B00001,
- B01110,
- B00000,
- };
- byte five [8] = {
- B00000,
- B11110,
- B01000,
- B11110,
- B01010,
- B01010,
- B11111,
- B00000,
- };
- byte six[8] = {
- B00000,
- B00100,
- B00000,
- B11111,
- B00000,
- B01010,
- B10001,
- B00000,
- };
- byte seven [8] = {
- B11111,
- B10001,
- B10001,
- B11111,
- B10001,
- B10001,
- B11111,
- B00000,
- };
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
- #define ONE_WIRE_BUS 2
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- void setup() {
- sensors.begin();
- lcd.init();
- lcd.backlight();
- lcd.createChar(0, one);
- lcd.createChar(1, two);
- lcd.createChar(2, three);
- lcd.createChar(3, four);
- lcd.createChar(4, five);
- lcd.createChar(5, six);
- lcd.createChar(6, seven);
- lcd.home();
- lcd.print("Welcome to use!");
- delay(1000);
- lcd.clear();
- Serial.begin(9600);
- Serial.println("Wait for set time");
- rtc.write_protect(false);
- rtc.halt(false);
- }
-
- void Display(){
- Time t = rtc.time();
- memset(day, 0, sizeof(day));
- switch (t.day)
- {
- case 1: lcd.setCursor(12,1); lcd.write((byte)0); break;
- case 2: lcd.setCursor(12,1); lcd.write(1); break;
- case 3: lcd.setCursor(12,1); lcd.write(2); break;
- case 4: lcd.setCursor(12,1); lcd.write(3); break;
- case 5: lcd.setCursor(12,1); lcd.write(4); break;
- case 6: lcd.setCursor(12,1); lcd.write(5); break;
- case 7: lcd.setCursor(12,1); lcd.write(6); break;
- }
- lcd.setCursor(0,0);
- if(t.hr < 10) lcd.print("0");
- lcd.print(t.hr);
- lcd.print(":");
- if(t.min < 10) lcd.print("0");
- lcd.print(t.min);
- lcd.print(":");
- if(t.sec < 10) lcd.print("0");
- lcd.print(t.sec);
- lcd.setCursor(0,1);
- lcd.print(t.yr);
- lcd.print("/");
- if(t.mon < 10) lcd.print("0");
- lcd.print(t.mon);
- lcd.print("/");
- if(t.date < 10) lcd.print("0");
- lcd.print(t.date);
- lcd.setCursor(9,0);
- lcd.print(c);
- lcd.write((char)223);
- lcd.print("C");
- lcd.print(" ");
- }
- void loop() {
- sensors.requestTemperatures();
- c = sensors.getTempCByIndex(12);
- Display();
- /* 當串口有數據的時候,將數據拼接到變量comdata */
- while (Serial.available() > 0)
- {
- comdata += char(Serial.read());
- delay(2);
- mark = 1;
- }
- /* 以逗號分隔分解comdata的字符串,分解結果變成轉換成數字到numdata[]數組 */
- if(mark == 1)
- {
- Serial.print("You inputed : ");
- Serial.println(comdata);
- for(int i = 0; i < comdata.length() ; i++)
- {
- if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
- {
- j++;
- }
- else
- {
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- /* 將轉換好的numdata湊成時間格式,寫入DS1302 */
- Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
- rtc.time(t);
- mark = 0;j=0;
- /* 清空 comdata 變量,以便等待下一次輸入 */
- comdata = String("");
- /* 清空 numdata */
- for(int i = 0; i < 7 ; i++) numdata[i]=0;
- }
- }
- 復制代碼
- 注意,設置法有點不一樣。如:2015年10月17日10時18分0秒星期天,
- 輸入:2015,10,17,10,18,0,7即可。
- 用LCD1602不帶I2C模塊的,代碼如下:
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <LiquidCrystal.h>
- #include <stdio.h>
- #include <string.h>
- #include <DS1302.h>
- int Mode=0;
- int h = 0;
- int m = 0;
- int s = 0;
- int d = 12;
- int mo = 5;
- int y = 15;
- uint8_t CE_PIN = 5;
- uint8_t IO_PIN = 6;
- uint8_t SCLK_PIN = 7;
- float c = 0.00;
- String comdata = "";
- int numdata[7] ={0}, j = 0, mark = 0;
- char day[10];
- byte one[8] = {
- B00000,
- B00000,
- B00000,
- B11111,
- B00000,
- B00000,
- B00000,
- B00000,
- };
- byte two[8] = {
- B00000,
- B01110,
- B00000,
- B00000,
- B00000,
- B11111,
- B00000,
- B00000,
- };
- byte three [8] = {
- B00000,
- B01110,
- B00000,
- B01110,
- B00000,
- B11111,
- B00000,
- B00000,
- };
- byte four[8] = {
- B00000,
- B11111,
- B10001,
- B10101,
- B11101,
- B00001,
- B01110,
- B00000,
- };
- byte five [8] = {
- B00000,
- B11110,
- B01000,
- B11110,
- B01010,
- B01010,
- B11111,
- B00000,
- };
- byte six[8] = {
- B00000,
- B00100,
- B00000,
- B11111,
- B00000,
- B01010,
- B10001,
- B00000,
- };
- byte seven [8] = {
- B11111,
- B10001,
- B10001,
- B11111,
- B10001,
- B10001,
- B11111,
- B00000,
- };
- LiquidCrystal_I2C lcd(3,4,5,6,7,8);
- DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
- #define ONE_WIRE_BUS 2
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- void setup() {
- sensors.begin();
- lcd.init();
- lcd.backlight();
- lcd.createChar(0, one);
- lcd.createChar(1, two);
- lcd.createChar(2, three);
- lcd.createChar(3, four);
- lcd.createChar(4, five);
- lcd.createChar(5, six);
- lcd.createChar(6, seven);
- lcd.home();
- lcd.print("Welcome to use!");
- delay(1000);
- lcd.clear();
- Serial.begin(9600);
- Serial.println("Wait for set time");
- rtc.write_protect(false);
- rtc.halt(false);
- }
-
- void Display(){
- Time t = rtc.time();
- memset(day, 0, sizeof(day));
- switch (t.day)
- {
- case 1: lcd.setCursor(12,1); lcd.write((byte)0); break;
- case 2: lcd.setCursor(12,1); lcd.write(1); break;
- case 3: lcd.setCursor(12,1); lcd.write(2); break;
- case 4: lcd.setCursor(12,1); lcd.write(3); break;
- case 5: lcd.setCursor(12,1); lcd.write(4); break;
- case 6: lcd.setCursor(12,1); lcd.write(5); break;
- case 7: lcd.setCursor(12,1); lcd.write(6); break;
- }
- lcd.setCursor(0,0);
- if(t.hr < 10) lcd.print("0");
- lcd.print(t.hr);
- lcd.print(":");
- if(t.min < 10) lcd.print("0");
- lcd.print(t.min);
- lcd.print(":");
- if(t.sec < 10) lcd.print("0");
- lcd.print(t.sec);
- lcd.setCursor(0,1);
- lcd.print(t.yr);
- lcd.print("/");
- if(t.mon < 10) lcd.print("0");
- lcd.print(t.mon);
- lcd.print("/");
- if(t.date < 10) lcd.print("0");
- lcd.print(t.date);
- lcd.setCursor(9,0);
- lcd.print(c);
- lcd.write((char)223);
- lcd.print("C");
- lcd.print(" ");
- }
- void loop() {
- sensors.requestTemperatures();
- c = sensors.getTempCByIndex(12);
- Display();
- /* 當串口有數據的時候,將數據拼接到變量comdata */
- while (Serial.available() > 0)
- {
- comdata += char(Serial.read());
- delay(2);
- mark = 1;
- }
- /* 以逗號分隔分解comdata的字符串,分解結果變成轉換成數字到numdata[]數組 */
- if(mark == 1)
- {
- Serial.print("You inputed : ");
- Serial.println(comdata);
- for(int i = 0; i < comdata.length() ; i++)
- {
- if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
- {
- j++;
- }
- else
- {
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- /* 將轉換好的numdata湊成時間格式,寫入DS1302 */
- Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
- rtc.time(t);
- mark = 0;j=0;
- /* 清空 comdata 變量,以便等待下一次輸入 */
- comdata = String("");
- /* 清空 numdata */
- for(int i = 0; i < 7 ; i++) numdata[i]=0;
- }
- }
復制代碼
|