wordpress 停用多站点wordpress英文版教程
文章目录
- 一、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的显示相对还是比较简单的;
 - 由于内部封装了字库,所以我们操作起来比较容易;
 - 但是,不可以显示复杂的字符;
 
