找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3417|回复: 17
收起左侧

单片机小白求助,三个74hc595控制三个lcd1602的设计思路

[复制链接]
ID:897033 发表于 2021-4-19 17:41 | 显示全部楼层 |阅读模式
用三个74hc595控制三个lcd1602,请问三个1602端的rs rw en 如何连接呢?每个屏幕分别控制的话,整体编程的思路是什么样子呢?三个lcd的写入数据,写入指令,初始化都用一个么,还是分别用三个呢?

小白这两天这个东西就是想不明白,求帮助!!!谢谢大家!!

回复

使用道具 举报

ID:332444 发表于 2021-4-20 08:36 | 显示全部楼层
锁存器无论是并行的还是串行的都是一样道理,不过是数据传输方法不同罢了。1602控制方法也有很多变化,看电路要如何设计,可并可分主要看IO口是否够用还是要扩展等等,电路确定了才能决定编写程序。
回复

使用道具 举报

ID:894154 发表于 2021-4-20 08:50 | 显示全部楼层
用IIC的1602吧,三个1602 只要6个IO就够用了
回复

使用道具 举报

ID:897033 发表于 2021-4-20 11:24 | 显示全部楼层
xianfajushi 发表于 2021-4-20 08:36
锁存器无论是并行的还是串行的都是一样道理,不过是数据传输方法不同罢了。1602控制方法也有很多变化,看电 ...

C:\Users\向阳星Young\Desktop
回复

使用道具 举报

ID:897033 发表于 2021-4-20 11:26 | 显示全部楼层
xianfajushi 发表于 2021-4-20 08:36
锁存器无论是并行的还是串行的都是一样道理,不过是数据传输方法不同罢了。1602控制方法也有很多变化,看电 ...

你好,我这自己编写了一个程序,但是不知道哪里的问题,三个显示屏都显示不出来,您有时间的话能帮我看下么?谢谢。
回复

使用道具 举报

ID:897033 发表于 2021-4-20 11:31 | 显示全部楼层
我的仿真图是这个样子的:

这是仿真图

这是仿真图
回复

使用道具 举报

ID:889094 发表于 2021-4-20 11:59 | 显示全部楼层
3个LCD都接同样的3个口,有问题没有?我昨天插着LCD的时候点亮和它在一起接的LED灯是点不亮的,插掉LCD就可以点亮LED灯,我感觉相互之间可能会有影响,具体原因我也不清楚
回复

使用道具 举报

ID:383215 发表于 2021-4-20 12:14 | 显示全部楼层
实在搞不清楚为什么要搞三个1602同时显示?不能搞个大一点的液晶?
   16021.jpg
16022.jpg

我有现成的两片CD4094扩展出来的1602显示+74HC165+融合的6个感应开关,一共用了7个I/O口,我做这个板是为了减少I/O口,方便和我的实验板连接,由于只需要一片,热转印做成单面就了事了,不想去打样。压根没有想过要扩两个以上的1602,那也不难啊,一片1602有11个I/O口,三个就是33个,4片4094是32个O口,只差一个,有点尴尬,那就再借用一个单片机的I/O口,也就是是5个单片机I/O口+4片4094就可以扩展出3个1602,但是,布线麻烦,建议每两片4094扩展一个1602,做出来的电路板是一模一样的,三个电路板串联起来就搞定,就是串联8个10个1602也没有问题,仅仅只需要4个I/O口。595没有用过,看了管脚排列,工作原理和4094差不多,只是布线更容易一些,595的速度更快一些,不管是用4094还是595,和1602的连接没有必要一一对应,数据在程序里调整,在原理图里调整出PCB的最佳走线,编程也简单,三个1602端的rs rw en加上8位数据,一共凑成6个8位数据,只管往595里面发送就是了,发完以后使能数据并行输出,比如要改变rs rw en或者8位数据,每改变一个,就发送一次,1602的D7不必检测,和D0-D6一样用就可以,51单片机不要用移位的方法编程,尽量用位操作,加快595的移位速度,每个1602单元的电路板很小,绝对不超过10×10,可以打来5个样串联5片1602,只要先编出一片的程序,5片8片10片都没有问题。IIC也是个好主意,6个I/O口显示三片1602,只是速度可能更慢一些。

