您的位置 首页 数字

51单片机对LCD1602液晶的驱动规划

51单片机对LCD1602液晶的驱动设计-1、1602液晶读写时序

(1)、读状态

RS=L,R/W=H,E=H。(判断忙完毕后释放总线)

(2)、读数据

RS=H,R/W=H,E=H。

(3)、写指令

RS=L,R/W=L,D0~D7=指令码,E=高脉冲

(4)、写数据

RS=H,R/W=L,D0~D7=数据,E=高脉冲

51单片机——LCD1602

1、1602液晶读写时序

(1)、读状况

RS=L,R/W=H,E=H。(判别忙结束后开释总线)

(2)、读数据

RS=H,R/W=H,E=H。

(3)、写指令

RS=L,R/W=L,D0~D7=指令码,E=高脉冲

(4)、写数据

RS=H,R/W=L,D0~D7=数据,E=高脉冲

2、液晶显现驱动文件

#include

#define LCD1602_DB P0

sbit LCD1602_RS = P1 ^ 0;

sbit LCD1602_RW = P1 ^ 1;

sbit LCD1602_E = P1 ^ 5;

/* 等候液晶准备好 */

void LcdWaitReady()

{

unsigned char sta;

LCD1602_DB = 0xFF;

LCD1602_RS = 0;

LCD1602_RW = 1;

do

{

LCD1602_E = 1;

sta = LCD1602_DB; //读取状况字

LCD1602_E = 0;

}

while (sta & 0x80); //bit7等于1表明液晶正忙,重复检测直到其等于0停止

}

/* 向LCD1602液晶写入一字节指令,cmd-待写入指令值 */

void LcdWriteCmd(unsigned char cmd)

{

LcdWaitReady();

LCD1602_RS = 0;

LCD1602_RW = 0;

LCD1602_DB = cmd;

LCD1602_E = 1;

LCD1602_E = 0;

}

/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */

void LcdWriteDat(unsigned char dat)

{

LcdWaitReady();

LCD1602_RS = 1;

LCD1602_RW = 0;

LCD1602_DB = dat;

LCD1602_E = 1;

LCD1602_E = 0;

}

/* 设置显现RAM开始地址,亦即光标方位,(x,y)-对应屏幕上的字符坐标 */

void LcdSetCursor(unsigned char x, unsigned char y)

{

unsigned char addr;

if (y == 0) //由输入的屏幕坐标核算显现RAM的地址

{

addr = 0x00 + x; //榜首行字符地址从0x00开始

}

else

{

addr = 0x40 + x; //第二行字符地址从0x40开始

}

LcdWriteCmd(addr | 0x80); //设置RAM地址

}

/* 在液晶上显现字符串,(x,y)-对应屏幕上的开始坐标,str-字符串指针 */

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)

{

LcdSetCursor(x, y); //设置开始地址

while (*str != ‘\0’) //接连写入字符串数据,直到检测到结束符

{

LcdWriteDat(*str++);

}

}

/* 初始化1602液晶 */

void InitLcd1602()

{

LcdWriteCmd(0x38); //16*2显现,5*7点阵,8位数据接口

LcdWriteCmd(0x0C); //显现器开,光标封闭

LcdWriteCmd(0x06); //文字不动,地址主动+1

LcdWriteCmd(0x01); //清屏

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/344795.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部