DS1302 + OLED 12864+Arduino 显示时钟
获取时间,并驱动OLE12864显示
代码如下:
#include <U8g2lib.h>
代码如下:
#include <U8g2lib.h>
#include <Wire.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
ThreeWire myWire(A1, A2, A0); //set data.clk,rst Pin
RtcDS1302<ThreeWire> Rtc(myWire);
#define countof(a) (sizeof(a) / sizeof(a[0]))
int yue , ri, nian, shi , fen , miao , zhou ;
void setup() {
Serial.begin(9600);
Rtc.Begin();
u8g2.begin();
Serial.print("compiled: ");
Serial.print(__DATE__); //打印系统日期
Serial.println(__TIME__); //打印系统时间
RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); //Set Time for Rtc Object
Rtc.SetDateTime(compiled); //设置时钟芯片时间和电脑时间一致
}
void loop() {
RtcDateTime now = Rtc.GetDateTime();
printDateTime(now); //串口打印当前时间
show_time(now);//屏幕上显示当前时间
if (RtcDateTime (shi) == 12 && RtcDateTime (fen) == 00 && RtcDateTime (miao) == 00) {//闹钟设置
Serial.print("123");
}
}
void printDateTime(const RtcDateTime& dt) {
char datestring[22];
snprintf_P(datestring,
countof(datestring),
PSTR("%02u/%02u/%04u %02u:%02u:%02u %01u"),//输出日期到串口 输出的结果总共占两位,十进制的形式输出
dt.Month(),
dt.Day(),
dt.Year(),
dt.Hour(),
dt.Minute(),
dt.Second(),
dt.DayOfWeek()
);
//Serial.println(datestring);
}
//show time
void show_time(const RtcDateTime & dt) { //时间显示页面
String z_str = "";
yue = dt.Month();
ri = dt.Day();
nian = dt.Year();
shi = dt.Hour();
fen = dt.Minute();
miao = dt.Second();
zhou = dt.DayOfWeek();
switch ( zhou)
{ //将星期从数字转换为名称
case 7: z_str = "Sunday"; break;
case 1: z_str = "Monday"; break;
case 2: z_str = "Tuesday"; break;
case 3: z_str = "Wednesday"; break;
case 4: z_str = "Thursday"; break;
case 5: z_str = "Friday"; break;
case 6: z_str = "Saturday"; break;
}
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_luIS12_tr);//设置字体
u8g2.setCursor(12, 20); //设置光标处
u8g2.print(String(nian) + "-" + String(yue) + "-" + String(ri));//输出内容
u8g2.setCursor(24, 35); //设置光标处
u8g2.print(String(shi) + ":" + String(fen) + ":" + String(miao));//输出内容
u8g2.setCursor(12, 50);//设置光标处
u8g2.print(z_str);//输出内容
} while ( u8g2.nextPage() );
// delay(50);
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。