LCD1602的使用驱动

2 篇文章 0 订阅

LCD1602

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述仿真图。

#include <reg51.h>

#define uchar unsigned char
#define uint  unsigned int

sbit RS = P1^0;
sbit RW = P1^1;
sbit E  = P1^2;
sbit D7 = P2^7;

void write_code(uchar row, uchar col, uchar *p);
void LCD_init();

void main()
{
	LCD_init();
	while(1)
	{
	   	write_code(0, 0, "0123456789");
		write_code(1, 0, "ABCDEFGHIJK");
	}
}

void delay(uint n)
{
	while(n--);
}

void wait()	  //判忙
{
	P2 = 0XFF; //全部拉高
	do{
		RS = 0; 
		RW = 1;	//读状态
		E = 0;
		E = 1;
	}while(D7 != 0); //判断最后一位是否为1,是1继续循环,否则为0;
	E = 0;
}

void write_dat(uchar dc, uchar dat)
{
	wait();
	delay(10);
	E = 0;
	delay(10);
	RW = 0; //拉低才能写入数据
	delay(10);
	RS = dc; //决定写数据还是写数据
	delay(10);
	P2 = dat; //数据端口
	delay(10);
	E = 1;
	delay(10);
	E = 0;
}

void write_code(uchar row, uchar col, uchar *p)
{
	row %= 2; col %= 16; 
		write_dat(0, 0x80+0x40*row+col); //写显示地址
	while(*p != '\0')
		write_dat(1, *p++);	 //数据++,地址自动+1
}

void LCD_init()	 //初始化
{
	write_dat(0, 0x38);	//8位数据,二行显示,5x7字符
	write_dat(0, 0x0c); //显示开,光标关。
	write_dat(0, 0x06);	//光标右移一个,AC加1
	write_dat(0, 0x01);	 //清显示
}

代码部分。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的LCD1602驱动代码示例(使用C语言编写): ```c #include <reg52.h> // 定义控制信号端口和数据信号端口 sbit RS = P2^0; // RS控制信号端口 sbit RW = P2^1; // RW控制信号端口 sbit EN = P2^2; // EN控制信号端口 sbit LCD_D4 = P1^4; // 数据信号端口D4 sbit LCD_D5 = P1^5; // 数据信号端口D5 sbit LCD_D6 = P1^6; // 数据信号端口D6 sbit LCD_D7 = P1^7; // 数据信号端口D7 // 延时函数 void Delay(int ms) { int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 1141; j++); } // 写命令函数 void LcdWriteCmd(unsigned char cmd) { RS = 0; // 选择命令模式 RW = 0; // 写入模式 EN = 1; // 使能 LCD_D7 = cmd & 0x80; LCD_D6 = cmd & 0x40; LCD_D5 = cmd & 0x20; LCD_D4 = cmd & 0x10; EN = 0; // 禁止 Delay(1); // 延时 EN = 1; // 使能 LCD_D7 = cmd & 0x08; LCD_D6 = cmd & 0x04; LCD_D5 = cmd & 0x02; LCD_D4 = cmd & 0x01; EN = 0; // 禁止 Delay(1); // 延时 } // 写数据函数 void LcdWriteData(unsigned char dat) { RS = 1; // 选择数据模式 RW = 0; // 写入模式 EN = 1; // 使能 LCD_D7 = dat & 0x80; LCD_D6 = dat & 0x40; LCD_D5 = dat & 0x20; LCD_D4 = dat & 0x10; EN = 0; // 禁止 Delay(1); // 延时 EN = 1; // 使能 LCD_D7 = dat & 0x08; LCD_D6 = dat & 0x04; LCD_D5 = dat & 0x02; LCD_D4 = dat & 0x01; EN = 0; // 禁止 Delay(1); // 延时 } // 初始化函数 void LcdInit() { Delay(15); // 上电后需要等待15ms LcdWriteCmd(0x38); // 8位总线,2行,5x7点阵 LcdWriteCmd(0x0c); // 显示开,光标关,光标闪烁关 LcdWriteCmd(0x06); // 光标右移,字符不移动 LcdWriteCmd(0x01); // 显示清屏 } // 主函数 void main() { LcdInit(); // 初始化 LcdWriteCmd(0x80); // 设置光标位置为第一行第一列 LcdWriteData('H'); // 写入字符 LcdWriteData('e'); LcdWriteData('l'); LcdWriteData('l'); LcdWriteData('o'); LcdWriteCmd(0xc0); // 设置光标位置为第二行第一列 LcdWriteData('W'); LcdWriteData('o'); LcdWriteData('r'); LcdWriteData('l'); LcdWriteData('d'); while(1); // 循环等待 } ``` 这个示例代码使用了P1口作为LCD1602的数据信号端口,P2口作为LCD1602的控制信号端口。如果你使用的是其他型号的单片机,端口号可能需要修改。注意,该代码仅供参考,实际应用中需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值