当前位置:网站首页>17.[STM32]仅用三根线带你驱动LCD1602液晶
17.[STM32]仅用三根线带你驱动LCD1602液晶
2022-07-05 15:18:00 【依点_DW】
作者简介:大家好啊,我叫DW,每天分享一些我新学到的知识,期待和大家一起进步
系列专栏:STM32
小实验目标:三线驱动LCD1602液晶
如有写得不好的地方欢迎大家指正开发板:正点原子STM32F103Mini版
创作时间:2022年6月4日
不管是串行方式驱动LCD1602液晶还是并行方式驱动LCD1602液晶,都会占用STM32过多的IO口,那么有没有什么方式可以减少单片机IO口的使用呢?答案是有的。
我们可以把两片74HC595芯片以级联的方式驱动LCD1602,该方式只用到单片机的3个IO口就可以驱动LCD1602了。
在四位数码管的文章中已经详细介绍了74HC595这块芯片的使用方法,详细介绍见文章:15.[STM32]一篇文章教会你使用75HC595芯片驱动四位数码管
在该文章的基础上添加上一个写字节的函数。
写字节函数
//写字节函数
void LCD1602_Write_Byte(u8 dat,u8 dat1){
for(u8 i=0;i<8;i++){
((dat<<i)&0x80) ? DIO_High:DIO_Low;
SCK_High;
SCK_Low;
}
for(u8 i=0;i<8;i++){
((dat1<<i)&0x80) ? DIO_High:DIO_Low;
SCK_High;
SCK_Low;
}
RCK_High;
RCK_Low;
}提示:两块74HC595采取级联方式,故需要发送两次数据。
接下来编写一个写指令和写数据的函数,该函数是本次例程的重点。我们需要写的是8位数据,但是我们只用到位:RS、RW、EN(对应位0~2),位3~7为0。
当我们需要写数据时E、RW、RS为:001,故需要写的指令为0000 0001(0x01)接下来需要将数据写到总线上,当E为高电平时数据会送到液晶内部,故需要写的指令为:0000 0101(0x05),之后需要释放EN,故需要重新写0x01;
当我们需要写指令时E、RW、RS为:000,故需要写的指令为0000 0000(0x00),接下来需要将指令写到总线上,当E为高电平时数据会送到液晶内部,故需要写的指令为:0000 0100(0x04),之后需要释放EN,故需要重新写0x00;
写指令和写数据的函数
void LCD1602_Write_Cmd_Data(u8 cmd,u8 data){
if(cmd){ //1 数据
LCD1602_Write_Byte(data,0x01); //0000 0001 // E = 0 RW = 0 RS = 1
delay_ms(3);
LCD1602_Write_Byte(data,0x05); //0000 0101 // E = 1 RW = 0 RS = 1
delay_ms(3);
LCD1602_Write_Byte(data,0x01); //0000 0001 // E = 0 RW = 0 RS = 1
}
else{ //0 指令
LCD1602_Write_Byte(data,0x00); //0000 0000 // E = 0 RW = 0 RS = 0
delay_ms(3);
LCD1602_Write_Byte(data,0x04); //0000 0100 // E = 1 RW = 0 RS = 0
delay_ms(3);
LCD1602_Write_Byte(data,0x00); //0000 0000 // E = 0 RW = 0 RS = 0
}
}提示:
RS = 1:写数据 RS = 0:写指令
RW = 1:读操作 RW = 1:写操作
EN:读操作高有效 EN:高有效
接下来看硬件连接图吧。
第一片74HC595芯片的11、12、14引脚分别与单片机的PB0~PB2相连,74HC595的15、1、2引脚和LCD1602的RS、R/W、E引脚相连 。
第二片74HC595芯片的QA~QH引脚与LCD1602的D0~D7相连。
提示:
第一块芯片的9引脚和第二块芯片的14引脚相互连接
两块芯片的RCK、SCK相互连接

我们把上一篇DS18B20的文章的例程添加进去,就可以在LCD1602上显示温度了,大家一起来看看实验结果图吧。

今天的分享就到这里,谢谢大家的耐心阅读,如果觉得有用的话给个
本章结束,我们下一章见
参考资料:
1.STM32固件库手册
2.正点原子STM32不完全手册_库函数版本
3.参考视频
4.数字电子技术基础
资料已上传,需要自取
边栏推荐
- Appium自动化测试基础 — APPium基础操作API(二)
- Bugku easy_ nbt
- Bugku's Eval
- Bugku's Ah Da
- SQL injection sqllabs (basic challenges) 11-20
- Your childhood happiness was contracted by it
- lv_font_conv离线转换
- The computer is busy, and the update is a little slow
- How to introduce devsecops into enterprises?
- Data communication foundation NAT network address translation
猜你喜欢

Aike AI frontier promotion (7.5)

基于OpenHarmony的智能金属探测器

Advanced level of static and extern

I spring and autumn blasting-2

MySQL giant pit: update updates should be judged with caution by affecting the number of rows!!!

keep-alive

lvgl 显示图片示例

Bugku cyberpunk

Ionic Cordova project modification plug-in

OSI 七层模型
随机推荐
MySQL overview
I spring and autumn blasting-2
Definition of episodic and batch
lvgl 显示图片示例
Stop B makes short videos, learns Tiktok to die, learns YouTube to live?
Noi / 1.4 07: collect bottle caps to win awards
Data communication foundation ACL access control list
The elimination strategy of redis
30岁汇源,要换新主人了
P1451 calculate the number of cells / 1329: [example 8.2] cells
I include of spring and Autumn
Xiao Sha's arithmetic problem solving Report
Linear DP (basic questions have been updated)
Memo 00
Common MySQL interview questions (1) (written MySQL interview questions)
How can the boss choose programmers to help me with development?
MySQL table field adjustment
Interval DP (gravel consolidation)
queryRunner. Query method
JS knowledge points-01