remitente máquina importación anclar,temporizador,I2C
importación Youtime
remitente SSD1306 importación SSD1306_I2C
importación Flame Buch
depurar=verdadero
I2C = I2C(0, Teletipo=anclar(1), Teletipo=anclar(0), frecuencia=200000)
OLED = SSD1306_I2C(128, 64, I2C)
Nombre de clave = [[‘1’,‘2’,‘3’,‘+’],
[‘4’,‘5’,‘6’,‘-‘],
[‘7’,‘8’,‘9’,‘*’],
[‘c’,‘0’,‘=’,‘/’]]
Pines de fila del teclado = [13,12,11,10]
Teclado Colpin = [9,8,7,6]
fila = []
col = []
Estado del teclado = [];
para Yo Y Pines de fila del teclado:
fila.adición(anclar(Yo,anclar.Y,anclar.PULL_UP))
Estado del teclado.adición([0,0,0,0])
para Yo Y Teclado Colpin:
col.adición(anclar(Yo,anclar.fuera))
Def desatar(Teletipo, Opuda, oprdB):
Si(Teletipo == “+”):
devolución Opuda + oprdB
Elihu(Teletipo == “-“):
devolución Opuda – oprdB
Elihu(Teletipo == “*”):
devolución oprdA * oprdB
Elihu(Teletipo == “/”):
devolución redondo(Opuda / oprdB , 6)
Def cálculo(Desembarco):
operando = []
operador = []
para Yo Y Desembarco:
Si(depurar):
Impresión(Yo)
Si(Yo==‘+’):
mientras (Len(operador)!=0 Y (operador[–1] == ‘*’ o operador[–1] == ‘/’ o operador[–1] == ‘-‘ o operador[–1] == ‘+’)):
b = operando.pop(–1)
Ser = operando.pop(–1)
c = operador.pop(–1)
operando.adición(desatar(c,Ser,b))
operador.adición(Yo)
Elihu(Yo==‘-‘):
mientras (Len(operador)!=0 Y (operador[–1] == ‘*’ o operador[–1] == ‘/’ o operador[–1] == ‘-‘ o operador[–1] == ‘+’)):
b = operando.pop(–1)
Ser = operando.pop(–1)
c = operador.pop(–1)
operando.adición(desatar(c,Ser,b))
operador.adición(Yo)
Elihu(Yo==‘*’):
mientras (Len(operador)!=0 Y (operador[–1] == ‘*’ o operador[–1] == ‘/’)):
b = operando.pop(–1)
Ser = operando.pop(–1)
c = operador.pop(–1)
operando.adición(desatar(c,Ser,b))
operador.adición(Yo)
Elihu(Yo==‘/’):
mientras (Len(operador)!=0 Y (operador[–1] == ‘*’ o operador[–1] == ‘/’)):
b = operando.pop(–1)
Ser = operando.pop(–1)
c = operador.pop(–1)
operando.adición(desatar(c,Ser,b))
operador.adición(Yo)
Elihu(Yo==‘(‘):
operador.adición(Yo)
Elihu(Yo==‘)’):
mientras(operador[–1] !=‘(‘):
b = operando.pop(–1)
Ser = operando.pop(–1)
c = operador.pop(–1)
operando.adición(desatar(c,Ser,b))
operador.pop(–1)
de otra manera:
operando.adición(Yo)
mientras(Len(operador) != 0):
b = operando.pop(–1)
Ser = operando.pop(–1)
c = operador.pop(–1)
operando.adición(desatar(c,Ser,b))
devolución operando[0]
Def Lectura del teclado():
global fila
j_ifPressed = –1
i_ifPressed = –1
para Yo Y gama(0,Len(col)):
col[i].Bajo()
Youtime.dormir(0.005) #settling時間
para j Y gama(0,Len(fila)):
Presionado = No fila[j].valor()
Si(Presionado Y (Estado del teclado[j][i] != Presionado)): #stateが高に変更されました
Estado del teclado[j][i] = Presionado
Elihu(No Presionado Y (Estado del teclado[j][i] != Presionado)): # Estado cambiado a bajo
Estado del teclado[j][i] = Presionado
j_ifPressed = j
i_ifPressed = Yo
col[i].Alto()
Si(j_ifPressed != –1 Y i_ifPressed != –1):
devolución Nombre de clave[j_ifPressed][i_ifPressed]
de otra manera:
devolución –1
Def Olet impreso(Desembarco):
Oredopos = {
“x” : 0,
“y” : 0
}
OLED.verter(0)
hilo = ”
para Yo Y Desembarco:
hilo += Teletipo(Yo)
l = 0
mientras(l<Len(hilo)):
OLED.Mensaje de texto(hilo[l:l+16],Oredopos[“x”], Oredopos[“y”])
Oredopos[“y”] =Oredopos[“y”] + 10
l = l+16
OLED.mostrar()
Indicador de cambio = falso
Firmar bandera = falso
Lista de entradas = [”]
OLED.mostrar()
OLED.verter(0)
OLED.mostrar()
OLED.Mensaje de texto(“Sencillo”,35,15,1)
OLED.Mensaje de texto(“Calculadora”,18,30,1)
OLED.mostrar()
Si __Nombre__ == 「__main__」:
mientras verdadero:
…key = Lectura del teclado()
Si(…key != –1):
Si((…key <= ‘9’ Y …key >=‘0’) o …key == ‘.’):
Lista de entradas[–1] = Lista de entradas[–1] + …key
Elihu(…key == ‘+’ o …key == ‘-‘ o …key == ‘*’ o …key == ‘/’):
Si(Lista de entradas != [”]):
Si(Lista de entradas[–1] == ” Y (Lista de entradas[–2] == ‘+’ o Lista de entradas[–2] == ‘-‘ o Lista de entradas[–2] == ‘*’ o Lista de entradas[–2] == ‘/’)):
Lista de entradas[–2] = …key
Elihu(Lista de entradas[–1]==”):
Lista de entradas[–1]=…key
Lista de entradas.adición(”)
de otra manera:
Lista de entradas[–1] = flotar(Lista de entradas[–1])
Lista de entradas.adición(…key)
Lista de entradas.adición(”)
Elihu(…key == ‘s’):
Indicador de cambio = No Indicador de cambio
Elihu(…key == “Oh.”):
Si(Indicador de cambio):
Si(Lista de entradas[–1] != ”):
Lista de entradas[–1] = flotar(Lista de entradas[–1])
Lista de entradas.adición(‘)’)
Lista de entradas.adición(”)
de otra manera:
Lista de entradas[–1] = ‘)’
Lista de entradas.adición(”)
Indicador de cambio = falso
de otra manera:
Firmar bandera = No Firmar bandera
Si(Lista de entradas[–1] == ”):
Lista de entradas[–1] = ‘-‘
de otra manera:
Si(Lista de entradas[–1][0] == ‘-‘):
Lista de entradas[–1] = Lista de entradas[–1][1:]
de otra manera:
Lista de entradas[–1] = ‘-‘ + Lista de entradas[–1]
Elihu(…key == ‘b’):
Si(Indicador de cambio):
Si(Lista de entradas[–1] == ”):
Lista de entradas[–1] = ‘(‘
de otra manera:
Lista de entradas.adición(‘(‘)
Lista de entradas.adición(”)
Indicador de cambio = falso
de otra manera:
Si(Lista de entradas[–1] == ”):
Lista de entradas[–1] = 3.14
de otra manera:
Lista de entradas.adición(3.14)
Lista de entradas.adición(”)
Elihu(…key == ‘c’):
Si(Indicador de cambio):
Lista de entradas = [”]
Indicador de cambio = falso
de otra manera:
Si(Lista de entradas == [“error”]):
Lista de entradas = [”]
Si(Lista de entradas != [”]):
Si(Lista de entradas[–1] == ”):
Lista de entradas.pop()
Lista de entradas[–1] = Teletipo(Lista de entradas[–1])[:–1]
de otra manera:
Lista de entradas[–1] = Teletipo(Lista de entradas[–1])[:–1]
Elihu(…key == ‘=’):
Si(Lista de entradas[–1] == ”):
Lista de entradas.pop(–1)
Elihu(Lista de entradas[–1] != ‘)’):
Lista de entradas[–1] = flotar(Lista de entradas[–1])
probar:
respuesta = cálculo(Lista de entradas)
Lista de entradas = [str(ans)]
exceptuar:
respuesta = ”
Lista de entradas = []
Lista de entradas.adición(“Error”)
Olet impreso(Lista de entradas)
Impresión(Lista de entradas)