2025年从零开始写驱动——vfd专用驱动芯片HT16514并行驱动程序编写

从零开始写驱动——vfd专用驱动芯片HT16514并行驱动程序编写前言 一直看别人搞的 vfd 很漂亮 前段时间淘了个 vfd 模块来 但没有模块资料 还好芯片没有打磨的 良心商家啊 周末抽空来研究一下这个东西 从零开始 打开外壳 测试线路 查看芯片是 HT16514 去搜索到芯片手册

大家好,我是讯享网,很高兴认识大家。

前言

一直看别人搞的 vfd 很漂亮,前段时间淘了个 vfd 模块来,但没有模块资料,还好芯片没有打磨的,良心商家啊。周末抽空来研究一下这个东西。


讯享网

 

从零开始

打开外壳

测试线路

  1. 查看芯片是 HT16514,去搜索到芯片手册(博客没有找到上传附件的功能,不然肯定要放一个附件的)
  2. 根据芯片手册的引脚图,测试插针与引脚的电阻,从而确定每个引脚的功能
  3. 测试后发现用的是 M68 并行接口方式,而且电路上没有做跳线开关调整功能,要是串行该多好啊,这并行接口岂不是要用光 arudino uno 的引脚了。不过反正是试着驱动它,是串行还是并行都一样,以后真有需要再改硬件
  4. 下面就是根据芯片手册来写驱动程序了
    查看电平稳定时间都是用 ns 做单位的,对于 arduino 的执行效率来说应该是不需要考虑这个问题,因此驱动程序里没有加上延时处理,如果哪天用的板子速度太快,执行结果不正常的话,那就需要考虑加上延时了。

驱动编写

最主要就是根据时序图,及命令表来设置每个引脚的电平高低,以及电平变化时间,这就完成了:

驱动程序

没有找到上传附件的功能,那就把程序完整贴出来喽。

把驱动写成一个类的形式,方便使用。并行接口有 8 位和 4 位两种模式,用不同的构造函数来初始化实例来实现两种模式的区分。8 位模式的话,反正都要用这么多引脚了,直接使用 uno 的 PORTD 来当数据 IO 口,方便写程序操作,但下载程序的时候要注意拔掉 0 1 两脚接线以免下载失败。

头文件:
// ---------------------------------------------------------------------------- // driverHT16514Parallel.h // // Created 2015-07-04 // By seesea <seesea2517#gmail#com> // // HT16514 并行驱动 // 根据当前需要只实现部分功能 // ----------------------------------------------------------------------------  #ifndef _DRIVERHT16514PARALLEL_H_ #define _DRIVERHT16514PARALLEL_H_ #include <arduino.h> #define DATA_PORT PORTD #define DDR_PORT DDRD class HT16514Parallel { private: char RW; // RW char E; // E char RS; // RS char dataPins[4]; // 四位数据线的时候使用的引脚,数据引脚存放顺序由高到低,即 0:DB7 ... 3:DB4 static const byte dataPinMask[4]; // 四位数据线时使用的引脚掩码 bool isDisplayOn; // 显示是否打开,是的话 true bool isBlink; // 是否开启闪烁,是的话 true bool isShowCursor; // 是否显示光标,是的话 true char dataLength; // 数据长度,使用 PORTD 的时候是 8 位,使用四位数据线的时候是 4 位 char rowNumber; // 显示器行数 char curRow; // 输出位置之当前行 char curCol; // 输出位置之当前列 public: HT16514Parallel(char _RW, char _E, char _RS); // 构造函数,使用 PORTD 来做数据输出 HT16514Parallel(char _RW, char _E, char _RS, // 构造函数,使用四位并行方式,用指定的四个引脚来做数据输出 char D7, char D6, char D5, char D4); void sendCommand(byte cmd); // 发送命令 void sendData(byte data); // 发送数据 void init(char dl); // 初始化模块数据 void initDisplay(); // 初始化显示屏 void clear(); // 清屏 void moveCursorHome(); // 光标回左上角 void displayOn(); // 显示开 void displayOff(); // 显示关 void blinkOnCursor(); // 光标闪烁开 void blinkOffCursor(); // 光标闪烁关 void showCursor(); // 显示光标 void hideCursor(); // 隐藏光标 void shiftLeftDisplay(); // 左移显示内容 void shiftRightDisplay(); // 右移显示内容 void shiftLeftCursor(); // 左移光标 void shiftRightCursor(); // 右移光标 void setBrightLevel(char level); // 设置亮度,共有四级:0 级最亮,4 级最暗 void putChar(char ch, char row = -1, char col = -1); // 于指定位置显示指定字符,不指定位置则在当前位置显示 void print(char *str, char row = -1, char col = -1); // 于指定位置显示指定字符串,不指定位置则在当前位置显示 }; #endif

讯享网
小讯
上一篇 2025-03-23 18:44
下一篇 2025-02-18 13:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17401.html