当前位置:网站首页>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.数字电子技术基础
资料已上传,需要自取
边栏推荐
- 基于OpenHarmony的智能金属探测器
- JS knowledge points-01
- Ctfshow web entry command execution
- Redis distributed lock principle and its implementation with PHP (1)
- 社区团购撤城“后遗症”
- Detailed explanation of C language branch statements
- Common MySQL interview questions (1) (written MySQL interview questions)
- Data communication foundation NAT network address translation
- 超越PaLM!北大硕士提出DiVeRSe,全面刷新NLP推理排行榜
- What are the domestic formal futures company platforms in 2022? How about founder metaphase? Is it safe and reliable?
猜你喜欢
ionic cordova项目修改插件
Misc Basic test method and knowledge points of CTF
CODING DevSecOps 助力金融企业跑出数字加速度
[brief notes] solve the problem of IDE golang code red and error reporting
Bugku's Eval
【 note 】 résoudre l'erreur de code IDE golang
P1451 calculate the number of cells / 1329: [example 8.2] cells
Bugku telnet
MySQL giant pit: update updates should be judged with caution by affecting the number of rows!!!
Database learning - Database Security
随机推荐
Detailed explanation of QT creator breakpoint debugger
做研究无人咨询、与学生不交心,UNC助理教授两年教职挣扎史
超越PaLM!北大硕士提出DiVeRSe,全面刷新NLP推理排行榜
Information collection of penetration test
Can I pass the PMP Exam in 20 days?
Ten billion massage machine blue ocean, difficult to be a giant
Fundamentals of data communication - Principles of IP routing
Thymeleaf uses background custom tool classes to process text
ICML 2022 | explore the best architecture and training method of language model
Cartoon: programmers don't repair computers!
Appium自动化测试基础 — APPium基础操作API(二)
Ctfshow web entry command execution
swiper. JS to achieve barrage effect
Data communication foundation - route republication
Value series solution report
No one consults when doing research and does not communicate with students. UNC assistant professor has a two-year history of teaching struggle
Good article inventory
lvgl 显示图片示例
Database learning - Database Security
Ctfshow web entry explosion