📄 lcd.h
字号:
#define LCD_RS PORTEbits.RE4 //并行的数据/指令选择信号 H/L
#define LCD_RW PORTEbits.RE5 //并行的读/写选择信号 H/L
#define LCD_EN PORTEbits.RE6 //并行的使能信号 H/L
void digit_display(unsigned char line,unsigned char column,int data); //显示数据
void text_display(unsigned char line,unsigned char column,const unsigned char *s); //显示文字
void LCD_initial(void); //LCD初始化
void LCD_write_data(int data); //对LCD写数据
void LCD_write_command(int data); //对LCD写指令
unsigned int LCD_read_data(void); //从LCD读数据
void LCD_checkbusy(void); //检测LCD忙位
void delay_10us(unsigned char x);
void delay_ms(unsigned char cnt);
void delay_10us(unsigned char x) {while(x--);}
void delay_ms(unsigned char cnt)
{
unsigned char i=4;
do
{
do
{
delay_10us(39);
} while(--i);
} while(--cnt);
}
void LCD_checkbusy(void) //检测忙BF位
{
TRISD=0xff; //PORTD为输入
LCD_EN=0;LCD_RS=0;LCD_RW=1; //不始能 指令 读
delay_10us(1);
LCD_EN=1; //始能
delay_10us(1);
while(PORTD&0x80); //BF位为0时跳出
LCD_EN=0; //关始能
delay_10us(1);
return;
}
unsigned int LCD_read_data(void) //读数据
{
unsigned int data;
LCD_checkbusy(); //检测忙
TRISD=0xff; //PORTD为输入
LCD_EN=0;LCD_RS=1;LCD_RW=1; //不始能 数据 读
delay_10us(1);
LCD_EN=1;
delay_10us(1);
data=PORTD;
LCD_EN=0;
delay_10us(1);
return data;
}
void LCD_write_command(int data) //写指令
{
LCD_checkbusy(); //检测忙BF位
TRISD=0x00; //PORTD为输出
delay_10us(1);
PORTD=data; //PORTD输出data给LCM
LCD_EN=0;LCD_RS=0;LCD_RW=0; //不始能 指令 写
delay_10us(1);
LCD_EN=1;
delay_10us(1);
LCD_EN=0;
delay_10us(1);
return;
}
void LCD_write_data(int data)
{
LCD_checkbusy();
TRISD=0x00;
delay_10us(1);
PORTD=data;
LCD_EN=0;LCD_RS=1;LCD_RW=0; //不始能 数据 写
delay_10us(1);
LCD_EN=1;
delay_10us(1);
LCD_EN=0;
delay_10us(1);
return;
}
void LCD_initial(void) //LCD初始化
{
TRISE=0x00; //PORTE方向输出
TRISD=0x00; //PORTD输出
PORTD=0x00; //PORTD输出全为低
LCD_RS = 0; //数据
delay_ms(400);
LCD_write_command(0x38); //功能设定RE=0基本指令集动作
delay_ms(10);
LCD_write_command(0x38);
delay_ms(10);
LCD_write_command(0x38);
delay_ms(10);
LCD_write_command(0x38);
delay_ms(10);
LCD_write_command(0x08); //显示状态 D=0:整体显示OFF
// C=0:游标OFF
// B=0:游标位置OFF
delay_ms(10);
LCD_write_command(0x01); //清屏
delay_ms(10);
LCD_write_command(0x06); //进入点设定
delay_ms(10);
LCD_write_command(0x0c); //显示状态 D=1:整体显示ON
// C=0:游标OFF
// B=0:游标位置OFF
return;
}
void text_display(unsigned char line,unsigned char column,const unsigned char *s)
{
switch (line)
{
case 1:
line=0x80;
break;
case 2:
line=0x90;
break;
case 3:
line=0x88;
break;
case 4:
line=0x98;
break;
}
LCD_write_command(line+column-1); //显示起始位置
while(*s) LCD_write_data(*s++);
return;
}
void digit_display(unsigned char line,unsigned char column,int data)
{
unsigned char ss[10],*s;
s=ss;
sprintf(s,"%d",data);
switch (line)
{
case 1:
line=0x80;
break;
case 2:
line=0x90;
break;
case 3:
line=0x88;
break;
case 4:
line=0x98;
break;
}
LCD_write_command(line+column-1);
while(*s) LCD_write_data(*s++);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -