嘉兴有能做网站优化google chrome网页版
文章目录
- 一、LCD1602简介
- 二、LCD1602接口原理图及引脚说明
- 1、原理图
- 2、引脚说明
- 三、LCD1602低层时序
- 四、LCD1602高层时序
- 五、一些宏定义
- 总结
一、LCD1602简介
- LCD1602(16x2,显示器显示2排,每排16个字符)。能显示的字符数是32,但是不代表像素数是32,因为一个字符是由多个像素组成的,具体是多少像素我们不用去管,因为LCD1602内置了字库了。
- 带ASCII码字库,不能显示中文。当我们想让LCD1602显示某个ASCII码字符时,只需要将这个字符对应的ASCII码发给LCD1602内部的控制器,控制器就会去查字库得到字模,然后将字模发给内部的驱动器去驱动LCD做显示。
二、LCD1602接口原理图及引脚说明
1、原理图
LCD1602有8根数据线,所以一个时钟可以传输8bit数据。
2、引脚说明
- VCC、GND供电引脚
- BG VCC、BG GND背光的供电
- VO 液晶显示的偏压信号
- RS=1时,D0-D7上传输的是数据
- RS=0时,D0-D7上传输的是命令
- RW=1时,表示我们要读
- RW=0时,表示我们要写
- E=1时,表示使能 enable
- E=0时,表示禁止 disable
三、LCD1602低层时序
1、不忙检测信号
void Lcd1602_Read_Busy(void)
{unsigned char sta = 0;LCD1602_DATAPORT = 0xFF;LCD1602_RS = 0;LCD1602_RW = 1;do{LCD1602_E = 1;sta = LCD1602_DATAPORT;LCD1602_E = 0; }while(sta & 0x80);
}
2、写命令
void Lcd1602_Write_Cmd(unsigned char cmd)
{Lcd1602_Read_Busy();LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DATAPORT = cmd;_nop_();LCD1602_E = 1;_nop_();LCD1602_E = 0;
}
3、写数据
void Lcd1602_Write_Data(unsigned char dat)
{Lcd1602_Read_Busy();LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DATAPORT = dat;_nop_();LCD1602_E = 1;_nop_();LCD1602_E = 0;
}
4、设置坐标
void Lcd1602_Set_Cursor(unsigned char x, unsigned char y)
{unsigned char addr;if(0 == y) //0代表第一行,非0代表第二行addr = 0x00 + x;elseaddr = 0x40 + x;Lcd1602_Write_Cmd(0x80 + addr);
}
四、LCD1602高层时序
1、初始化
void Lcd1602_Init(void)
{Lcd1602_Write_Cmd(0x38); //数据总线8位,显示2行,5*7点阵/字符Lcd1602_Write_Cmd(0x0c); //显示功能开,无光标,光标闪烁Lcd1602_Write_Cmd(0x06); //写入新数据后光标右移,显示屏不移动Lcd1602_Write_Cmd(0x01); //清屏
}
2、写一个字符串
void Lcd1602_Show_String(unsigned char x,unsigned char y,unsigned char *str)
{unsigned char i = 0;if(0 == y) //从第一行开始写{while(*str != '\0'){if(i < 16 - x) //如果字符串不超过16Lcd1602_Set_Cursor(x + i, y);elseLcd1602_Set_Cursor(x + i - 16, y + 1); //如果超过16,继续在第二行写Lcd1602_Write_Data(*str);str++;i++;}}else //从第二行开始写{while(*str != '\0'){if(i < 16 - x)Lcd1602_Set_Cursor(x + i, y); //如果字符串不超过16elseLcd1602_Set_Cursor(x + i - 16, 0); //如果超过16,继续在第一行写Lcd1602_Write_Data(*str);str++;i++;}}
}
五、一些宏定义
sbit LCD1602_RS = P2^6; //数据命令选择
sbit LCD1602_RW = P2^5; //读写选择
sbit LCD1602_E = P2^7; //使能信号#define LCD1602_DATAPORT P0 //宏定义LCD1602数据端口
总结
- LCD1602的显示相对还是比较简单的;
- 由于内部封装了字库,所以我们操作起来比较容易;
- 但是,不可以显示复杂的字符;