stm32–使用GPIO驱动1608液晶屏

stm32–使用GPIO驱动1608液晶屏

初学stm32,同时手中还有一块51板子给的1602液晶屏,于是打算写个(误)小程序来驱动。

1602字符型LCD简介

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。

如图
QQ截图20160418203150

1602LCD主要技术参数:

显示容量:16×2个字符

芯片工作电压:4.5—5.5V

工作电流:2.0mA(5.0V)

模块最佳工作电压:5.0V

字符尺寸:2.95×4.35(W×H)mm

引脚功能说明

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:

编号符号引脚说明编号符号引脚说明
1VSS电源地9D2数据
2VDD电源正极10D3数据
3VL液晶显示偏压11D4数据
4RS数据/命令选择12D5数据
5R/W读/写选择13D6数据
6E使能信号14D7数据
7D0数据15BLA背光源正极
8D1数据16BLK背光源负极

顺便附上指令库

1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:

序号指令RSR/WD7D6D5D4D3D2D1D0
1清显示0000000001
2光标返回000000001*
3置输入模式00000001I/DS
4显示开/关控制0000001DCB
5光标或字符移位000001S/CR/L**
6置功能00001DLNF**
7置字符发生存贮器地址0001字符发生存贮器地址
8置数据存贮器地址001显示数据存贮器地址
9读忙标志或地址01BF计数器地址
10写数到CGRAM或DDRAM)10要写的数据内容
11从CGRAM或DDRAM读数11读出的数据内容

10.8.2.5 1602LCD的一般初始化(复位)过程

延时15mS

写指令38H(不检测忙信号)

延时5mS

写指令38H(不检测忙信号)

延时5mS

写指令38H(不检测忙信号)

以后每次写指令、读/写数据操作均需要检测忙信号

写指令38H:显示模式设置

写指令08H:显示关闭

写指令01H:显示清屏

写指令06H:显示光标移动设置

写指令0CH:显示开及光标设置

好了,有了这些信息基本上可以写一个程序来驱动这个屏幕了(内置字符和地址啥的不放啦,再放过来太多了)

我使用的开发板是在购买元件时候随便买的,很小的板子芯片是STM32F103VET6 (大小参考旁边的stlink仿真器)

我们学习的是cube库,老库已经不更新了,所以学习新库。

这个板子的一行的io口并不是连续的…于是我随便插上了一行,这导致我写io的时候造成了很大的不便从io包括了C、A、B、E

一开始我给液晶屏的供电使用的是板子得高低电平,但是这个控制器工作电压是5v,导致我并不能驱动,后来借到了杜板线后我使用仿真器的5v来供电。

由于使用的是gpio,所以我无法从液晶屏中读取忙信号,所以我采用较长延时的方式来处理。而且我并不需要知道当前显示的信息。所以不能读取并无大碍。

然后开始新建工程,可视化的cube使这一步相当的便利,选好片子,仿真方式,配置好时钟,将GPIO使能…

然后输出到Keil uVision5开始写代码,由于我是直接靠控制GPIO的高低电平来写的,所以极度复杂(尽管我已经做了封装):

主函数:

最后选择stlink,烧录进片子….

如果你认真的看了我的代码,那么你一定会想从46行到129行都是什么鬼 ,其实就是输出高低电平让显示屏大触LYPHIX几个字。

那么我已经封装起来了为什么不直接调用呢?理由很简单:

当我封装好了之后,班导看了下跟我说:你没必要继续写了,你通过GPIO让他显示出来说明已经明白原理了,回头用SPI通讯写吧。

不过后来我发现这个1602并没有SPI,只有并行通讯,于是我又买了12846液晶屏,敬请期待….

最后放个成功的图

最后:VL一定要接个电阻….不然你会一直以为你失败了,直到你从上方看自己的液晶屏….别问我怎么知道的…

Tags: ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code