一.LCD1602介绍
1.LCD1602 (Liquid Crystal Display
)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符。
2.显示容量:16x2个字符,每个字符为5*7点阵。
二.LCD1602接口介绍
引脚 | 功能 |
VSS | 接地 |
VDD | 电源正极(4.5v-5.5v) |
VO | 对比调节电压 |
RS | 数据/指令选择,1为数据,0为指令 |
RW | 读/写选择,1为读,0为写 |
E | 使能,1为数据有效,下降沿执行命令(使能:相当于遥控器的电源键) |
D0-D7 | 数据输入/输出 |
A | 背灯电源正极 |
K | 背灯电源负极 |
注:当RS=1时,D0-D7为数据,当RS=0时,D0-D7为指令。
三.LCD1602原理图
四.LCD1602内部结构图
DDRAM:在哪个方格子显示数据(RS=0——指令)。
CGRAM(可写)+CGROM(不可写):在方格子显示什么数据(RS=1——数据)。
AC(光标位置):控制当前要写在屏幕对应的那个格子。
DDRAM确定显示位置然后字模库显示想要数据,最后输出在屏幕上。
五.时序结构
RS,RW和D7-D0上面介绍过了,这里介绍E,E下面有一行字母valid Data(有效数据),则E为高电平的时候数据有效,之后在设置为低电平,以便下一次数据设置,因此代码为:
E=1;
Delay1ms();
E=0;
Delay1ms();
所以想写数据跟指令的代码为:
#include#include sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_EN=P2^7; #define LCE_Dataport P0 void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } void LCD_WriteCommand(unsigned char Command)//写指令 { LCD_RS=0; LCD_RW=0; LCE_Dataport=Command; LCD_EN=1; Delay1ms(); LCD_EN=0; Delay1ms(); } void LCD_WriteData(unsigned char Data)//写数据 { LCD_RS=1; LCD_RW=0; LCE_Dataport=Data; LCD_EN=1; Delay1ms(); LCD_EN=0; Delay1ms(); }
六.LCD1602初始化
初始化就是设置LCD1602一开始显示的功能,一般设置为:
void LCD_WriteCommand(unsigned char Command)//写指令 { LCD_RS=0; LCD_RW=0; LCE_Dataport=Command; LCD_EN=1; Delay1ms(); LCD_EN=0; Delay1ms(); } void LCD_Init(void)//初始化 { LCD_WriteCommand(0x38); LCD_WriteCommand(0x0C); LCD_WriteCommand(0x06); LCD_WriteCommand(0x01); }
七.如何表示显示位置?
如果想显示在第一行第二列的话则表示十六进制的0x01,但是显示在那里时,要求最高位D7为高电平,因此从0000 0001变成1000 0001,因此每次高位为0x80,所以就是0x80+0x01=0x81,在代码里面第一行第二行可以直接表示1或2,但是列却要减1以后在化成十六进制,所以第一行第n列则为(0x80 |( lie-1)) ,第二行第n列则表示(0x80 |(lie-1)+0x40),第二行加上0x40是因为第二行开始就是40H,而不是00H,下面代码展示。
#include#include sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_EN=P2^7; #define LCE_Dataport P0 void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } void LCD_WriteCommand(unsigned char Command)//写指令 { LCD_RS=0; LCD_RW=0; LCE_Dataport=Command; LCD_EN=1; Delay1ms(); LCD_EN=0; Delay1ms(); } void LCD_Setcursor(unsigned char line,unsigned char column)//行,列 { if(line==1)//设置光标位置 { //第一列是数字1,但是位置是0x00,要把数字1转换0x00,就把数字1-1就0,所以转十六进制就是0x00 LCD_WriteCommand(0x80|(column-1)); } else { //第二行的第一列是从0x40开始,第二列是0x41,相当于0x40+0x01,0x01就是与上面一致 LCD_WriteCommand(0x80|(column-1)+0x40); } }
八.如何表示显示的数据?
如果想显示字符A,则为0100 0001,化为十六进制就是0x41,在对照ASCLL码中的A刚刚好是0x41,因此想写数据直接'A',就可以了。
九.LCD1602总代码
下图对应最下面代码的LCD—Shownum
#include#include sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_EN=P2^7; #define LCE_Dataport P0 void Delay1ms() //@11.0592MHz { unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } void LCD_WriteCommand(unsigned char Command)//写指令 { LCD_RS=0; LCD_RW=0; LCE_Dataport=Command; LCD_EN=1; Delay1ms(); LCD_EN=0; Delay1ms(); } void LCD_WriteData(unsigned char Data)//写数据 { LCD_RS=1; LCD_RW=0; LCE_Dataport=Data; LCD_EN=1; Delay1ms(); LCD_EN=0; Delay1ms(); } void LCD_Init(void)//初始化 { LCD_WriteCommand(0x38); LCD_WriteCommand(0x0C); LCD_WriteCommand(0x06); LCD_WriteCommand(0x01); } void LCD_Setcursor(unsigned char line,unsigned char column) { if(line==1)//设置光标位置 { //第一列是数字1,但是位置是0x00,要把数字1转换0x00,就把数字1-1就0,所以转十六进制就是0x00 LCD_WriteCommand(0x80|(column-1)); } else { //第二行的第一列是从0x40开始,第二列是0x41,相当于0x40+0x01,0x01就是与上面一致 LCD_WriteCommand(0x80|(column-1)+0x40); } } void LCD_Showchar(unsigned char line,unsigned char column,unsigned char Char)//line行,column列,Char字符 {//显示一个字符 LCD_Setcursor(line,column); LCD_WriteData(Char); } void LCD_Showstring(unsigned char line,unsigned char column,unsigned char *string)//line行,column列,string字符串 {//显示字符串,字符串直接等于指针,不用数组形式等于字符串,在等于指针形式,那传给指针的就是字符串的第一个字符的地址,然后string【i】一直往下就可以知道字符串,数组是连续的,如果baby的b在第一行第一列,那a就会在第一行,第二列。 unsigned char i; LCD_Setcursor(line,column); for(i=0;string[i]!='\0';i++) { LCD_WriteData(string[i]);//字符串本身就是地址,所以传进来的字符串用指针string来接 } } int LCD_Pow(int X,int Y)//平方函数,列如:10^2 { unsigned char i; int Result=1; for(i=0;i 0;i--) { //+'0'是因为number/LCD_Pow(10,i-1) %10对应ASCLL码里面的十进制,想要字符的话得从0x40开始,然后加上十进制化成十六进制,0x40就是'0' LCD_WriteData('0'+number/LCD_Pow(10,i-1) %10); } } void LCD_Showsignednum(unsigned char line,unsigned char column,int number,unsigned char length) { unsigned char i; unsigned int Number1; LCD_Setcursor(line,column); if(number>=0) { LCD_WriteData('+'); Number1=number; } else { LCD_WriteData('-'); Number1=-number; } for(i=length;i>0;i--) { LCD_WriteData('0'+Number1/LCD_Pow(10,i-1) %10); } } void LCD_Showhexnum(unsigned char line,unsigned char column,unsigned int number,unsigned char length) { unsigned char i; unsigned char singlenumber; LCD_Setcursor(line,column); for(i=length;i>0;i--) { singlenumber=number/LCD_Pow(16,i-1) %16; if(singlenumber<10) { LCD_WriteData('0'+singlenumber); } else { LCD_WriteData('A'+singlenumber-10); } } } void main() { LCD_Init(); LCD_Showchar(2,2,'I'); LCD_Showchar(2,4,'L'); LCD_Showchar(2,5,'O'); LCD_Showchar(2,6,'V'); LCD_Showchar(2,7,'E'); LCD_Showchar(2,9,'Y'); LCD_Showchar(2,10,'O'); LCD_Showchar(2,11,'U'); LCD_Shownum(1,8,520,3); LCD_Shownum(1,11,1314,4); LCD_Showsignednum(2,12,-8,1); LCD_Showhexnum(2,15,0xA6,2); while(1) { } }
猜你喜欢
- 11天前(鄂尔多斯航空公司客服电话)架起“北方之路” ,中国联合航空带您飞向鄂尔多斯重回1倍速
- 11天前(上海文旅产业发展高峰论坛)《上海打造文旅元宇宙新赛道行动方案》发布
- 11天前(安徽民宿发展报告)首届安徽省乡村民宿创意设计大赛启动
- 11天前(瑞士大酒店-自助餐怎么样)瑞意心旅,以食为先 瑞士酒店开启全新"瑞士早餐计划"
- 11天前(七尚酒店百度百科)Lohkah七尚酒店首度开创充满新知的闽地研学旅程
- 11天前(河南省文旅大会精神)2025河南省文化旅游发展大会新闻发布会在郑州召开
- 11天前(“清透会呼吸”轻松拿捏春日出游氛围感)“清透会呼吸”轻松拿捏春日出游氛围感
- 11天前(苏梅岛普吉岛哪个好玩)苏梅岛金普顿基塔蕾度假酒店推出家庭度假套餐
- 11天前(星级饭店的发展困境)星级饭店转型之路:从市场逻辑到行业实践的深度探索
- 11天前(新西兰登陆《我的世界》!全球首个目的地游戏模组震撼上线)新西兰登陆《我的世界》!全球首个目的地游戏模组震撼上线
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章