回复

使用道具 举报

ID:897033 发表于 2021-4-20 12:26 | 显示全部楼层
birdzhyli 发表于 2021-4-20 11:59
3个LCD都接同样的3个口,有问题没有?我昨天插着LCD的时候点亮和它在一起接的LED灯是点不亮的,插掉LCD就可 ...

en口是分别接的,不知道能不能行
回复

使用道具 举报

ID:897033 发表于 2021-4-20 12:27 | 显示全部楼层
kmsj 发表于 2021-4-20 12:14
实在搞不清楚为什么要搞三个1602同时显示?不能搞个大一点的液晶?
  

学校课程设计的内容
回复

使用道具 举报

ID:332444 发表于 2021-4-20 13:57 | 显示全部楼层
我觉得这样电路不如级联好,级联写一个函数即可,一次连续发三个数据,数据发完成后同时控制,也能节省IO口,程序写得也省事,分开没什么优势同样也需要发3次且代码写得也相对复杂点,当然这样电路形式不是不能写,只是我觉得相对显得比较麻烦,IO口也用的较多。
回复

使用道具 举报

ID:332444 发表于 2021-4-20 13:57 | 显示全部楼层
回复

使用道具 举报

ID:883031 发表于 2021-4-20 15:07 | 显示全部楼层
按道理是可以的。
回复

使用道具 举报

ID:518902 发表于 2021-4-20 15:21 | 显示全部楼层
建议级联,3个595 控制线2根 数据线一根 然后3个lcd的三根控制线连在一起 总共也只要6根线
回复

使用道具 举报

ID:897033 发表于 2021-4-20 15:25 | 显示全部楼层
laopihappy123 发表于 2021-4-20 15:21
建议级联,3个595 控制线2根 数据线一根 然后3个lcd的三根控制线连在一起 总共也只要6根线

也就是说lcd1602的rw,rs,en也都连在一起是么?想单独控制每个屏幕显示的话en要分成三条线么?还是连在一起没有影响?
回复

使用道具 举报

ID:897033 发表于 2021-4-20 15:36 | 显示全部楼层
xianfajushi 发表于 2021-4-20 13:57
595函数可参http://www.51hei.com/bbs/dpj-201714-1.html

http://www.51hei.com/bbs/dpj-205491-1.html能帮我看看这样写可以么?感谢
回复

使用道具 举报

ID:332444 发表于 2021-4-25 11:21 | 显示全部楼层
刚好有另外的提问,一并做了个实例,一并回复,我给的连接595驱动中的十进制转化代码注释掉,用十六进制的代码替换即可.
  1.                 ds=sj>>7;//十六进制数据发送
  2.                 sj<<=1;
  3. //                ds=sj%2;//十进制数据发送
  4. //                sj/=2;
复制代码
  1. unsigned char code shuju[]={
  2. 0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,
  3. 0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00,0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00,
  4. 0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00
  5. };//数据
  6. unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位,用移位函数,移位运算符,数字.

  7. 主函数:
  8.         unsigned char b=0, j=0, xd=0, h=0;
  9. QuDong595(shuju[b+j]);
  10. QuDong595(sjwei[b]);
复制代码


这是2片级联完成的运行
录像5_转.gif
回复

使用道具 举报

ID:332444 发表于 2021-4-25 15:23 | 显示全部楼层
如果说修改代码也不会或懒得去修改能用我的595驱动函数?当然可以了,那就要多做一步把十六进制数据转十进位制数即可直接调用我十进位制处理的驱动函数了,进制转换有2种方法,一种慢的,一种快的比使用位移7再位移1的处理方法更快.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表