第一步:按照接線圖接線并上傳程序及代碼
Open-Live-WriterLCD1602-I2CDS3231_8BE1Arduino_time_bb_thumb.jpg (58.89 KB, 下載次數: 95)
下載附件
2017-5-11 17:00 上傳
Arduino DS3231 LCD1602-I2C
5V VCC VCC
GND GND GND
A4 SDA SDA
A5 SCL SCL
第二步:上傳程序代碼,調試模塊,檢驗程序效果
將連接好的Arduino插在電腦上,打開Arduino IDE,上傳代碼到板子里。
/*
*/
#include
#include
#include
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte year, month, date, DoW, hour, minute, second;
uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
LiquidCrystal_I2C lcd(0x3F,16,2);
char data[15];
char Str_year[3], Str_month[3], Str_date[3], Str_DoW[3], Str_hour[3], Str_minute[3], Str_second[3];
void setup() {
// Start the I2C interface
Wire.begin();
Serial.begin(9600);
lcd.init();
lcd.backlight();
Serial.println("Please enter the time: year[2]month[2]date[2]DoW[2]hour[2]minute[2]second[2]");
Serial.println("example: 2014-12-3 Wednesday 14:15:15 enter:14120303141515");
}
void settime(){
if (Serial.available() >=14) //串口讀取數據
{
for (int a = 0; a <14; a++)
{
data[a] = Serial.read();
}
Str_year[0] = data[0]; //拆包
Str_year[1] = data[1];
Str_month[0] = data[2];
Str_month[1] = data[3];
Str_date[0] = data[4];
Str_date[1] = data[5];
Str_DoW[0] = data[6];
Str_DoW[1] = data[7];
Str_hour[0] = data[8];
Str_hour[1] = data[9];
Str_minute[0] = data[10];
Str_minute[1] = data[11];
Str_second[0] = data[12];
Str_second[1] = data[13];
//Str to byte
year = atoi(Str_year); //轉換數據類型
month = atoi(Str_month);
date = atoi(Str_date);
DoW = atoi(Str_DoW);
hour = atoi(Str_hour);
minute = atoi(Str_minute);
second = atoi(Str_second);
Clock.setSecond(second);//Set the second
Clock.setMinute(minute);//Set the minute
Clock.setHour(hour); //Set the hour
Clock.setDoW(DoW); //Set the day of the week
Clock.setDate(date); //Set the date of the month
Clock.setMonth(month); //Set the month of the year
Clock.setYear(year); //Set the year (Last two digits of the year)
}
}
void loop() {
int second,minute,hour,date,month,dow,year,temperature;
settime();
second= Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
dow=Clock.getDoW();
temperature=Clock.getTemperature();
Serial.print("20");
Serial.print(year,DEC);
Serial.print('-');
Serial.print(month,DEC);
Serial.print('-');
Serial.print(date,DEC);
Serial.print(' ');
Serial.print(hour,DEC);
Serial.print(':');
Serial.print(minute,DEC);
Serial.print(':');
Serial.print(second,DEC);
Serial.print('');
Serial.print("Temperature=");
Serial.print(temperature);
Serial.print('');
lcd.setCursor(0, 0);
lcd.print("20"); // 顯示20世紀
if (year>=10) // 顯示年份
{
lcd.print(year,DEC);
}
else
{
lcd.print("0");
lcd.print(year,DEC);
}
lcd.print('-');
lcd.setCursor(5, 0);
if (month>=10) // 顯示月份
{
lcd.print(month,DEC);
}
else
{
lcd.print("0");
lcd.print(month,DEC);
}
lcd.print('-');
lcd.setCursor(8, 0);
if (date>=10) // 顯示日期
{
lcd.print(date,DEC);
}
else
{
lcd.print("0");
lcd.print(date,DEC);
}
lcd.setCursor(11, 0);
switch (dow) // 顯示星期
{
case 1: // 當dow等于1時,執行以下語句
lcd.print("Mon");
break;
case 2: // 當dow等于2時,執行以下語句
lcd.print("Tue");
break;
case 3:
lcd.print("Wed");
break;
case 4:
lcd.print("Thu");
break;
case 5:
lcd.print("Fri");
break;
case 6:
lcd.print("Sat");
break;
case 7:
lcd.print("Sun");
break;
}
lcd.setCursor(0, 1); //光標移至第2行
if (hour>=10) // 顯示小時
{
lcd.print(hour,DEC);
}
else
{
lcd.print("0");
lcd.print(hour,DEC);
}
lcd.print(':');
lcd.setCursor(3, 1);
if (minute>=10) // 顯示分鐘
{
lcd.print(minute,DEC);
}
else
{
lcd.print("0");
lcd.print(minute,DEC);
}
lcd.print(':');
lcd.setCursor(6, 1);
if (second>=10) // 顯示秒鐘
{
lcd.print(second,DEC);
}
else
{
lcd.print("0");
lcd.print(second,DEC);
}
lcd.setCursor(9, 1);
if (Clock.checkAlarmEnabled(1)) // 顯示鬧鐘標識
{
lcd.write(0x00);
}
else
{
lcd.print(' ');
}
lcd.setCursor(12, 1);
lcd.print(temperature); // 顯示溫度
lcd.write(0xdf); // 顯示溫度單位
lcd.print("C");
delay(1000);
}
結果:上電后發現,模塊成功運行,但是顯示的時間不對。
第三步:通過串口,對時鐘模塊進行校準,使得時間正常顯示
找到上面代碼中的如下這一段,你可以了解到,圖中紅框內的文字,是程序本身對校準時間定義了格式,還舉例說明了。所以,可以通過固定的格式,在串口對時鐘模塊進行校準
。
Open-Live-WriterLCD1602-I2CDS3231_8BE120170228112150_thumb.png (24.5 KB, 下載次數: 89)
下載附件
2017-5-11 17:00 上傳
首先,查看你目前情況下的年月日、北京時間、星期,隨后打開Arduino IDE 的串口監視器,在串口發送框里輸入當前北京時間,并點擊發送,原先的時間就變成了你所要設定的時間。
例:2017年2月28日 星期二 11:45:55秒
串口輸入的就是:2017022802114555
Open-Live-WriterLCD1602-I2CDS3231_8BE120170228114636_thumb.png (76.89 KB, 下載次數: 99)
下載附件
2017-5-11 17:00 上傳
注意:如果時間顯示不對,請多發送幾次。反應周期有點慢。
|