PCF8574AT驱动LCD1602
STM32用IIC驱动LCD1602
- 介绍
- PCF8574AT
- 选址
- 芯片接线图
- LCD1602
- 显示问题
- 乱码问题
- 实现代码
介绍
网上寻遍了资料发现驱动LCD1602液晶屏的程序几乎都是4线或8线数据线。基本思路都是直接操作I/O,但是缺点是接线太多,十分麻烦。PCF8574和PCF8574AT这两种芯片都是IIC芯片,可以将并行的八根数据线转换只用两根数据线进行控制,减少了I/O口的使用,提高所使用微处理器的控制能力。
故此记录用PCF8574AT代替直接操作I/O驱动LCD1602。以下内容是编写程序时发现并修正的一些错误和使用该款芯片时需要注意的细节,希望能够抛砖引玉。如有错误还请指正!
PCF8574AT
某宝上有一款LCD1602驱动板,能够极大程度节约引脚资源。用IIC协议驱动屏幕。
芯片资料
选址
其中值得注意的点,芯片名称有所区别,根据实际芯片找到对应的地址才能寻址成功。A2 A1 A0是硬件选址,默认不接均为1。最低bit为读写位。
以PCF8574AT为例,查找其地址。
最后芯片写地址是
0x7e
芯片接线图
LCD1602
数据手册
提取:mp91
显示问题
我使用野火指南者板子stm32f103vet6,程序烧写后需要复位才能正常显示lcd1602内容。这个问题可以在lcd初始化命令补一句。
LCD_WriteCMD(0x02);
//必须要,如果没有了第一次上电会没内容
void LCD_Init(void)
{ i2c_CfgGpio(); /* 配置GPIO */LCD_WriteCMD(0x02);/*必须要,如果没有了第一次上电会没内容*/LCD_WriteCMD(0x28);/* 0x28 4线操作模式 0x38 8线模式 */ /* 0000 1DCB D开关显示 C开关光标 B开关光标闪烁 */LCD_WriteCMD(0x0c);/* 开显示,关光标 */LCD_WriteCMD(0x06);/* 文字不动,地址自动加1 */LCD_WriteCMD(0x01);/* 清屏 */SysTick_Delay_Ms( 5);
}
上述初始化之后,完美解决了上电复位后才显示文本的问题。
乱码问题
快速复位lcd1602会出现乱码是因为没有读忙函数
。
读忙函数
51实现:
/* 等待液晶准备好 */
void LcdWaitReady()
{unsigned char sta;LCD1602_DB = 0xFF;LCD1602_RS = 0;LCD1602_RW = 1;do {LCD1602_E = 1;sta = LCD1602_DB; //读取状态字LCD1602_E = 0;} while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止
}
STM32实现:
void LCD1602_Wait_Ready(void)
{uint8_t sta; LCD_data |= 0xf0; //数据高四位置1i2c_WriteByte(LCD_data);LCD_data &=~(1<<(1-1));//RS=0; // 0 0 0 0 0 0 0 0LCD_data |=(1<<(2-1));//RW=1; // D7 D6 D5 D4 E RW RSi2c_WriteByte(LCD_data); do{LCD_data |= 1<<2; // 0000(数据)0000(控制位)// 0xxx 0100 -------> E=1i2c_WriteByte(LCD_data);SysTick_Delay_Ms(5); //延时sta = i2c_R_Byte(); /* 读取状态字 */LCD_data ^= 1<<2; //异或运算(还原)// 0xxx 0000 ----------> E=0//or LCD_data &=~(1<<2) //I2C_WriteByte(LCD_data);//1→0 执行指令 i2c_WriteByte(LCD_data); }while(sta &0x80); /* 状态字的最高位 1忙,0空闲 */
}
实现代码
点击此处
PCF8574AT驱动LCD1602相关推荐
- 通过 I2C 驱动 LCD1602 液晶屏(51单片机)
通过 I2C 驱动 LCD1602 液晶屏(51单片机) 硬件实物 原理图 3.程序 #include <reg51.h> #include <intrins.h>#defin ...
- 51单片机驱动——LCD1602
51单片机驱动--LCD1602 1.描述 51单片机控制LCD1602屏幕显示测量数据.固定字符串等,大家复制过去可以直接使用,相关注释我已标明. 2.子文件 LCD1602.c #include ...
- 51单片机使用 8线/4线/PCF8574(I2C) 驱动 LCD1602
51单片机使用 8线/4线/PCF8574_I2C驱动 LCD1602 一.8线驱动 二.4线驱动 三.PCF8574(I2C) 驱动 1.PCF8574 介绍 2.接线图 3.示例代码 一.8线驱动 ...
- 【STM32】驱动LCD1602液晶8线并、4线并
目录 LCD1602液晶 引脚定义说明 字库概述 LCD1602原理图 LCD1602时序图 LCD1602代码 接线图 用结构体的方式显示字符 LCD1602动态显示数字 4线驱动LCD1602 L ...
- stm32cubeide驱动LCD1602显示屏
STM32驱动LCD1602 硬件连接关系 STM32CUBEIDE设置 代码 项目设置 最后运行 硬件连接关系 LCD1602 STM32 VCC VCC GND GND VO VCC-滑动变阻 R ...
- 树莓派通过I2C驱动LCD1602显示屏
问题来源 在此之前学习了Arduino驱动LCD1602(Arduino通过I2C控制1602LCD显示屏),其过程比较简单,现在想通过树莓派实现控制功能,提升树莓派编程控制能力,在此过程中虽然能正常 ...
- 51单片机+驱动LCD1602模板范例+Proteus仿真
51单片机+驱动LCD1602模板范例+Proteus仿真 本示例可以作为驱动LCD1602屏幕模板来调用或使用,方便移植到其他需要使用到LCD1602显示上的工程项目当中.所以示例不涉及过多其他的代 ...
- 和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?
目录 1.简介和驱动原理 2.实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/cate ...
- 使用stm32f103驱动lcd1602
1. 项目需求 使用上位机发送ASCII字符,在LCD1602上能够实时显示 2. 使用到的软件和硬件 野火指南者开发板 - LCD1602液晶屏 杜邦线 DAP仿真器 KEIL5 3. 连线说明 4 ...
最新文章
- python menu实例_Python高级进阶#019 pyqt5菜单menu应用,新建多窗体
- [新闻]Ubuntu7.04于4月19日全球同步发布
- 【深度学习】一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...
- 剑指offer-斐波那契数列
- gulp与grunt对比
- 女生转行IT与男生有什么不一样?
- linux中DIR、dirent、opendir()、readdir()、closedir()函数的使用
- 阿里宜搭助力服务中枢升级,提升10倍开发效率
- 织梦dede企业律师事务所网模板源码
- 数据挖掘-分类与预测-神经网络算法
- tp5使用layui表格_tp5+layui增、删、改、查。
- 北风网66jquery
- 西奥电梯服务器无响应,干货│西奥电梯故障分析和技术文件
- highcharts 开发笔记
- 北风:个人如何在职场中野蛮生长
- 51nod - 1378 - 夹克老爷的愤怒
- 被迫解除劳动关系通知书
- 教程篇(6.0) 01. FortiGate及其Security Fabric介绍 ❀ FortiGate 安全 ❀ Fortinet 网络安全专家 NSE 4
- Nuxt.js 中定制 error.vue 错误缺省页
- B站这个视频我是跪着看完的