51单片机完全学习——LCD1602液晶显示屏

一、数据手册解读

通过看数据手册我们需要知道,这个屏幕每个引脚的定义以及如何进行发送和接收。通过下面这张图我们就可以知道,这些引脚和我们的编程是有关的,需要注意的是,这里我们在接线的时候,一定要把DB0-DB7接到同一个端口,意思就是要接P0就都接P0。这样方便我们直接去处理。我们这里使用的是并行数据传输,也就是说并不像我们之前学习的I2C和SPI接口,需要一位一位的接收和发送。这里的8位数据是同时进行传输的。因此时序上也会有一些区别。

根据上面这张图片,我们需要知道我们要那些底层的函数,我们只想在LCD1602上进行显示,因此我们这次不需要读的一些函数,只需要一个写指令和一个写数据函数。因此具体的函数实现如下

void lcd1602_write_cmd(uchar cmd)
{
	LCD1602_DABUS = cmd;
	LCD1602_EN = 1;
	LCD1602_WR = 0;
	LCD1602_RS = 0;
	LCD1602_EN = 0;
	delay40us();
}

void lcd1602_write_date(uchar date)
{
	LCD1602_DABUS = date;
	LCD1602_EN = 1;
	LCD1602_WR = 0;
	LCD1602_RS = 1;
	LCD1602_EN = 0;
	delay40us();
}

相信大家看到了每个函数结束会有一个延时函数,这是因为不论是写指令还是写数据,LCD1602内部的芯片都需要一定的时间来进行处理,这里我们的延时就是让CPU等一等内部的芯片。

二、LCD1602常用指令集

我们需要注意的是,最后一个指令,判断忙碌信号,我的LCD1602忙信号老是过不去,因此我在前面使用了延时,而不是用这种检测方式。对于上面的指令你可以将它想象成为,你要使用一个东西之前,你需要先对他进行一些设置,也就是进行初始化。

三、LCD1602初始化及显示函数

void lcd1602_init(void)
{
	lcd1602_write_cmd(0x01);      //发送清屏指令
	delay2ms();                   //等待指令执行
	lcd1602_write_cmd(0x06);      //模式设置 写入数据后光标右移,写入数据后显示屏不移动
	lcd1602_write_cmd(0x0f);      //显示功能开 有光标 光标不闪烁
	lcd1602_write_cmd(0x14);      //设定显示屏或光标移动方向 设置为光标右移1格,且AC值加1
	lcd1602_write_cmd(0x38);      //数据总线位数为8位 显示2行 5*7点阵
}
//设置需要显示字符的坐标
//x取值0-15  y取值0-1
void lcd1602_setcoord(uchar x, uchar y)
{
	uchar addr = 0;
	if (y == 0)
	{
		addr = 0x80 + x;
	}
	else
	{
		addr = 0xc0 + x;
	}
	lcd1602_write_cmd(addr);
}
//在LCD1602上显示字符串,而且这个函数还可以实现,自动换行显示
void lcd1602_display_str(uchar x, uchar y, uchar *str)
{
	uchar i = 0;
	lcd1602_setcoord(x, y);
	while (str[i] != '\0')
	{
	  lcd1602_write_date(str[i]);
		if (((i + x) == 15) && y == 0)
		{
			lcd1602_setcoord(0, 1);
		}
		else if (((i + x) == 15) && y == 1)
		{
			lcd1602_setcoord(0, 0);
		}
		i++;
	}
}

这张图片就是DDRAM内存里面的地址,如果我们想要显示一个字符,我们首先需要发送,一个地址,也就是说我们需要告诉LCD1602在那个地方进行显示,然后发送我们需要显示的数据。因此在每次显示前都需要设置地址。但是我们需要注意的是同一个地址只能显示一个字符,不然的话就会进行覆盖。上面代码里面的第二个函数就是用来设置地址的,这个函数会将我们想要显示的坐标位置,转换成内部内存的地址,我们只需要告诉函数x,y的坐标函数就会自己转换。上面代码里面的最后一个函数就是用来显示字符串的。只需要给他传入起始坐标,和字符串的头指针就可以完成显示。

上一篇:【K8S系列】Kubernetes 中 Service IP 分配 问题及解决方案【已解决】


下一篇:磁盘分区工具 DiskGenius Pro v5.5.0.1488 中文汉化版