📄 lcd1602.h
字号:
/**********************************************************
* LCD1602驱动程序<lcd1602.h>
* 程序功能 : 实现LCD1602的显示驱动
* 调用说明 : 用户应调用LCD1602的中层驱动函数,避免使用底层驱动
* 作 者 : qf and xiaochun ; At Mar,24,2006, 23:15
**********************************************************/
#define CLR_SCREEN 0//清屏
#define DISP_ON 1//显示开
#define DISP_OFF 2//显示关
#define CURSOR_ON 3//光标开
#define CURSOR_OFF 4//光标关
#define CURSOR_FLASH_ON 5//光标闪烁开
#define CURSOR_FLASH_OFF 6//光标闪烁关
#define PICTURE_LEFT 7//画面左移
#define PICTURE_RIGHT 8//画面右移
#define CURSOR_LEFT 9//光标左移
#define CURSOR_RIGHT 10//光标右移
//LCD1602控制端口与数据端口定义
#define LCD1602_RS PORTB_BIT0
#define LCD1602_RW PORTB_BIT1
#define LCD1602_EN PORTB_BIT2
#define LCDIO PORTA //LCDIO为数据端口
//LCD1602用户控制命令定义
/**********************************************************
* 底层驱动
* 包含文件 : void LCD_en_command(unsigned char command);
* //写命令函数:向寄存器写入控制字
* void LCD_en_dat(unsigned char dat);
* //写数据函数:向寄存器写入数据
* void LCD_delay();
* //LCD命令,数据写入延时3-5ms
**********************************************************/
//LCD命令,数据写入延时,3-5ms
void LCD_delay(){
int i;
for(i=0;i<10;i++)
{ int j;
j=0x1996;
while(j>0) j--;
}
}
//*********************************************************
//写命令函数:向寄存器写入控制字
//参数:command- 控制字
void LCD_en_command(unsigned char command){
LCD_delay(); //延时一段时间,5ms
LCD1602_RW=0; //写命令时,R/W为低电平
LCD1602_RS=0; //写入指令,RS为低电平
LCD1602_EN=1; //置高使能线
LCDIO=command; //接收命令字并送到数据总线上
LCD1602_EN=0; //在使能线的下降沿写入数据
}
//*********************************************************
//写数据函数:向寄存器写入数据
//参数:dat- 待要显示数据
void LCD_en_dat(unsigned char dat)
{
LCD_delay(); //延时一段时间
LCD1602_RW=0; //写指令时,R/W为低电平
LCD1602_RS=1; //写入数据,RS为高电平
LCD1602_EN=1; //置高使能线
LCDIO=dat; //接收数据并送到数据总线上
LCD1602_EN=0; //在使能线的下降沿写入数据
}
/**********************************************************
* 中层驱动
* 包含文件 : void LCD_set_xy(unsigned char x, unsigned char y);
* //设置显示坐标:设置字符的显示位置,行、列坐标
* void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)
* //写字符串函数:向液晶写入字符串
* void LCD_init(void)
* //LCD初始化函数
* void LCD_cmd(unsigned char cmd)
* //LCD中层控制函数
**********************************************************/
//LCD初始化函数
void LCD_init(void)
{
LCD_en_command(0x38); //设置为8位数据传送模式
LCD_en_command(0x0c); //开显示
LCD_en_command(0x01); //清屏,准备
}
//*********************************************************
//LCD中层控制函数
void LCD_cmd(unsigned char cmd){
switch(cmd){
case CLR_SCREEN :LCD_en_command(0x01);break;
case DISP_ON :LCD_en_command(0x0c);break;
case DISP_OFF :LCD_en_command(0x08);break;
case CURSOR_ON :LCD_en_command(0x0e);break;
case CURSOR_OFF :LCD_en_command(0x0c);break;
case CURSOR_FLASH_ON :LCD_en_command(0x0f);break;
case CURSOR_FLASH_OFF:LCD_en_command(0x0e);break;
case PICTURE_LEFT :LCD_en_command(0x18);break;
case PICTURE_RIGHT :LCD_en_command(0x1c);break;
case CURSOR_LEFT :LCD_en_command(0x10);break;
case CURSOR_RIGHT :LCD_en_command(0x14);break;
default: break;
}
}
//*********************************************************
//设置显示坐标:设置字符的显示位置,行、列坐标
//参数: x-列坐标,y-行坐标
void LCD_set_xy(unsigned char x, unsigned char y)
{
unsigned char address;
if (x == 0) //判断行
address = 0x80 + y; //设置列坐标
else
address = 0xc0 + y;
LCD_en_command(address); //将地址写入寄存器
}
//写字符串函数:向液晶写入字符串
//参数:x-列坐标,y-行坐标,*s-将要显示的字符串数据
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)
{
LCD_set_xy(x,y); //首先设置显示坐标
while (*s) //判断是否结束
{
LCD_en_dat(*s);
s++;
}
}
/*
LCD_init();
LCD_cmd(CLR_SCREEN);
LCD_cmd(DISP_ON);
LCD_cmd(CURSOR_OFF);
LCD_cmd(CURSOR_FLASH_OFF);
LCD_write_string(0,0,p);
LCD_cmd(CLR_SCREEN);
LCD_write_string(1,0,p);
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -