之前篇博客已经介绍过ht1621这款驱动芯片,一般通用较多的芯片驱动代码,网上都有资源。但是若完全照搬而没有理解到位,或者忽略了细节。那么对于驱动的运用并不会那么到位甚至会犯很大的错误。下面有我的示例,驱动代码是网上移植的部分:
STM32库中对于GPIO口的定义是对应相应寄存器的操作位的,所以一般都有16位即对应GPIO0-GPIO15,不知道这位作者是移植了51代码还是画蛇添足。把原本16位的GPIO强制转换成了8位,导致我定义的GPIO9-GPIO15的IO口都失败了,我还找芯片手册,刚好那几个是有些特殊,差点就要改板子了。
其实HT1621驱动代码并不复杂,通信方式就是串口通信,所以发送数据的程序就结合时序图用类似模拟IIC的方式编写,具体代码如下:
这个是从给定数据的高位写入,但是对应LCD的RAM其实是4个COM口(一般来说),所以在连续写入的命令下。C语言对数据类型定义最少都是8位,所以若想把一个SEG口对应4个COM口的数据作为单个元素(放在单个8位变量),应该改为从地位写入较为方便。其他的数据命令和读写都是基于写入函数的拓展,这里不再赘述。注意一点,开启节电命令后,LCD的偏压发生器关闭,则LCD无法显示。所以还不如直接关闭了驱动模块,可能对于声音模块还有用吧。