K_A04_001 基于单片机驱动LCD1602字符滚动显示(8位并行+IIC通信)
目录
一、资源说明
二、基本参数
1、参数
LCD1602模块
PCA8574 模块(IIC)
2、引脚说明
LCD1602
PCA8574 模块(IIC)
3、LCD1602并行V0接线
4、PCA8574 原理图
三、通信协议说明
1、LCD1602 并行时序
时序:
写命令代码:
写数据代码:
2、PCA8574 IIC时序
起始与停止时序:
起始信号程序:
停止信号程序:
3、写数据与等待应答时序
写时序:
应答时序:
写一个字节与等待应答程序:
四、部分代码说明
接线说明
1.1、STC89C52RC+LCD1602模块
1.2、STC89C52RC+PCA8574 模块(IIC)
1.3、STM32F103C8T6+LCD1602模块
1.4、STM32F103C8T6+PCA8574 模块(IIC)
五、基础知识学习与相关资料下载
六、视频效果展示与程序资料获取
七、项目所有材料清单
八、注意事项
九、接线表格
一、资源说明
单片机型号 |
测试条件 |
模块名称 |
代码功能 |
STC89C52RC |
1.晶振11.0592M |
LCD1602模块 PCA8574 模块(IIC) |
|
STM32F103C8T6 |
|
LCD1602模块 PCA8574 模块(IIC) |
二、基本参数
1、参数
LCD1602模块
模块分3.3V版本和5V版本 实际项目建议选和单片机电平对应版本
PCA8574 模块(IIC)
2、引脚说明
LCD1602
LCD1602模块 |
引脚说明 |
VSS |
GND引脚接电源地,如果外接电源,一般必须共地 |
VDD |
VCC电源引脚,根据版本接5V或3.3V |
V0 |
LCD 驱动电压输入端 |
RS |
指令/数据选择信号 |
RW |
读写选择信号 |
E |
使能信号 |
DB0 |
数据 0 |
DB1 |
数据 1 |
DB2 |
数据 2 |
DB3 |
数据 3 |
DB4 |
数据 4 |
DB5 |
数据 5 |
DB6 |
数据 6 |
DB7 |
数据 7 |
A |
LED+ 5V或3.3V |
K |
LED- GND |
PCA8574 模块(IIC)
PCA8574 模块 |
引脚说明 |
GND |
GND引脚接电源地,如果外接电源,一般必须共地 |
VDD |
VCC电源引脚,根据版本接5V或3.3V |
SCL |
串行时钟线 |
SDA |
串行数据线 |
3、LCD1602并行V0接线
VCC和GND不分方向 但是中间一定接VO
4、PCA8574 原理图
三、通信协议说明
1、LCD1602 并行时序
时序:
写命令代码:
void LcdWriteCom(uint8_t com) //写入命令{LCD1602_E = 0; //使能LCD1602_RS = 0; //选择发送命令LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = com; //放入命令DelayMs(1); //等待数据稳定LCD1602_E = 1; //写入时序DelayMs(5); //保持时间LCD1602_E = 0;}
写数据代码:
void LcdWriteData(uint8_t dat) //写入数据{LCD1602_E = 0; //使能清零LCD1602_RS = 1; //选择输入数据LCD1602_RW = 0; //选择写入LCD1602_DATAPINS = dat; //写入数据DelayMs(1);LCD1602_E = 1; //写入时序DelayMs(5); //保持时间LCD1602_E = 0;}
2、PCA8574 IIC时序
起始与停止时序:
起始信号程序:
void I2cStart()
{SDA=1;SCL=1;Delay10us();//建立时间是SDA保持时间>4.7usSDA=0;Delay10us();//保持时间是>4usSCL=0; Delay10us();
}
停止信号程序:
void I2cStop()
{SDA=0;SCL=1;Delay10us();//建立时间大于4.7usSDA=1;Delay10us(); }
3、写数据与等待应答时序
写时序:
应答时序:
写一个字节与等待应答程序:
unsigned char I2cSendByte(uint8_t dat)
{uint8_t a=0,b=0;//最大255, for(a=0;a<8;a++)//要发送8位,从最高位开始{SDA=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA信号dat=dat<<1;Delay10us();SCL=1;Delay10us();//建立时间>4.7usSCL=0;Delay10us();//时间大于4us }SDA=1;Delay10us();SCL=1;Delay10us();while(SDA)//等待应答,也就是等待从设备把SDA拉低{b++;if(b>200) //如果超过2000US没有应答发送失败,或者为非应答,表示接收结束{//SCL=0;Delay10us();return 0;}}SCL=0;Delay10us();return 1;
}
四、部分代码说明
接线说明
需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改
1.1、STC89C52RC+LCD1602模块
#define LCD1602_DATAPINS P0
sbit LCD1602_RS=P2^0;
sbit LCD1602_RW=P2^1;
sbit LCD1602_E=P2^2;
1.2、STC89C52RC+PCA8574 模块(IIC)
sbit SCL=P1^0;sbit SDA=P1^1;
1.3、STM32F103C8T6+LCD1602模块
void LCD1602_GPIO_Config(void)
{ /*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启LED相关的GPIO外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//LCD_RS引脚初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //LCD_RW引脚初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_Init(GPIOB, &GPIO_InitStructure);//LCD_E引脚初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_Init(GPIOB, &GPIO_InitStructure);//D0-D7引脚初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_Init(GPIOA, &GPIO_InitStructure); }
1.4、STM32F103C8T6+PCA8574 模块(IIC)
#define PCF8574_SCL_GPIO_PORT GPIOB /* GPIO端口 */#define PCF8574_SCL_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */#define PCF8574_SCL_GPIO_PIN GPIO_Pin_6 #define PCF8574_SDA_GPIO_PORT GPIOB /* GPIO端口 */#define PCF8574_SDA_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */#define PCF8574_SDA_GPIO_PIN GPIO_Pin_7
五、基础知识学习与相关资料下载
- STC89C52RC程序下载 直戳跳转
- STM32F103C8T6程序下载
- 串口下载 直戳跳转
- ST-LINK下载 直戳跳转
- J-LINK下载 直戳跳转
- DAP-LINK下载 直戳跳转
六、视频效果展示与程序资料获取
视频连接 直戳跳转
程序资料获取 直戳跳转
七、项目所有材料清单
STC89C52RC驱动方案 |
图片 |
STM32F103C8T6驱动方案 |
图片 |
备注 K_A04_001 |
STC89C52RC系统板X1 |
STM32F103C8T6系统板X1 |
1、STM32系统板两根Micro USB线一根用于J-LINK下载器,另一根用于给系统板供电 2、杜邦线建议不用太长的 |
||
LCD1602模块X1 |
LCD1602模块X1 |
|||
PCF8574模块 |
PCF8574模块 |
|||
16P排母2.54MMX1 16P排针2.54MMX1 |
16P排母2.54MMX1 16P排针2.54MMX1 |
|||
Micro USB线X1 |
Micro USB线X2 |
|||
母母杜邦线X16 |
母母杜邦线X16 |
|||
10K电位器 | 103 10K电位器即可 |
10K电位器 |
103 10K电位器即可 | |
J-LINK下载器 |
八、注意事项
- VCC GND请勿接反,接反易烧
- 显示异常时,排除接线接触不良
- 下载后无显示可调整电位器到合适位置
- IIC转接板使用时 单片机复位后异常 需要断电重启才可 逻辑分析仪看波形无异常 具体原因未知 如有想法 欢迎一起交流。
九、接线表格
单片机型号 |
模块 |
对应引脚(上:模块引脚 下:单片机引脚) |
|||||||
STM32F103 C8T6 |
LCD1602模块 |
VSS |
VDD |
VO |
RS |
RW |
E |
D0 |
D1 |
GND |
5V |
电位器 |
PB0 |
PB1 |
PB2 |
PA0 |
PA1 |
||
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
A |
K |
||
PA2 |
PA3 |
PA4 |
PA5 |
PA6 |
PA7 |
3.3V |
GND |
||
PCF8574模块 |
GND |
VCC |
SCL |
SDA |
|||||
5V |
GND |
PB6 |
PB7 |
||||||
STC89C52RC |
LCD1602模块 |
VSS |
VDD |
VO |
RS |
RW |
E |
D0 |
D1 |
GND |
5V |
电位器 |
P2.0 |
P2.1 |
P2.2 |
P0.0 |
P0.1 |
||
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
A |
K |
||
P0.2 |
P0.3 |
P0.4 |
P0.4 |
P0.6 |
P0.7 |
5V |
GND |
||
PCF8574模块 |
VCC |
GND |
SCL |
SDA |
|||||
5V |
GND |
P1.0 |
P1.1 |
K_A04_001 基于单片机驱动LCD1602字符滚动显示(8位并行+IIC通信)相关推荐
- 【proteus仿真】单片机汇编+74xx595驱动8X8点阵滚动显示
[proteus仿真]单片机汇编+74xx595驱动8X8点阵滚动显示 Proteus仿真 汇编代码(.asm) ORG 00HJMP MAINORG 0BHLJMP INTS_T0ORG 30H M ...
- 基于单片机病房呼叫系统数码管显示房号设计-基于单片机工业生产现场的光照强度控制设计-基于单片机多功能智能台灯设计-基于单片机二维码LCD显示设计-基于单片机多功能时钟闹钟万年历控制系统设计【毕设分享】
1641基于单片机病房呼叫系统数码管显示房号设计 设计思路:此设计实现的功能通过按键模拟房号,当按键按下时会将房号编号发送到数目管上进行显示,并通过声光进行提示.包含的电路有:数码管显示电路.按键电路 ...
- keil c语言 1602时钟代码,基于单片机的LCD1602电子时钟设计.doc
基于单片机的LCD1602电子时钟设计 设计任务和目的 1.1.设计任务 (1):用单片机设计基于LCD1602的电子时钟,显示时间和日期: (2):误差精度控制在1s/天: (3):具有时间和日期的 ...
- 51单片机驱动——LCD1602
51单片机驱动--LCD1602 1.描述 51单片机控制LCD1602屏幕显示测量数据.固定字符串等,大家复制过去可以直接使用,相关注释我已标明. 2.子文件 LCD1602.c #include ...
- 基于单片机声音分贝采集和显示控制系统设计(毕业设计资料)
016[毕设课设]基于单片机声音分贝采集和显示控制系统设计,实时检测声音分贝大小,并可以通过手动设定分贝报警范围,当超过设定范围时则发生声光报警.包括的电路有声光报警电路,传感器采集电路,显示电路,温 ...
- 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计
1220基于单片机ADC0809八路电压采集系统设计-毕设课设资料 数码管显示,测量八路电压表. #define addo (5.0/255.0) #define zero 0.005 //用于校准A ...
- 51单片机+驱动LCD1602模板范例+Proteus仿真
51单片机+驱动LCD1602模板范例+Proteus仿真 本示例可以作为驱动LCD1602屏幕模板来调用或使用,方便移植到其他需要使用到LCD1602显示上的工程项目当中.所以示例不涉及过多其他的代 ...
- STC单片机驱动WS2812不同颜色变化显示
STC单片机驱动WS2812不同颜色变化显示
- c51时钟数码管显示流程图_基于单片机89C51的数码管显示时钟设计.doc
基于单片机89C51的数码管显示时钟设计 基于单片机的数字时钟 摘 要单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉.但是却很少知道它的内部结构以及工作原理.由单片 ...
最新文章
- android 安装 apk 7.0,android 7.0及以上版本安装apk
- 大数据精准营销:买水培栀子花该推送啥
- K8S集群的搭建:环境准备及相关命令
- C#发送Email邮件方法总结
- min—width的使用
- 《Essential C++》笔记之(static)静态类成员
- linux下 java 压缩文件夹,java压缩文件夹linux下乱码问题
- mysql连网安装和断网安装的区别_Linux 断网安装MySQL5.x操作步骤
- list 如何判空以及为什么
- 微软创投加速器最新成果展示:人工智能技术杀入时尚界
- 基础光照-Phong 光照模型
- 概率论与数理统计--笔记
- 写给父亲的语音计算器(位图的加载,忽然领悟了资源编译器的加载c#,五)
- Latex中自动引用参考文献的方法,一分钟搞定
- Thingsboard源码安装
- 好玩的Matlab 3D心形代码
- 某大学:今年考研报名人数上涨40%
- 中国计算机软件行业分析7---软件产业发展建议
- js转换时间戳一直转换成1970的解决方法
- iText输出中文的三种字体选择方式
热门文章
- ora-04030 进程内存不足解决方案
- WordPress主题-B2美化通用子主题商业运营版
- SEO之基于thinkphp的URL伪静态
- 非标常用焊接工艺应用
- SQL Server 2008 R2 RTM 中文版 序列号(转)
- 【数学建模】基于matlab SIR模型新冠病毒COVID-19估计【含Matlab源码 2042期】
- python循环控制--for-else循环
- 转载:Joel Spolsky: 创业公司如何公平分配股权?
- 数字信号处理matlab卷积函数conv,filter函数详细介绍三秒钟就看懂。
- 计算机启动报警,我台式电脑开机报警四声什么問題?