📄 lcd1602.c.new
字号:
//=========================1602液晶头文键=================//#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 0x0f //打开LCD显示,有光标;0x0c没有光标#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.cCreated by Zhengxihuiemail: zhengxihui0506@126.comMay 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=intdat%10; intdat/=10; i++; } LCD_set_xy(x,y); while(i) { i--; LCD_en_dat(temp+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; //清屏}void main(void){ LCD_init(); //1602初始化 while(1) { LCD_write_string(0,0,"Ready Go!"); //说明初始化成功 }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -