有一份arduino的程序, 对应脚位改下就可以了,用的是模拟I2C
///////////////////////////////////
unsigned char DA= A0;
unsigned char CL= A1;
//unsigned char delaytime=;
unsigned char wei=32;
////////////////////////
//启动总线函数 名称:START 描述:启动I2C 总线子程序--发送I2C 起始条件
void START() {
digitalWrite(DA,1); // delay(delaytime);
digitalWrite(CL,1); //delay(delaytime);
digitalWrite(DA,0); // delay(delaytime);
digitalWrite(CL,0); //delay(delaytime);
}
// 停止总线函数 名称:STOP 描述:停止I2C 总线子程序--发送I2C总线停止条件
///
void STOP() {
digitalWrite(DA,0); // delay(delaytime);
digitalWrite(CL,1); //delay(delaytime);
digitalWrite(DA,1); // delay(delaytime);
digitalWrite(CL,0); //delay(delaytime);
}
//
// 应答信号 名称:ACK 描述:响应器件的应答
///
void ACK() {
digitalWrite(DA,0); //delay(delaytime);
digitalWrite(CL,1); // delay(delaytime);
digitalWrite(CL,0); //delay(delaytime);
}
/
void SendByte(unsigned char value)
{
unsigned char i;
for (i=0;i<8;i++)
{
digitalWrite(CL,1);
// delayMicroseconds(4);
digitalWrite(DA,value & 0x80);
delay(delaytime);
digitalWrite(CL,0);
delay(delaytime);
value<<=1;
}
}
/////////////////////
/
发送一个字节函数 名称:SendByte
描述:字节数据传送子程序发送一个字节数据或地址给被控器
移位发送数据完成后发送总线应答信号
/
void SendByte( unsigned char Data)
{
unsigned char i; for(i=0;i<8;i++)
{ if((Data&0x80)==0x80)//提取数据最高位判断是1或是0
digitalWrite(DA,1); //如果数据是1就模拟发送1
else
digitalWrite(DA,0); //否则模拟发送0
//delay(delaytime);
digitalWrite(CL,1); //模拟时钟脉冲高电平
//delay(delaytime);
digitalWrite(CL,0); //形成时钟脉冲下跳沿完成一位数据发送
//delay(delaytime);
Data=Data<<1;
} //8次循环后完成1个完整数据字节8位的发送
ACK(); //提供总线应答信号
}
/
/
void Display_Data(unsigned char dat)
{
unsigned char i;
sendcmd(0x82,0x03);
sendcmd(0x84,0x03);
sendcmd(0x86,0x00);
sendcmd(0x8a,0x3b);//she zhi dui bi du
sendcmd(0x88,0x00);
START(); //启动总线
SendByte(0x7c);
SendByte(0x80); //发送装载数据指针
SendByte(0x00);
/发送n个显示数据/
for(i=0;i<wei;i++)
{
SendByte(dat);
//delay(delaytime);
}
STOP();
START(); //启动总线
SendByte(0x7c);
SendByte(0x84);//set LCD ON OFF
SendByte(0x03 );
STOP();
}
////////////////////////////////////////////////////////////////
//这里需要注意每发送一个命令从新启动一次I2C总线
/////////////////////////////////////////////////////////////////
void sendcmd(unsigned char dat1,unsigned char dat2)
{ START(); //启动总线
SendByte(0x7c);
SendByte(dat1);
SendByte(dat2);
STOP();
}
////////////////////////////////////////////////////////////
void Display_Data1(unsigned char dat1,unsigned char dat2)
{
unsigned char i;
START(); //启动总线
/发送m个指令/
SendByte(0x7C); //发送被控器总线地址
SendByte(0xC8); //工作方式设定
SendByte(0x80+dat2); //发送装载数据指针
//SendByte(dat2);
SendByte(0xE0 );
SendByte(0xF0);//总线上多器件时的器件地址
SendByte(0x70); //不闪烁命令字为最后一条指令
/发送n个显示数据/
SendByte(dat1);
STOP();
}
////////////////////////////////////////////////////////////////
void setup (void) {
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(0,OUTPUT);
}
void loop (void)
{
Display_Data(0xFF);
digitalWrite(0,0);
delay(1000);
digitalWrite(0,1);
Display_Data(0x00);
delay(1000);
}
1。 16 x 2 LCD显示屏由16个引脚组成,这些引脚标有不同的名称,写在显示模块的背面。确保正确遵循引脚编号。
2。要了解DHT11传感器的引脚,请参考上面的接线图。
如果接线图感觉有点过于复杂,这里是连接设置明确表示:
Arduino GND到面包板负电源轨(所有黑色电线都连接到此轨道)
Arduino 5V到面包板正电源导轨(所有深蓝色导线都到达此导轨)
DHT11正面针到面包板正面电源轨
DHT11负极引脚到面包板负电源轨
DHT11信号引脚到ArduinoAnalogA0 (这个将数据从DHT11提供给Arduino)
LCD 1到面包板负电源轨
LCD 2到面包板正电源导轨
LCD 3至面包板负电源导轨(如果将其连接至电位计,则有助于更改LCD亮度)
LCD 4到Arduino数字引脚12( LCD cha racter坐标)
LCD 5到面包板负电源轨
LCD 6到Arduino数字引脚11 (LCD启动命令)
LCD 11到Arduino数字引脚5
LCD 12到Arduino数字引脚4
LCD 13至Arduino数字引脚3
LCD 14至Arduino数字引脚2
LCD 15到面包板正电源导轨
LCD 16到面包板负电源导轨
冷/绿色LED正极引脚至Arduino数字引脚7 (负极引脚至面包板负极导轨)
热/**LED正极引脚至Arduino数字引脚8 (负极引脚至面包板负极轨)
极端/红色LED正极引脚至Arduino数字引脚9 (负极引脚到面包板负轨)
原来的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库
>
以上就是关于求一个AT89C52单片机可以点亮的ht16c23的液晶驱动程序全部的内容,包括:求一个AT89C52单片机可以点亮的ht16c23的液晶驱动程序、arduino液晶显示器怎么连在面包板上、Arduino 将1602液晶显示屏改造为IIC接口等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)