51单片机 iic 1602 代码
时间: 2023-12-12 09:00:33 浏览: 107
IIC.zip_51单片机IIC
51单片机的IIC总线是一种串行通信协议,用于连接数字集成电路,可以实现多个设备之间的通信。1602是一种常用的液晶显示屏,可以显示16列2行的字符。
要在51单片机上控制1602液晶显示屏,需要先进行IIC总线通信的初始化设置。首先,需要连接51单片机的P2.0和P2.1引脚分别到1602的SCL(串行时钟)和SDA(串行数据)引脚上。然后,在51单片机上需要编写相应的代码进行控制。
以下是一个简单的51单片机上的IIC控制1602的代码示例:
```
#include <reg51.h>
#include <intrins.h>
#define LCD1602_CMD 0x80 // LCD1602指令
#define LCD1602_DAT 0x90 // LCD1602数据
sbit LCD1602_SCL = P2^0; // IIC时钟引脚
sbit LLCD1602_SDA = P2^1; // IIC数据引脚
void IIC_Start()
{
LCD1602_SDA = 1;
LCD1602_SCL = 1;
_nop_();
_nop_();
LCD1602_SDA = 0;
_nop_();
_nop_();
LCD1602_SCL = 0;
}
void IIC_Stop()
{
LCD1602_SDA = 0;
LCD1602_SCL = 1;
_nop_();
_nop_();
LCD1602_SDA = 1;
_nop_();
_nop_();
LCD1602_SCL = 0;
}
void IIC_WriteData(unsigned char data)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
LCD1602_SCL = 0;
_nop_();
_nop_();
LCD1602_SDA = (data & 0x80) >> 7;
data <<= 1;
_nop_();
_nop_();
LCD1602_SCL = 1;
_nop_();
_nop_();
}
LCD1602_SCL = 0;
_nop_();
_nop_();
LCD1602_SDA = 1;
_nop_();
_nop_();
LCD1602_SCL = 1;
_nop_();
_nop_();
LCD1602_SCL = 0;
}
void LCD1602_Init()
{
IIC_Start();
IIC_WriteData(LCD1602_CMD);
IIC_WriteData(0x38); // 设置显示模式 8位数据总线,2行显示,5×8点阵字体
IIC_WriteData(0x01); // 清屏
IIC_WriteData(0x06); // 光标右移,显示不移动
IIC_WriteData(0x0C); // 开显示,关闭光标显示
IIC_Stop();
}
void LCD1602_DisplayString(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char i;
if (y == 1)
{
x |= 0x80;
}
else
{
x |= 0xC0;
}
IIC_Start();
IIC_WriteData(LCD1602_CMD);
IIC_WriteData(x);
IIC_Stop();
IIC_Start();
IIC_WriteData(LCD1602_DAT);
for (i = 0; str[i] != '\0'; i++)
{
IIC_WriteData(str[i]);
}
IIC_Stop();
}
void main()
{
LCD1602_Init();
LCD1602_DisplayString(0, 0, "Hello World!");
while (1)
{
}
}
```
以上代码是一个基本的51单片机上使用IIC通信控制1602液晶显示屏的示例。代码中定义了一些IIC通信的基本函数,包括开始、停止、写数据等函数。通过调用这些函数,可以初始化液晶显示屏并在指定位置显示字符串。在主函数中,我们调用了init函数进行初始化,然后调用了DisplayString函数来显示字符串"Hello World!"在0行0列上的位置。
阅读全文