ds1302模块 树莓派_Arduino学习8-连接DS1302时钟模块

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值