Arduino 将1602液晶显示屏改造为IIC接口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino 将1602液晶显示屏改造为IIC接口相关的知识,希望对你有一定的参考价值。
参考技术A 原来的1602是这样的:连接到Arduino上需要接好多线,于是买了块IIC的板子改成IIC接口,就是这货:
由于Arduino的I/O口数量有限,如果直接用Arduino的I/O口直接驱动LCD1602/2004这样会占用较多的I/O口资源也不利于连接更多的其他设备。IIC LCD1602/2004转接板可以大大减少需要使用IO接口,原来的1602/2004屏需要7(RS、RW、E、D4~D7)个IO口才能驱动起来,而这个模块可以省去5个IO口。
模块采用PCF8574,它通过两条双向总线(I2C)可使大多数 MCU 实现远程 I/O口扩展。该器件包含一个 8 位准双向口和一个I2C总线接口。PCF8574 电流消耗很低,且口输出锁存具有大电流驱动能力,可直接驱动 LED。它还带有一条中断接线(INT开漏输出)可与 MCU 的中断逻辑相连。通过 INT 发送中断信号, 远端 I/O 口不必经过 I2C 总线通信就可通知 MCU 是否有数据从端口输入。
但是这块板子也是插针,要想连接1602的化,需要通过面包板才行,这个不能忍,于是开始拆拆拆。
将原1602的排针拆除,直接焊接IIC转接板。说起来简单,实际操作时发现拆除排针还是需要一定的技术的,最终拆的一团糟,一度以为板子拆坏了。
焊上转接板发现只有背光灯是亮的,查了半天发现是对比度的问题
使用小螺丝刀调节该电位器,从而调节对比度,1602显示屏显示。
大功告成,焊工依然很烂!
PS:
I2C github库
https://github.com/marcoschwartz/LiquidCrystal_I2C
1602液晶显示
液晶有1,2端为电源。15、16为背光源。为防止直接加5V电压烧坏背光灯,在15脚串接一个10欧的电阻用于限流。
液晶3端为液晶对照度调节端。通过一个10k欧电位器接地来调节液晶显示的对照度。
液晶的4端为液晶控制器写数据/读数据选择端,接P3.5口
液晶5端为读/写选择端。由于我们不从液晶读取不论什么数据,仅仅向其写入命令和数据,因此此端始终选择为写状态。即始终接地。
液晶 6端为使能信号,是操作时必需的信号,接单片机的P3.4口。
写 操作时序
(1)通过RS确定是写数据还是写命令。写命令包含使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不须要移屏、在液晶的什么位置显示,等等
(2)读/写控制端的设置为写模式。即低电平
(3)将数据或命令送达数据线上
(4)给E一个高脉冲将数据送入液晶控制器,完毕写操作
一下是我写的一个程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="GOOD GOOD STUDY!";
uchar code table1[]="DAY DAY UP ^_^!";
sbit lcden=P3^4;
sbit rs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
void delay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=90;k>0;k--);
}
void write_com(uchar com)
{
rs=0;//选择写指令
P0=com; //将要写的命令送到数据总线上
delay(5);
lcden=1; //使能端给一高脉冲。由于初始化函数中已将lcd置为0
delay(5);
lcden=0; //完毕高脉冲
}
void write_data(uchar date)
{
rs=1; //写数据
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
init();
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_data(table1[num]);
delay(5);
}
while(1);
}
通过 这个能够写一些简单的时序了
看懂 时序图
以上是关于Arduino 将1602液晶显示屏改造为IIC接口的主要内容,如果未能解决你的问题,请参考以下文章