📄 lcd.h
字号:
#ifndef _LCD_H_
#define _LCD_H_
#include "P89v51rx2.h"
#include "delay.h"
#include "io_assign.h"
#include "intrins.h"
/*
引脚说明
EN..........P1_2
RS..........P0_1
RW..........P0_0
LCDBUS......P0_4 - P0_7
*/
//------------------------LCD相关命令------------------------------------------
#define MSB 0x80
#define DATA_MODE 0x28
#define OPEN_SCREEN 0x0C
#define DISPLAY_ADDRESS 0x80
//------------------------------------------------------------------------------
//----------------------------全局变量声明-------------------------------------
#define LCDBUS P0
#define LCD_ENABLE P1_2
#define LCD_RS P0_1
#define LCD_RW P0_0
//------------------------------------------------------------------------------
static uchar temp_num[7]={0,0,0,0,0,0,0};
//-------------------------------函数声明---------------------------------------
void LCM1602_write_cmd_4b(unsigned char comm);
void LCM1602_write_cmd(unsigned char comm);
void LCM1602_write_data(unsigned char dat);
void LCM1602_Init(void);
void LCM1602_clear(void);
void LCM1602_set_xy(unsigned char x, unsigned char y);
void LCM1602_write_char(unsigned x,unsigned char y,unsigned char dat);
void LCM1602_write_string(unsigned char x,unsigned char y,unsigned char *s);
void LCM1602_Read_BF(void);
void num(unsigned char x,unsigned char y,unsigned int n);
void num16(unsigned char row,unsigned char col,unsigned int n);
//--------------------------------------------------------------------------------
void LCM1602_Init(void)
{
LCM1602_write_cmd(DATA_MODE);
LCM1602_write_cmd(DATA_MODE);
LCM1602_write_cmd(DATA_MODE); //set 4 bit data transmission mode
LCM1602_write_cmd(OPEN_SCREEN); //open display (enable lcd display)
LCM1602_write_cmd(DISPLAY_ADDRESS); //set lcd first display address
LCM1602_write_cmd(0x01); //clear screen
}
void LCM1602_Read_BF(void)
{
LCD_RW=1; //RW 1
LCD_RS=0; //RS 0
LCD_ENABLE=1; //EN 1 Read BF
LCDBUS=LCDBUS&0x0F|0xf0;
while(LCDBUS&MSB);
LCD_ENABLE=0;
}
void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
{
LCD_ENABLE=1;
_nop_();
LCD_ENABLE=0;
}
//*********************************************
void LCM1602_write_cmd(unsigned char command)
{
LCM1602_Read_BF();
LCD_RS=0; //RS 0
LCD_RW=0; //RW 0
LCDBUS&=0x0F;
LCDBUS=command&0xf0 | LCDBUS&0x0f;
LCD_en_write();
command=command<<4;
LCDBUS&=0x0F;
LCDBUS=command&0xf0 | LCDBUS&0x0f;
LCD_en_write();
}
void LCM1602_write_data(unsigned char dat)
{
LCM1602_Read_BF();
LCD_RS=1; //RS 1
LCD_RW=0; //RW 0
LCDBUS &=0x0F;
LCDBUS=dat&0xf0 | LCDBUS&0x0f;
LCD_en_write();
dat=dat<<4;
LCDBUS &=0x0F;
LCDBUS=dat&0xf0 | LCDBUS&0x0f;
LCD_en_write();
}
void LCM1602_clear(void)
{
LCM1602_write_cmd(0x01);
LCM1602_Read_BF();
delay_ms(5);
}
void LCM1602_set_xy(unsigned char x,unsigned char y)
{
unsigned char address;
y&=0x0f;
if(!x)
address=0x80+y;
else
address=0xc0+y;
LCM1602_write_cmd(address);
}
void LCM1602_write_string(unsigned char x,unsigned char y,const unsigned char *s)
{
LCM1602_set_xy(x,y);
while(*s)
{
LCM1602_write_data(*s);
s++;
}
}
void num(unsigned char x,unsigned char y,unsigned int n)
{
unsigned char i,length;
unsigned int nx=n;
for(i=0;i<7;i++)
temp_num[i]=0;
for(i=0;i<6;i++)
{
if(nx>=1)length++;
nx/=10;
}
nx=n;
for(;length>0;length--)
{
temp_num[length-1]=nx%10+48;
nx/=10;
}
if(n==0)temp_num[0]='0';
LCM1602_write_string(x,y,temp_num);
}
/***********************************************************************
功能:在第row行,col列处显示16进制数据n
************************************************************************/
void num16(unsigned char row,unsigned char col,unsigned int n)
{
unsigned char i=0;
unsigned int nx=n;
for(i=0;i<7;i++)
temp_num[i]=0;
if(nx<=0xFF)
{
temp_num[3]=nx%16;
nx/=16;
temp_num[2]=nx%16;
for(i=2;i<4;i++)
{
if(temp_num[i]<10)temp_num[i]+=48;
else temp_num[i]+=55;
}
temp_num[4]=0x00;
}
else
{
temp_num[5]=nx%16;
nx/=16;
temp_num[4]=nx%16;
nx/=16;
temp_num[3]=nx%16;
nx/=16;
temp_num[2]=nx%16;
for(i=2;i<6;i++)
{
if(temp_num[i]<10)temp_num[i]+=48;
else temp_num[i]+=55;
}
}
temp_num[1]='x';
temp_num[0]='0';
LCM1602_write_string(row,col,temp_num);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -