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=高脉冲
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); //清屏
}

科学家开发出一种光电皮肤
比较常见的网络故障应该如何解决
医疗+区块链的潜力怎么样
进入工业4.0时代,管道行业面临重新洗牌
电荷域CMOS TDI相机Linea HS 32K TDI在国际光学工程学会上荣获质量控制类棱镜奖
51单片机对LCD1602液晶的驱动设计
用集成式 8 开关无闪烁驱动器 控制矩阵式 LED 前灯中的单个 LED
安卓手机为什么比不过苹果iPhone?这些理由你不得不服!
eSATA接口连接件要求
四种仪器分析法测定预混饲料中镉元素的含量
华为荣耀V9海外版:华为荣耀8Pro亮相叫价549欧元,外观惊艳不输华为荣耀8!
投影机的对比度
六一出行活动火热 加强安防十分必要
开关电源共模电感发热烧坏的可能原因分析
MCU对健康监测设备的影响
高边正电流传感器监控负电源
集成湿度传感器IH3605的结构、引脚功能及典型应用
日立中央空调获得“5A”级好空气认证企业
天文学家发现一条穿越太阳系的“天体高速公路”
华为京东奇幻大秀:华为P20 Pro征服了黑夜