51单片机i2c1602显示你好程序代码
时间: 2023-07-02 21:08:27 浏览: 94
以下是基于51单片机的I2C1602显示“你好”的程序代码:
```c
#include <reg51.h>
#define SCL P1_0
#define SDA P1_1
void delay_us(unsigned int us) // 微秒级延时函数
{
unsigned int i;
while(us--)
{
for(i=0;i<12;i++);
}
}
void start() // I2C起始信号
{
SDA = 1;
SCL = 1;
delay_us(4);
SDA = 0;
delay_us(4);
SCL = 0;
}
void stop() // I2C停止信号
{
SDA = 0;
SCL = 1;
delay_us(4);
SDA = 1;
delay_us(4);
}
void ack() // I2C应答信号
{
SDA = 0;
SCL = 1;
delay_us(4);
SCL = 0;
SDA = 1;
delay_us(4);
}
void nack() // I2C非应答信号
{
SDA = 1;
SCL = 1;
delay_us(4);
SCL = 0;
SDA = 1;
delay_us(4);
}
void write_byte(unsigned char dat) // 写一个字节
{
unsigned char i;
for(i=0;i<8;i++)
{
SDA = (dat & 0x80) >> 7;
dat <<= 1;
SCL = 1;
delay_us(4);
SCL = 0;
delay_us(4);
}
ack();
}
void write_cmd(unsigned char cmd) // 写命令
{
start();
write_byte(0x7c);
write_byte(0x80);
write_byte(cmd);
stop();
}
void write_data(unsigned char dat) // 写数据
{
start();
write_byte(0x7c);
write_byte(0x40);
write_byte(dat);
stop();
}
void init_i2c() // 初始化I2C总线
{
SDA = 1;
SCL = 1;
delay_us(4);
}
void init_lcd() // 初始化LCD
{
write_cmd(0x38);
write_cmd(0x08);
write_cmd(0x01);
write_cmd(0x06);
write_cmd(0x0c);
}
void main()
{
unsigned char buf[] = "你好";
unsigned char i;
init_i2c();
init_lcd();
while(1)
{
write_cmd(0x80);
for(i=0;i<6;i++)
{
if(buf[i])
{
write_data(buf[i]);
}
else
{
break;
}
}
delay_us(50000);
write_cmd(0x01);
delay_us(50000);
}
}
```
注意:此代码是基于51单片机的I2C总线,需要连接I2C1602液晶屏并进行正确的线路连接。
阅读全文