使用32驱动1602液晶屏
发布日期:2021-05-10 23:35:55 浏览次数:23 分类:精选文章

本文共 3067 字,大约阅读时间需要 10 分钟。

此处我用的是正点原子F3的精英板,去驱动普中51开发板带的配件1602液晶屏,由于没有直接对应的接口,于是只能用飞线大法了…

连接实物图如下:

连接实物图
1602液晶屏引脚说明:
在这里插入图片描述
32对应引脚连接:
PDout(6) //读/写选择-----------------------------R/W
PGout(14) //数据/命令选择---------------------R/S
PGout(15) //使能端-------------------------------E
PCout(0-7) //输出端------------------------------D0->D7
(VL接了GND)

利用模板我们先再HARDWARE里创建一个文件1602_show.c和1602_show.h

在.c文件中,首先先把我们用到的I/O口都使能一下

//32端口初始化void GPIOX_Init(void) {   	RCC->APB2ENR |= 1<<5;			// IO端口D时钟使能	RCC->APB2ENR |= 1<<8;			// IO端口G时钟使能	RCC->APB2ENR |= 1<<4;			// IO端口C时钟使能		GPIOD->CRL &= 0xF0FFFFFF;		//GPIOD   6   设为通用推挽输出  读/写选择	GPIOD->CRL |= 0x03000000;		GPIOG->CRH &= 0x00FFFFFF;		//GPIOG 14 设为通用推挽输出  数据/命令选择	GPIOG->CRH |= 0x33000000;		//GPOIG 15 设为通用推挽输出  液晶屏使能端		GPIOC->CRL &= 0x00000000;		//GPIOC  0-7  设为通用推挽输出  用于数据命令传输	GPIOC->CRL |= 0x33333333;}

然后调用命令写入函数把1602液晶屏初始化一下

//1602液晶屏驱动初始化 (初始化可有多种选择)void Lcd_Init(void) {   			LcdWriteCom(0x38);  //开显示   显示两行 5*10点阵 	delay_ms(1);	LcdWriteCom(0x0f);  //开显示显示   0x0e光标不闪烁   0x0f光标闪烁	delay_ms(1);	LcdWriteCom(0x06);  //写一个指针加1 光标右移	delay_ms(1);	LcdWriteCom(0x01);  //清屏  0x01	delay_ms(1);	LcdWriteCom(0x80); //设置数据指针起点   0x80   1000 0000 + 0000 0000 初始光标在左上角	delay_ms(1);}

命令写入函数实现如下:

//写入命令void LcdWriteCom(unsigned char com) {     		//放入缓存	GE = 0;			//使能清零	GRS = 0;		//选择输入命令	DRW = 0;		//选择写入	GPIOC->ODR &= 0xFFFFFF00;  	GPIOC->ODR |= com; 	delay_ms(1);		//写入 检测到GE位为高(0->1上升沿)时会自动写入 	GE = 1;	delay_ms(2);		//等待写入完成	GE = 0;	}

数据写入函数如下:

//数据写入函数 (同命令写入一样,只改了一下数据/命令选择而已)void LcdWriteData(unsigned char dat) {   	GE = 0;			//使能清零	GRS = 1;		//选择输入数据	DRW = 0;		//选择写入	GPIOC->ODR &= 0xFFFFFF00;  	GPIOC->ODR |= dat;	delay_ms(1);	GE = 1;   	delay_ms(2); 	GE = 0;}

在1602_show.h 中将函数都声明一下并定义各个I/O口

代码如下:

#ifndef _1602_H#define _1602_H#include 
#define DRW PDout(6) //读/写选择#define GRS PGout(14) //数据/命令选择#define GE PGout(15) //使能端#define C0 PCout(0) //输出端#define C1 PCout(1)#define C2 PCout(2)#define C3 PCout(3)#define C4 PCout(4)#define C5 PCout(5)#define C6 PCout(6)#define C7 PCout(7)#define DRW PDout(6) //读/写选择#define GRS PGout(14) //数据/命令选择#define GE PGout(15) //使能端void GPIOX_Init(void);void Lcd_Init(void);void LcdWriteCom(u8 com);void LcdWriteData(u8 dat);#endif

在了解一下命令含义就可以在主函数中随意发挥了。

常用命令:
1、清屏指令
在这里插入图片描述
功能:
<1> 清除液晶显示器,即将 DDRAM 的内容全部填入"空白"的 ASCII码 20H;
<2> 光标归位,即将光标撤回液晶显示屏的左上方;
<3> 将地址计数器(AC)的值设为 0。
|
|
2、进入模式设置指令
在这里插入图片描述
功能 : 设定每次定入 1 位数据后光标的移位方向 , 并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:
I/D 0=写入新数据后光标左移 1=写入新数据后光标移
S 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右
移 1 个字符
|
|
3、显示开关控制指令
在这里插入图片描述
功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:
D 0=显示功能关 1=显示功能开
C 0=无光标 1=有光标
B 0=光标闪烁 1=光标不闪烁
|
|
4、功能设定指令
在这里插入图片描述
功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:
DL 0=数据总线为 4 位 1=数据总线为 8 位
N 0=显示 1 行 1=显示 2 行
F 0=5×7 点阵/每字符 1=5×10 点阵/每字符
|
|
5、具体显示位置
在设置完成之后我们就要明白具体是在哪显示,在哪个位置显示?在对液晶模块的初始化中要先设置其显示模式, 在液晶模块显示字符时光标是自动右移的, 无需人工干预。 每次输入指令前都要判断液晶模块是否处于忙的状态。DDRAM 就是显示数据 RAM ,用来寄存待显示的字符代码。共 80 个字节,其地址和屏幕的对应关系如下表:
在这里插入图片描述
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,例如第二行第一个字符的地址是 40H, 那么是否直接写入 40H 就可以将光标定位
在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7
恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)

可用字码:

在这里插入图片描述
(注:以上命令摘自普中LCD1206液晶PPT)

在这里插入图片描述

小弟初学,如有错误,还请指正,万分感谢~^o^

上一篇:用变量地址输出变量值
下一篇:STM32 GPIO 配置之ODR, BSRR, BRR 详解

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月05日 20时02分28秒