#第一步
from machine import Pin, SoftI2C, RTC,Timer

from ssd1306 import SSD1306_I2C
# 定义星期和时间(时分秒)显示字符列表0-6,别想用写中文,汉字处理起来有点麻烦

week = ['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
time_list =['','','',]


# 初始化所有相关对象
i2c=SoftI2C(sda=Pin(21), scl=Pin(22))#OLED屏I2C初始化11 
oled =SSD1306_I2C(128, 64, i2c, addr=0x3c)
rtc =RTC()

"""	
首次上电配置时间,按顺序分别是:年,月,日,星期,时,分,秒,次秒级;这里做了一个简单的判断,检查到当前年份不对就修改当前时间,开发者可以根据自己实际情况来修改。
"""

if rtc.datetime()[0] != 2023:
	rtc.datetime((2023, 10, 31, 1, 10, 10, 10, 10))	

def RTC_Run(tim):	
    datetime = rtc.datetime()	# 获取当前时间	
    oled.fill(0)	# 清屏显示黑色背景	
    oled.text('Franze', 0, 0)	# 首行显示Franze	

    oled.text('RTC Clock', 0, 15)	# 次行显示实验名称	

	# 显示日期,字符串可以直接用“+”来连接	
    oled.text(str(datetime[0])	+ '-' + str(datetime[1]) + '-' + str(datetime[2]) +'' + week[datetime[3]], 0, 40)	

	# 显示时间需要判断时、分、秒的值否小于10,如果小于10,则在显示前面补"日”以达	
	# 到较佳的显示效果	
    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(0)
    tim.init(period=100,mode=Timer.PERIODIC, callback=RTC_Run)#周期100ms	醉里挑灯舞剑