历史上的今天
今天是:2025年03月02日(星期日)
2021年03月02日 | 51单片机对LCD1602液晶的驱动设计
2021-03-02 来源:eefocus
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 != ‘ ’) //连续写入字符串数据,直到检测到结束符
{
LcdWriteDat(*str++);
}
}
/* 初始化1602液晶 */
void InitLcd1602()
{
LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口
LcdWriteCmd(0x0C); //显示器开,光标关闭
LcdWriteCmd(0x06); //文字不动,地址自动+1
LcdWriteCmd(0x01); //清屏
}
史海拾趣
|
5110LCD邮购回来了,经过一个晚上的研究算是可以点亮了,但是我用的16f84a,程序存储器不是非常大,但是我想显示大一些的字符,没办法只好自己研究了,经过好几个夜晚的调试修改终于可以正常显示了,今天过来显摆下。呵呵! 大家注意第一行的三个 ...… 查看全部问答> |
|
近日才学驱动 在build环境下编译驱动一直不成功,请大家帮忙看一下 C:\\WINDDK\\2600>build -0 BUILD: Object root set to: ==> objchk BUILD: Adding /Y to COPYCMD so xcopy ops won\'t hang. BUILD: /i switch ignored BUILD: Compile a ...… 查看全部问答> |
|
用RSLINX 连接ab 1769 L32e CPU 通讯不上,用工业以太网, 拼地址拼不通,无网络连接,计算机加网线上网正常,连接其他ab通讯模块正常,rslinx显示不识别硬件,cpu还挂着ab panel view plus 1000 连接正常 麻烦各位给分析分析什么原因。… 查看全部问答> |
|
Lm8962,UDP同时接收、发送数据,UDP接收会丢包,请问下各位大侠是什么原因? 我创建了一个UDP socket,来实现对数据的收发。 我用PC机周期性地通过UDP给lm3s8962发数据,lm3s8962处理完后,再通过UDP发送给PC机。 无论PC机的周期设为多大,发现lm3s8962只能收到一半pc机发送的数据。 假如我分别创建两个U ...… 查看全部问答> |
|
#include #include #define uint unsigned int #define uchar unsigned char uchar temp,b; void delay(uint z); void main() { temp=0xfe; &nbs ...… 查看全部问答> |




