0°

(一)51进阶:LCD16x2 8位与8051连接

介绍

LCD(液晶显示器)用于显示嵌入式系统中的状态或参数。

LCD 16×2是16引脚器件,具有8个数据引脚(D0-D7)和3个控制引脚(RS,RW,EN)。其余5个引脚用于LCD的电源和背光。

控制引脚可帮助我们在命令模式或数据模式下配置LCD。它们还有助于配置读取模式或写入模式以及何时进行读取或写入。

LCD 16×2可以在4位模式或8位模式下使用,具体取决于应用的要求。为了使用它,我们需要在命令模式下向LCD发送某些命令,一旦根据我们的需要配置LCD,我们就可以在数据模式下发送所需的数据。

有关LCD 16×2及其使用方法的更多信息,请参阅传感器和模块部分中的LCD 16×2显示模块部分。

(一)51进阶:LCD16x2 8位与8051连接

LCD16x2引脚

连接图

(一)51进阶:LCD16x2 8位与8051连接

LCD 16×2连接,带8051

硬件连接

(一)51进阶:LCD16x2 8位与8051连接

开始编程:LCD16x2

初始化LCD16x2

初始化LCD非常容易

  1. 打开LCD电源
  2. 等待15ms,开启LCD16x2的初始化时间
  3. 发送0x38命令(初始化.2行,5×8矩阵,8位模式)
  4. 发送任何Display ON命令(0x0E,0x0C)
  5. 发送0x06命令(增量光标)
void LCD_Init (void)		/* LCD Initialize function */
{
	delay(20);		/* LCD Power ON Initialization time >15ms */
	LCD_Command (0x38);	/* Initialization of 16X2 LCD in 8bit mode */
	LCD_Command (0x0C);	/* Display ON Cursor OFF */
	LCD_Command (0x06);	/* Auto Increment cursor */
	LCD_Command (0x01);	/* Clear display */
	LCD_Command (0x80);	/* Cursor at home position */
}

现在我们成功初始化了LCD,它已准备好接受要显示的数据。

命令写入功能

  • 将命令发送到数据端口
  • 使RS引脚为低电平,RS = 0(命令寄存器)
  • 使RW引脚为低电平,RW = 0(写操作)
  • 在Enable(E)最小值为450ns时给出高至低脉冲。

当我们给启动脉冲时,LCD锁存D0到D7中的数据并执行命令,因为RS是命令reg。

void LCD_Command (unsigned char cmd)	/* LCD16x2 command funtion */
{
	lcd_data_port= cmd;
	rs=0;				/* command reg. */
	rw=0;				/* Write operation */
	en=1; 
	delay(1);
	en=0;
	delay(5);
}

数据写入功能

  1. 将命令发送到数据端口
  2. 使RS引脚为低电平,RS = 1(数据寄存器)
  3. 使RW引脚为低电平,RW = 0(写操作)
  4. 在Enable(E)最小450 ns时给出高至低脉冲

当我们给启动脉冲时,LCD锁存D0到D7的数据并将其显示在5x8矩阵上,因为RS是数据寄存器。

void LCD_Char (unsigned char char_data)	/* LCD data write function */
{
	lcd_data_port=char_data;
	rs=1;				/*Data reg.*/
	rw=0;				/* Write operation*/
	en=1;   				
	delay(1);
	en=0;
	delay(5);
}

注意

  1. LCD上电延时:上电后我们无法立即发送命令,LCD16x2需要自动初始化时间15ms。编程时我们需要注意在延迟> 15ms时提供足够的电源,然后向LCD发送命令。
  2. 在提供执行命令后,LCD16x2需要时间(以微秒为单位),但对于0x01命令(清除显示),执行需要1.64ms。所以在给出这个命令后,我们需要给出足够的延迟> 1.63毫秒。

程序:

/*  
   LCD16x2 8 bit 8051 interface
   https://www.qutaojiao.com
*/


#include

sfr lcd_data_port=0x90;		/* P1 port as data port */
sbit rs=P2^0;			/* Register select pin */
sbit rw=P2^1;			/* Read/Write pin */
sbit en=P2^2;			/* Enable pin */


void delay(unsigned int count)  /* Function to provide delay Approx 1ms */
{
	int i,j;
	for(i=0;ifor(j=0;j<112;j++);
}

void LCD_Command (unsigned char cmd)  /* LCD16x2 command funtion */
{
	lcd_data_port= cmd;
	rs=0;			/* command reg. */
	rw=0;			/* Write operation */
	en=1; 
	delay(1);
	en=0;
	delay(5);
}

void LCD_Char (unsigned char char_data)  /* LCD data write function */
{
	lcd_data_port=char_data;
	rs=1;			/* Data reg.*/
	rw=0;			/* Write operation*/
	en=1;   				
	delay(1);
	en=0;
	delay(5);
}

void LCD_String (unsigned char *str) /* Send string to LCD function */
{
	int i;
	for(i=0;str[i]!=0;i++)  /* Send each char of string till the NULL */
	{
		LCD_Char (str[i]);  /* Call LCD data write */
	}
}

void LCD_String_xy (char row, char pos, char *str)  /* Send string to LCD function */
{
	if (row == 0)
	LCD_Command((pos & 0x0F)|0x80);
	else if (row == 1)
	LCD_Command((pos & 0x0F)|0xC0);
	LCD_String(str);	/* Call LCD string function */
}

void LCD_Init (void)		/* LCD Initialize function */
{	
	delay(20);		/* LCD Power ON Initialization time >15ms */
	LCD_Command (0x38);	/* Initialization of 16X2 LCD in 8bit mode */
	LCD_Command (0x0C);	/* Display ON Cursor OFF */
	LCD_Command (0x06);	/* Auto Increment cursor */
	LCD_Command (0x01);	/* clear display */
	LCD_Command (0x80);	/* cursor at home position */
}

结果演示

(一)51进阶:LCD16x2 8位与8051连接

LCD16x2字符串输出

滚动显示

要在LCD上滚动字符串或字符,我们需要使用以下命令

(一)51进阶:LCD16x2 8位与8051连接

为了滚动显示,我们只需将这些命令放在循环中。

滚动显示:

  1. 在LCD上显示字符串
  2. 使用’0x1C’命令将其滚动到右侧
  3. 使用’0x18’命令将其滚动到左侧

主要功能代码

void main()
{
  unsigned char i,shift;
	delay(5);
	LCD_Init();			/* initilize LCD */

	LCD_String("ElectronicWings");  /* display string */
	delay(1000);

	shift=15;			/* number of time shifts count=15 */
	
while(1)
{
	for(i=0;i0x1c);  	/* shift display right */
		delay(300);
  }
	
	shift=30;			/* number of time shifts 30 */
	for(i=0;i<30;i++)
  {
		LCD_Command(0x18);  	/* shift display left */
		delay(300);
  }
 }	
}

本节课程序下载:

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论