# Jesus Antonio Rosario Hernandez, 602-A, Sistemas Embebidos.
from machine import Pin, I2C
import time
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=100000)
dias = ['domingo','lunes','martes','miercoles','jueves','viernes','sabado']
meses = ['enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre']
def BCD2Bin(num):
auxd = num & 0xF0
auxd = auxd >> 4
auxu = num & 0x0F
return auxd * 10 + auxu
def Bin2BCD(num):
auxd = num // 10
auxd = auxd << 4
auxu = num % 10
return auxd | auxu
def readTime():
time = [0, 0, 0]
hora = i2c.readfrom_mem(104, 0, 3)
for i in range(3):
time[i] = BCD2Bin(hora[2-i])
return time
def writeTime(time):
datos = [0, 0, 0]
for i in range(3):
datos[i] = Bin2BCD(time[2-i])
i2c.writeto_mem(104, 0, bytearray(datos))
def readDate():
date = [0, 0, 0, 0]
fecha = i2c.readfrom_mem(104, 3, 4)
for i in range(4):
date[i] = BCD2Bin(fecha[i])
return date
def writeDate(date):
datos = [0, 0, 0, 0]
for i in range(4):
datos[i] = Bin2BCD(date[i])
i2c.writeto_mem(104, 3, bytearray(datos))
while True:
print("1. Leer la hora.")
print("2. Escribir la hora.")
print("3. Leer la fecha.")
print("4. Escribir la fecha.")
print("5. Salir.\n")
opcion = input("Indique la opción: ")
print()
if opcion == '1':
hora = readTime()
print(f"Hora actual: {hora[0]}:{hora[1]}:{hora[2]}")
elif opcion == '2':
s = int(input("Segundos a escribir: "))
m = int(input("Minutos a escribir: "))
h = int(input("Hora a escribir: "))
writeTime([h, m, s])
elif opcion == '3':
fecha = readDate()
print(f"Fecha actual: {dias[fecha[0]-1]}, {fecha[1]} de {meses[fecha[2]-1]} del 20{fecha[3]}")
elif opcion == '4':
num = int(input("Dia de la semana a escribir (num, ej. domingo = 1): "))
dia = int(input("Dia a escribir: "))
mes = int(input("Mes a escribir: "))
anio = int(input("Año a escribir (dos digitos, ej. 2025 = 25):"))
writeDate([num, dia, mes, anio])
elif opcion == '5':
print("Fin de programa.")
break
else:
print("Opción no valida.")
print()
input("Presione enter para continuar.")
print()