LCD1602液晶屏
程序员文章站
2022-07-14 10:36:09
...
LCD的连接图
RD 是读/写的模式(只读、只写、可读可写)
WR 是读/写
LCDE 使能端
P0 是数据的输出/读取
LCD1602头文件
#ifndef _LCD1602_H_
#define _LCD1602_H_
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6;
sbit RW = P2^5;
sbit E = P2^7;
sbit LCD1602_DATA = P0;
/********************************************************************
作 用:液晶显示屏初始化 LCD1602
参 数无
返回值:无
********************************************************************/
void LCD1602_Init();
/********************************************************************
作 用:液晶显示屏命令的写入 LCD1602
参 数nCmd 是要发送的十六位进制的数字
返回值:无
********************************************************************/
void LCD1602_WriteCmd(uchar nCmd);
/********************************************************************
作 用:写入字符串 LCD1602
参 数:szDat 是要写入的字符串
返回值:无
********************************************************************/
void LCD1602_WriteDataStr(char *pStr);
/********************************************************************
作 用:写入数据 LCD1602
参 数:szDat 是要写入的字符
返回值:无
********************************************************************/
void LCD1602_WriteData(uchar szDat);
/********************************************************************
作 用:判断是否处于繁忙状态 LCD1602
参 数无
返回值:0 是不繁忙
1 是繁忙
********************************************************************/
int LCD1602_ReadBusy();
/********************************************************************
作 用:延时
参 数:t 延时时间
返回值:无
********************************************************************/
void Delay(uchar t);
/********************************************************************
作 用:计算字符串长度
参 数pStr 要计算的字符串
返回值:无
********************************************************************/
char strlen(char *pStr);
#endif
LCD1602源文件
#include"LCD1602.h"
/********************************************************************
作 用:液晶显示屏初始化 LCD1602
参 数:无
返回值:无
********************************************************************/
void LCD1602_Init()
{
Delay(15); //延时15毫秒
LCD1602_WriteCmd(0x38); //显示模式设置
Delay(15);
LCD1602_WriteCmd(0x0c); //显示开
Delay(15);
LCD1602_WriteCmd(0x01); //显示清屏
Delay(15);
LCD1602_WriteCmd(0x06); //显示光标
}
/********************************************************************
作 用:液晶显示屏命令的写入 LCD1602
参 数:nCmd 是要发送的十六位进制的数字
返回值:无
********************************************************************/
void LCD1602_WriteCmd(uchar nCmd)
{
while(LCD1602_ReadBusy()); //判断LCD1602是否处于繁忙状态
RS=0; //命令
RW=0; //写
_nop_();
LCD1602_DATA = nCmd; //准备发送命令
_nop_();
E=1; //开始发送命令
_nop_();
_nop_();
E=0; //发送命令结束
_nop_();
_nop_();
}
/********************************************************************
作 用:写入字符串 LCD1602
参 数:szDat 是要写入的字符串
返回值:无
********************************************************************/
void LCD1602_WriteDataStr(char *pStr)
{
int nCount = strlen(pStr),i = 0;
for(i;i < nCount;i++)
LCD1602_WriteData(pStr[i]);
}
/********************************************************************
作 用:写入数据 LCD1602
参 数:szDat 是要写入的字符
返回值:无
********************************************************************/
void LCD1602_WriteData(uchar szDat)
{
while(LCD1602_ReadBusy());
RS = 1;
RW = 0;
_nop_();
LCD1602_DATA = szDat;
_nop_();
E=1;
_nop_();
_nop_();
E=0;
_nop_();
_nop_();
}
/********************************************************************
作 用:判断是否处于繁忙状态 LCD1602
参 数:无
返回值: 0 是不繁忙
1 是繁忙
********************************************************************/
int LCD1602_ReadBusy()
{
uchar temp;
RS = 0;
RW=1;
_nop_();
LCD1602_DATA = 0xff;
_nop_();
E=1;
_nop_();
temp = LCD1602_DATA;
_nop_();
E=0;
return (temp&0x80);
}
/********************************************************************
作 用:延时
参 数:t 延时时间
返回值:无
********************************************************************/
void Delay(uchar t) //延时程序
{
uint i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
/********************************************************************
作 用:计算字符串长度
参 数pStr 要计算的字符串
返回值:无
********************************************************************/
char strlen(char *pStr)
{
int i = 0;
while (*pStr)
{
pStr++;
i++;
}
return i;
}
LCD1602的说明链接:https://blog.csdn.net/qq_38611124/article/details/90743900
上一篇: IDEA 创建单元测试
下一篇: ARM之S5pv210的LCD控制