📄 lcd1602_4.h
字号:
#ifndef LCD1602_4_H
#define LCD1602_4_H
#include <reg52.h>
#include <intrins.h>
#define MSB 0x80 //读忙位
#define HIGH 1
#define LOW 0
//*****************************************
#define DATA_MODE 0x28 //LCD模式设置,0x28位四位数据线模式
#define OPEN_SCREEN 0x0C //打开LCD显示
#define DISPLAY_ADDRESS 0x80 //写地址指令
#define CLEARSCREEN LCD_en_com(0x01) //清屏
//***********//LCD1602的接线//*****************************
#define LCDIO P0 //LCD1602的高四位接在P0口的高四位
sbit LCD1602_RS=P0^0; //RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
sbit LCD1602_RW=P0^1; //RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
sbit LCD1602_EN=P0^2; //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
//**********************************************************************
void LCD_en_com(unsigned char command); //写命令指令
void LCD_en_dat(unsigned char temp); //写数据指令
void LCD_set_xy(unsigned char x, unsigned char y); //设置显示地址:X为横轴(0-15),Y为纵轴(0-1).
void LCD_write_char(unsigned x,unsigned char y,unsigned char dat); //写一个字符
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s);//写一个字符串
void LCD_write_int(unsigned char x,unsigned char y,unsigned int intdat); //写无字符型整形数
void LCD_init(void); //lcd初始化
void LCD_Read_BF(void); //LCD读忙信号
//**********************************************************************
/*
LCD1602.c
Created by Zhengxihui
email: zhengxihui0506@126.com
May 2007
*/
void LCD_Read_BF(void)
{
LCD1602_RW=HIGH; //RW 1
LCD1602_RS=LOW; //RS 0
LCD1602_EN=HIGH; //EN 1 读忙信号
LCDIO=LCDIO&0x0F|0xf0;
while(LCDIO&MSB);
LCD1602_EN=LOW;
}
void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
{
LCD1602_EN=HIGH;
_nop_();
LCD1602_EN=LOW;
}
//*************************************
void LCD_en_com(unsigned char command)
{
LCD_Read_BF();
LCD1602_RS=LOW; //RS 0 写命令
LCD1602_RW=LOW; //RW 0
LCDIO&=0x0F;
LCDIO=command&0xf0 | LCDIO&0x0f; //先发送高四位数据
LCD_en_write();
command=command<<4;
LCDIO&=0x0F;
LCDIO=command&0xf0 | LCDIO&0x0f; //发送低四位数据
LCD_en_write();
}
//*********************************
void LCD_en_dat(unsigned char dat)
{
LCD_Read_BF();
LCD1602_RS=HIGH; //RS 1 写数据
LCD1602_RW=LOW; //RW 0
LCDIO &=0x0F;
LCDIO=dat&0xf0 | LCDIO&0x0f; //先发送高四位数据
LCD_en_write();
dat=dat<<4;
LCDIO &=0x0F;
LCDIO=dat&0xf0 | LCDIO&0x0f; //发送低四位数据
LCD_en_write();
}
//**************设置显示地址:X为横轴(0-15),Y为纵轴(0-1)********************
void LCD_set_xy(unsigned char x,unsigned char y)
{
unsigned char address;
x&=0x0f;
if(!y)
address=0x80+x;
else
address=0xc0+x;
LCD_en_com(address);
}
//***************写一个字符:X为横轴(0-15),Y为纵轴(0-1)**********
void LCD_write_char(unsigned x,unsigned char y,unsigned char dat)
{
LCD_set_xy(x,y);
LCD_en_dat(dat);
}
//****************写一个字符串***************************************
void LCD_write_string(unsigned char x,unsigned char y,const unsigned char *s)
{
LCD_set_xy(x,y);
while(*s)
{
LCD_en_dat(*s);
s++;
}
}
//****************写一个无字符整数***************************************
void LCD_write_int(unsigned char x,unsigned char y,unsigned int intdat)
{
unsigned char i=0,temp[5];
while(intdat/10 || intdat%10)
{
temp[i]=intdat%10;
intdat/=10;
i++;
}
LCD_set_xy(x,y);
while(i)
{
i--;
LCD_en_dat(temp[i]+0x30);
}
}
//*****//LCD的初始化函数(刚上电的时候一定要调用一次)//*********************
void LCD_init(void)
{
LCD_en_com(DATA_MODE); //设计四位数据线模式
LCD_en_com(DATA_MODE); //设计四位数据线模式
LCD_en_com(OPEN_SCREEN); //打开LCD显示
LCD_en_com(DISPLAY_ADDRESS);//设计首地址
CLEARSCREEN; //清屏
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -