使用32驱动1602液晶屏

此处我用的是正点原子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 <sys.h>

#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^

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值