
使用32驱动1602液晶屏
1602液晶屏引脚说明:
32对应引脚连接: PDout(6) //读/写选择-----------------------------R/W PGout(14) //数据/命令选择---------------------R/S PGout(15) //使能端-------------------------------E PCout(0-7) //输出端------------------------------D0->D7 (VL接了GND)
功能: <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)
发布日期:2021-05-10 23:35:55
浏览次数:23
分类:精选文章
本文共 3067 字,大约阅读时间需要 10 分钟。
此处我用的是正点原子F3的精英板,去驱动普中51开发板带的配件1602液晶屏,由于没有直接对应的接口,于是只能用飞线大法了…
连接实物图如下:


利用模板我们先再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、清屏指令




可用字码:
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月05日 20时02分28秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
OO_Unit2 多线程电梯总结
2021-05-09
json-lib的使用《二》
2021-05-09
LeetCode52题,别再问我N皇后问题了
2021-05-09
简单实用算法——字节位序反转
2021-05-09
webpack之带有可自动打开浏览器及热重载的基本配置
2021-05-09
前端的批量接口如何快速响应?有没有通用解决方案?
2021-05-09
Shader 入门笔记(一) 如何学习shader
2021-05-09
Huffman树及其编解码
2021-05-09
分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案
2021-05-09
20.波利亚过程
2021-05-09
04_Mysql配置文件(重要参数)
2021-05-09
浅谈使用git进行版本控制
2021-05-09
python 序列化及其相关模块(json,pickle,shelve,xml)详解
2021-05-09
深入学习Tesseract-ocr识别中文并训练字库的方法
2021-05-09
js编写动态时钟
2021-05-09
JavaSE总结
2021-05-09
Consul安装使用
2021-05-09
手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
2021-05-09