其他分享
首页 > 其他分享> > 外设(1)——LCD1602

外设(1)——LCD1602

作者:互联网

        字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1,
16*2,20*2 和 40*2 行等的模块。

        LCD1602是一种16*2字符型液晶显示屏,实物如图示:

主要技术参数:

显示容量:16×2个字符

芯片工作电压:4.5——5.5V

工作电流:2.0mA(5.0V)

模块最佳工作电压:5.0V

字符尺寸:2.95×4.35(W×H)mm

引脚定义:

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。

接线图: 

 指令说明:

初始化设置

 初始化过程:

延时
写指令38H
延时
写指令38H
延时
写指令38H
(每次写指令、读/写数据操作之前均需检测信号)
写指令38H:显示模式设置
写指令08H:显示关闭
写指令01H:显示清屏
写指令06H:显示光标移动设置
写指令0CH:显示开及光标设置

 显示地址:

1602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址如下:

 控制时序图:

1.读操作时序图:

在这里插入图片描述

2.写操作时序图:

在这里插入图片描述

3.时序参数:

在这里插入图片描述

ASCII表:

代码实现: 

LCD1602.c文件

#include <REG52.H>

#define	LCD_DatePort P0
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;

void LCD_Delay()		//@12.000MHz  1ms
{
	unsigned char i, j;
	i = 2;j = 239;
	do
	{
		while (--j);
	} while (--i);
}

void LCD_WriteCommand(unsigned char Command)	  //写入指令
{
	LCD_RS=0;
	LCD_RW=0;
	LCD_DatePort=Command;
	LCD_E=1;
	LCD_Delay();
	LCD_E=0;
	LCD_Delay();
}

void LCD_WriteDate(unsigned char Date)			  //写入数据
{
	LCD_RS=1;
	LCD_RW=0;
	LCD_DatePort=Date;
	LCD_E=1;
	LCD_Delay();
	LCD_E=0;
	LCD_Delay();
}

void LCD_Init()									   //LCD初始化
{
	LCD_WriteCommand(0x38);//设置16x2显示  5x7矩阵 8位数据接口
	LCD_WriteCommand(0x0e);//显示开关控制指令 0000 1DCB		D显示 C光标 B光标闪烁
	LCD_WriteCommand(0x06);//模式设置指令  0x07写入新数据后光标左移 显示屏幕右移一个字符 0x06写入新数据后光标左移 显示屏幕不移动 0x05写入新数据后光标右移 显示屏幕右移一个字符 0x04写入新数据后光标右移 显示屏幕不移动
	LCD_WriteCommand(0x01);//清屏指令
}

void LCD_SetCursor(unsigned char Line,Column)	   //光标位置
{
	if(Line==1)
	{
		LCD_WriteCommand(0x80|(Column-1));	
	}
	else
	{
		LCD_WriteCommand(0x80|(Column-1)+0x40);
	}
}

void LCD_ShowChar(unsigned char Line,Column,Date)	//显示一个字符
{
	LCD_SetCursor(Line,Column);
	LCD_WriteDate(Date);
}

void LCD_ShowString(unsigned char Line,Column,unsigned char *String)  //显示字符串
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=0;String[i]!=0;i++)
	{
		LCD_WriteDate(String[i]);
	}
}

int LCD_Pow(unsigned int X,Y)						//幂函数
{
	unsigned char i;
	unsigned int result=1;
	for(i=0;i<Y;i++)
	{
		result*=X;	
	}	
	return result;
}

void LCD_ShowNumber(unsigned char Line,Column,unsigned int Number,unsigned char Length)		//显示数字
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
	LCD_WriteDate(Number/LCD_Pow(10,i-1)%10+'0');
	}
}

void LCD_ShowHEX(unsigned char Line,Column,unsigned int Number,unsigned char Length)		 //显示十进制数字
{
	unsigned char i,g;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
		g=Number/LCD_Pow(16,i-1)%16;
		if(g<10)
		{
			LCD_WriteDate(Number/LCD_Pow(16,i-1)%16+'0');		
		}
		else
		{
			LCD_WriteDate(Number/LCD_Pow(16,i-1)%16+'A'-10);
		}
	}	
}

LCD1602.h文件

#ifndef __LCD1602_H__
#define __LCD1602_H__

#include <REG52.H>

void LCD_Init();	 //初始化
void LCD_ShowChar(unsigned char Line,Column,Date);		//写入字符
void LCD_ShowString(unsigned char Line,Column,unsigned char *String);		//写入字符串
void LCD_ShowNumber(unsigned char Line,Column,unsigned int Number,unsigned char Length);	//写入数字
void LCD_ShowHEX(unsigned char Line,Column,unsigned int Number,unsigned char Length);//写入十六进制数

void LCD_WriteCommand(unsigned char Command);	  //写入指令

#endif

标签:Column,void,unsigned,char,LCD,LCD1602,Line,外设
来源: https://blog.csdn.net/Electricaler/article/details/118764594