最近一个月都在被期末考试折磨,大学生活真是和想象中的有些出入~

之前在淘宝买了个VFD模块,VFD与LCD/OLED等新技术相比优点是自发光,亮度高,响应速度较快等,这个模块用的是FUTABA的8-MD-06INKM显示屏(强烈鄙视这种意义不明的型号命名),商家自己加了驱动电路,引出了7根引脚,通过SPI通讯,裸屏的话有三四十根引脚,自己搞的话还是比较痛苦的。

MCU用的是我非常喜爱的nodemcu,为了便于后期维护,简单的画了个PCB, PCB上有两个1*15的排母,用来安放nodemcu, 一个7pin的XH2.54母座,还有一个用于供电的6pin的typec母座,因为只用于供电所以只引出了电源,然后又在VFD模块的PCB上焊了个7pin XH2.54母座,显示模块和MCU所在的PCB就通过一根7 pin XH2.54排线连接,顺便在pcb上按照商家给的尺寸打了4个孔,用于通过铜柱固定两块PCB。

很简单的PCB,文件就不放了

然而焊完之后发现VFD模块上的母座挡住了孔位,导致两根铜柱无法固定,后期准备稍微打磨下母座或者铜柱,问题应该不大。并且typec母座的焊盘略小了,母座放上去基本上就完全和焊盘重合了,SMD贴片当然没啥问题,我手动焊就很难受了,焊盘稍微画大点会好很多。

demo

商家给的资料里只有C51和Arduino的demo, 我个人比较喜欢micropython, 所以自己就改了改移植到了mciropython,虽然原理我完全不懂,但是能用就行。

from machine import Pin
from time import sleep_us


# 引脚定义
din = Pin(14, Pin.OUT) # D5
clk = Pin(12, Pin.OUT) # D6
cs = Pin(13, Pin.OUT) # D7
reset = Pin(15, Pin.OUT) # D8
en = Pin(3, Pin.OUT) # RX


def write_6302(w_data: int):
    for i in range(0, 8):
        clk.off()
        if (w_data & 0x01) == 0x01:
            din.on()
        else:
            din.off()
        w_data >>= 1
        clk.on()


def vfd_cmd(command: int):
    cs.off()
    write_6302(command)
    cs.on()
    sleep_us(5)


def S1201_show():
    cs.off()  # 开始传输
    write_6302(0xe8)  # 地址寄存器起始位置
    cs.on()  # 停止传输


def vfd_init():
    # 设置位数
    cs.off()
    write_6302(0xe0)
    sleep_us(5)
    write_6302(0x07) # 8位
    cs.on()
    sleep_us(5)
    # 设置亮度
    cs.off()
    write_6302(0xe4)
    sleep_us(5)
    write_6302(0xff) # 最高255
    cs.on()
    sleep_us(5)


"""
    在指定位置打印一个字符(用户自定义,所有CG-ROM中的)
    x:位置,c:要显示的字符编码
"""
def write_one_char(x: int, c: int):
    cs.off()  #开始传输
    write_6302(0x20 + x) #地址寄存器起始位置
    write_6302(c + 0x30)
    cs.on() #停止传输
    show()


"""
    在指定位置打印字符串
    (仅适用于英文,标点,数字)
    x: 位置, s: 要显示的字符串
"""
def write_str(x: int, s: str):
    cs.off()  # 开始传输
    write_6302(0x20 + x)  # 地址寄存器起始位置
    for i in s:
        write_6302(ord(i))
    cs.on()  # 停止传输
    show()


# 初始化
en.on()
reset.off()
sleep_us(5)
reset.on()
vfd_init()