lcd1602驱动程序(2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LCD1602 是每一个电子类行业初学者必须会使用的显示设备。

LCD1602 也是一个非常简单的显示设备,相比于数码管而言,它是反射式显示设备即外界的光强时它才会有显示,所以黑夜是看不到显示的而必须加背光。

LCD1602 有两行每行 16个单元共 32个单元的显示单位。

LCD1602 有的支持中文字库有的不支持。

当然不支持中文字库的也可以显示中文这时候需要
自定义中文字符(相关技术可查阅以下)。

LCD1602 的指令分为写数据和写命令两种,他们的指令有着严格的格式。

可以查阅一下中文数据手册。

LCD1602 共 16个引脚,分别为:
VDD: 地
VCC :+ 5V 电源
VEE :对比度,即调节显示字符的显著度
RS:写寄存器或数据的选择位
R/W :读或写选择位
E:使能位
D0-D7: 数据口
BL+: 背光的正电源端
BL-: 背光的地
下面是 LCD1602 的驱动程序:
#include <REG51.H>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0// 定义液晶数据传输口
sbit LCM_RS=P2^7;//定义液晶显示控制口
sbit LCM_RW=P2^6;
sbit LCM_EN=P2^5;
/**********************************************************
函数名: Wait_Enable
功能:等待 1602液晶完成内部操作
参数:无
返回值:无
***********************************************************/
void Wait_Enable(void)
{
DataPort=0xff;//DataPort=11111111切换 PO 口为输入状态
LCM_RS=0;//RS 为低电平, RW 为高电平时才可以读忙信号
LCM_RW=1;
_nop_();
LCM_EN=1;
_nop_();
_nop_();
while(DataPort&0x80){};//相与等于 0,说明 BF 为 0,不忙;等于 1,BF=1 ,忙碌
LCM_EN=0;// 判断忙碌之后,置位 EN=0 ,液晶不执行任何操

}
/**********************************************************
函数名: Write_Command
功能:向液晶模块写入命令
参数: cmd--命令
chk-- 是否判忙的标志,1:判忙, 0:不判
返回值:无
***********************************************************/
void Write_Command(uchar cmd,uchar chk)
{
if(chk)Wait_Enable();
LCM_RS=0;// 当 RS 和 RW 都为低电平时才可以写入指令或者显示地址
LCM_RW=0;
_nop_();
DataPort=cmd;// 将命令置入数据总线
_nop_();
LCM_EN=1;
_nop_();
_nop_();
LCM_EN=0;//EN 由高电平到低电平,液晶执行写指令操作
}
/**********************************************************
函数名: Write_Data
功能:向液晶显示的当前地址写入显示数据
参数: data--显示字符数据
返回值:无
***********************************************************/
void Write_Data (uchar datas)
{
Wait_Enable();
LCM_RS=1;//RS 高电平, RW 低电平时可以写入数据LCM_RW=0;
_nop_();
DataPort=datas;//置数据到数据总线
_nop_();
LCM_EN=1;
_nop_();
_nop_();
LCM_EN=0;
}
/**********************************************************
函数名: void InitLcd()
功能:对LCD1602 进行初始化
参数:无
返回值:无
**********************************************************/
void InitLcd()
{
Write_Command(0x3c,1);// 设置显示模式:8位 2行 5*7 点阵Write_Command(0x08,1);// 显示器关,不显示光标,光标不闪烁Write_Command(0x01,1);// 清屏并光标复位
Write_Command(0x06,1);// 文字不动,光标自动右移
Write_Command(0x0c,1);// 显示开,不开光标,不闪烁
}
/**********************************************************
函数名: void DisplayOneChar(uchar X,uchar Y ,uchar Data)
功能:在指定位置第y 行第 x 列显示一个字符
参数: X-- 列坐标Y--行坐标Data--欲显示字符
返回值:无
**********************************************************/
void DisplayOneChar(uchar X,uchar Y ,uchar Datas)
{
Y&=1;
X&=15;
if(Y)X|=0x40;
X|=0x80;
Write_Command(X,0);
Write_Data(Datas);
}
/**********************************************************
函数名: void DisplayListChar(uchar X,uchar Y,uchar code *Data
功能:以起始位置第Y 行第 X 列开始显示一串字符
参数: X-- 起始列坐标Y-- 起始行坐标Data--欲显示字符串首地址返回值 :无
**********************************************************/
void DisplayListChar(uchar X,uchar Y ,uchar code *Datas)
{
uchar ListLength=0;
Y&=0x1;
X&=0xF;
while(X<=15)
{
DisplayOneChar(X,Y,Datas[ListLength]);
ListLength++;
X++;
}
}。

相关文档
最新文档