#include
#include
#include
#include
#include
#include
#include
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
#include
#include
#include
#include
#include
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;
}
}