第九节、I602液晶显示原理及实现
1、1602LCD最简单液晶工作原理、
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别
1602字符型液晶也叫1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。字符型液晶,能够同时显示16x02(2行,一行16字符)即32个字符。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
1.1、1602LCD主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
1.2、引脚功能说明
1602LC采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明所示:
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。对比度调整端,若仅仅接地,对比度会很高,常常接上一个几K的电位器或可变电阻来调节对比度以实现理想的显示效果。
第4脚:RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW:读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙(一般对于单纯的LCD显示只用到写操作)。
第6脚:E:使能信号,当E端由高电平变为低电平时,液晶模块执行命令。
第7~14脚:D0-D7:8个数据I/O口(双向数据线)。
第15脚: BG_VCC、背光电源正极
第16脚:BG_GND、是背光电源负极。
1.3、基本操作时序
1.4、液晶指令设置和初始化
1.4.1、显示模式设置
1.4.2、显示开关及光标设置:(初始化)
1.4.3、数据指针设置
数据首地址为80H,
第一行0-27H,
第二行40H-67H(当第一行装不下时,就需要第二行,但是需要设置数据指针0x80+0x40)
1.4.4、其他设置
1.4.5、显示地址
1602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址如下
1.5、液晶储存器结构
2、简单设计程序操作液晶
2.1、程序一
显示:I like mcu!”; 和www.stu.com”;直接显示液晶上
#include #define uchar unsigned char #define uint unsigned int sbit lcden=P3^4; sbt lcdrs=P3^5; sbit dula=P2^7; uchar code table[]=“I like mcu!”; uchar code table1[]=“www.stu.com”; uchar num; void main() { int () for(num=0;num<11;num++)//利用循环调用数组显示 { write_data(table[num]);//显示:I like mcu! delay(20); } write_com(1);//清屏指令,上面的一行会显示出来后立刻消失 write_com(0x80+0x40+0x03);//设置数据指针,显示第二行! +0x03:表示向后移动三字符 for(num=0;num<13;num++)//利用循环调用数组显示 { write_data(table1[num]);//显示: www.stu.com delay(20); } //write_data(‘1’);//显示:1或者输入按照CGROM中对应的码 //delay(20); //write_data(‘B’);//显示B while(1) } void write_com(ucahr com)//写命令子函数 { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(ucahr data)//写数据子函数 { lcdrs =1; P0=data; delay (5); lcden =1; delay (5); lcden =0; } void delay (unit z)//延迟函数 { unit x, y; for (x=z; x>0; x++) for (y=110; y>0; y++) } void init ()//初始化函数 { dula=0; wela=0 lcden=0; write_com(0x38); write_com(.0x0e); write_com(.0x06); write_com(.0x01); write_com(.0x80); } 2.2、程序二 显示:从右侧平移到液晶上显示出来。 #include #define uchar unsigned char #define uint unsigned int sbit lcden=P3^4; sbt lcdrs=P3^5; sbit dula=P2^7; uchar code table[]=“I like mcu!”; uchar code table1[]=“www.stu.com”; uchar num; void main() { int () for(num=0;num<11;num++)//利用循环调用数组显示 { write_data(table[num]);//显示:I like mcu! delay(20); } write_com(0x80+0x53);//设置数据指针,指定写入位置!!!显示第二行! +0x53:第二行从53那个字符开始写入。 for(num=0;num<13;num++)//利用循环调用数组写入字符 { write_data(table1[num]);//显示: www.stu.com字符 delay(20); } for(num=0;num<16;num++)//左移动循环 { write_com(0x18);//左移指令0x18 0001 1000 delay(200); } //write_data(‘1’);//显示:1或者输入按照CGROM中对应的码 //delay(20); //write_data(‘B’);//显示B while(1) } void write_com(ucahr com)//写命令子函数 { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(ucahr data)//写数据子函数 { lcdrs =1; P0=data; delay (5); lcden =1; delay (5); lcden =0; } void delay (unit z)//延迟函数 { unit x, y; for (x=z; x>0; x++) for (y=110; y>0; y++) } void init ()//初始化函数 { dula=0; wela=0 lcden=0; write_com(0x38); write_com(.0x0e); write_com(.0x06); write_com(.0x01); write_com(.0x80); } 3、如何开始对一个没有任何概念的芯片开始单片机的操作 1、写命令子函数 2、写数据子函数 3、初始化子函数 4、main第一行,第二行显示,移动
上一篇:单片机基础(七):串行通信概念及其工作原理
下一篇:80c51串行口内部结构介绍
推荐阅读最新更新时间:2024-11-11 12:39
设计资源 培训 开发板 精华推荐
- 福禄克有奖直播|数据采集器的基础知识及其应用和校准
- Littelfuse【智能家居的电路保护方案】在线研讨会 11月22日10点 强势登场!预报名、参与研讨会赢好礼!
- EEworld独家原创视频:大话TI CC2650,邀你来看!
- 英飞凌BMS解决方案,为电动汽车和储能系统保驾护航!
- 下载、答题赢好礼:使用Mentor的Xpedition Layout高效设计PCB
- 【XILINX 主题分享月】 设计工具资料大搜集!!!
- TI有奖直播|借助Sitara™ AM263x MCU 创造电气化的未来
- 想要更直观的了解5G?观看罗德与施瓦茨主题演讲,填问卷赢好礼!
- 了解 MPS 隔离解决方案,答题赢【华为蓝牙无线耳机、小米氮化镓充电器】!