from machine import Pin, I2C, RTC,Timer
from ssd1306 import SSD1306_I2C
# 定义星期和时间(时分秒)显示字符列表
week = ['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
time_list = ['', '', '']
# 初始化所有相关对象
i2c = I2C(sda=Pin(13), scl=Pin(14)) #I2C 初始化:sda-->13, scl -->14
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
rtc = RTC()
# 首次上电配置时间,按顺序分别是:年,月,日,星期,时,分,秒,次秒级;这里做
#了一个简单的判断,检查到当前年份不对就修改当前时间,开发者可以根据自己实际情况
#来修改。
if rtc.datetime()[0] != 2023:
rtc.datetime((2023, 11, 7, 2, 9, 39, 31,0))
def RTC_Run(tim):
datetime = rtc.datetime() # 获取当前时间
oled.fill(0) # 清屏显示黑色背景
oled.text('202110733125..', 0, 0) # 首行显示 01Studio
oled.text('weiyaoeng', 0, 15) # 次行显示实验名称
# 显示日期,字符串可以直接用“+”来连接
oled.text(str(datetime[0]) + '-' + str(datetime[1]) + '-' + str(datetime[2]) + ' ' + week[datetime[3]], 0, 40)
# 显示时间需要判断时、分、秒的值否小于 10,如果小于 10,则在显示前面补“0”以
# 达到较佳的显示效果
for i in range(4, 7):
if datetime[i] < 10:
time_list[i - 4] = "0"
else:
time_list[i - 4] = ""
# 显示时间
oled.text(time_list[0] + str(datetime[4]) + ':' + time_list[1] + str(datetime[5]) + ':' + time_list[2] + str(datetime[6]), 0, 55)
oled.show()
#开启 RTOS 定时器
tim = Timer(-1)
tim.init(period=300, mode=Timer.PERIODIC, callback=RTC_Run) #周期 300ms