欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LCD1602液晶屏

程序员文章站 2022-07-14 10:36:09
...

LCD1602液晶屏

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