import machine
from machine import Pin
import time
# 定义TMI621D模块的引脚连接
pin_cs = machine.Pin(0, Pin.OUT)
pin_wr = machine.Pin(1, Pin.OUT)
pin_data = machine.Pin(2, Pin.OUT)
#TMI621D模块命令定义
SYSDIS = 0x00 #关系统振荡器和LCD偏压发生器
SYSEN = 0x02 #打开系统振荡器
LCDOFF = 0x04 #关闭LCD偏压
LCDON = 0x06 #打开LCD偏压
RC = 0x30 #内部RC震荡
BIAS = 0x52 # 1/3偏压 4公共口
def delay_ns():
time.sleep_us(10) #延时10us
#从高位写入数据
def write_data_h(data,cnt):
for i in range(cnt):
pin_wr.off()
if data & 0x80: #从最高位发送
pin_data.on()
else:
pin_data.off()
delay_ns()
pin_wr.on()
data<<= 1
pin_wr.off()
pin_data.off()
#从低位写入数据
def write_data_l(data,cnt):
for i in range(cnt):
pin_wr.off()
if data & 0x01: #从最低位发送
pin_data.on()
else:
pin_data.off()
delay_ns()
pin_wr.on()
data>>= 1
pin_wr.off()
pin_data = 0
#写入控制命令
def writecmd(cmd):
pin_cs.off()
delay_ns()
write_data_h(0x80,4) #写入命令标志100
write_data_h(cmd,8) #写入命令数据
pin_cs.on()
delay_ns()
#指定地址写入数据
def writeonedata(addr,data):
pin_cs.off()
delay_ns()
write_data_h(0xa0,3) #写入命令标志101
write_data_h(addr<<2,6) #写入地址数据
write_data_l(data,4) #写入数据
pin_cs.on()
delay_ns()
#连续写入方式,每次数据为8位,写入数据
def writealldata(addr,p,cnt):
pin_cs.off()
delay_ns()
write_data_h(0xa0,3) #写入命令标志101
write_data_h(addr<<2,6) #写入地址数据
for i in range(cnt):
write_data_l(p[i],8)
pin_cs.on()
delay_ns()
#TM1621D初始化
def IM1621D_init():
pin_cs.on()
pin_wr.on()
pin_data.on()
delay_ns()
writecmd(BIAS) # 1/3偏压4公共口
writecmd(RC) # 内部RC震荡
writecmd(SYSDIS) #关系统振荡器和LCD偏压发生器
writecmd(SYSEN) #打开系统振荡器
writecmd(LCDON) #打开LCD偏压