【51单片机】(手把手教你)1602液晶屏-基础篇
来源:互联网 发布:js拉链是哪个国家的 编辑:程序博客网 时间:2024/04/28 07:39
1602液晶简介
1602液晶也叫1602字符型液晶,16x02,每行16个字符显示两行。它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
#度娘告知
引脚接口说明
1602液晶上有16个引脚,上面依次标了上述符号,与单片机上的接口依次对应连接即可,如图:
原理图
想知道如何操作液晶屏就需要看清楚自己单片机上与液晶屏连接引脚的控制原理图,我使用的是郭天祥的51单片机中的原理图。线上标的相同符号的地方是连在一起的。
1.直接接地
2.接VCC
3.接在一个滑动变阻上再与地相接 。VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
4.接RS->P3.5 。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
5.直接接地(因为我们一般都只让液晶屏显示即写入,所以这个单片机原理图直接接地)
6.LCDEN使能端->P3.4。当E端由高电平跳变成低电平时,液晶模块执行命令。
7-14.数据写入->P0
15.接一个电阻后(电阻为了限流,延长LCD的使用寿命也防止烧坏背光灯)与VCC连接(液晶屏背光正极)
16.直接接地(液晶屏背光负极)
1602 11条指令
指令1:清屏指令。
(1)清楚液晶显示器,即将DDRAM的内容全部填入空白的ASCII码20H
(2)地址计数器(AC)的值设为0
(3)光标复位到地址00H位置(显示器的左上方)
指令2:光标复位指令。
(1)光标返回地址00H
(2)AC值设为0
(3)DDRAM的内容不变
指令3:光标和显示模式设置。设定每次输入1位数据后光标的移位方向,并且设定输入后字符是否移动。
I/D(光标移动方向): 高:右移 低:左移
S(屏幕上所有文字是否移动):高 :有效右移 低:无效
指令4:显示开关控制。控制显示器开/关、光标显示/关闭以及光标是否闪烁
D(控制整体显示的开与关):高:开显示 低:关显示
C(控制光标的开与关): 高:有光标 低:无光标
B(控制光标是否闪烁): 高:闪烁 低:不闪烁
指令5:光标或显示移位。
指令6:功能设置命令。设定数据总线位数、显示的行数及字型。
DL(数据总线位数):高:8 低:4
N(显示行数) :高:2 低:1
F(显示点阵类型) :高:5*7点阵 低:5*10点阵
指令7:设定CGRAM地址指令。
设定下一个要存入数据的CGRAM的地址。
指令8:设定DDRAM地址指令。
设定下一个要存入数据的DDRAM的地址。
指令9:读取忙信号或AC地址指令。
(1)读取忙信号BF的内容
BF(液晶显示器是否忙):高:忙,暂时无法接收单片机送来的数据或指令 低:可接收
(2)读取地址计数器(AC)的内容
指令10:数据写入DDRAM或CGRAM指令。
(1)将字符码写入DDRAM,以使液晶显示屏显示出相对于的字符
(2)使用者自己设计的图形存入CGRAM
指令11:从CGRAM或DDRAM读出数据的指令。读取DDRAM或CGRAM中的内容。
时序图
代码
/* 用液晶1602以从右侧移入方式第一行显示“Hello everyone!” 第二行显示“Welcome to my blog!”*/#include <reg52.h>#include <string.h> //strlen包含的头文件#define uint unsigned int#define uint8 unsigned charuint8 code table[]="Hello everyone!";uint8 code table1[]="Welcome to my blog!";sbit lcden=P3^4;sbit lcdrs=P3^5;sbit dula=P2^6;sbit wela=P2^7;uint8 num;void delay(uint z);void write_com(uint8 com);void write_data(uint8 date);void init();void Write1602_Str(uint addr,uint length,uint *pbuf);void main(){init();Write1602_Str(0x80+0x10,strlen(table),table); //Hello everyone!Write1602_Str(0x80+0x50,strlen(table1),table1); //Welcome to my blog! while(1){write_com(0x18);delay(200); //移动速度,可自定} }void delay(uint z){uint i,j;for(i=z;i>0;i--)for(j=0;j<921;j++);}void write_com(uint8 com){lcdrs=0; //RS=0->指令 // R/W我的单片机上引脚直接接地了所以不用设置delay(1); //tsp1P0=com; //DB0-DB7delay(1); //tsp2lcden=1; //tRdelay(1); //tpWlcden=0; //tF、tHD1、tHD2}void write_data(uint8 date){lcdrs=1; //RS=1->数据delay(1);P0=date;delay(1);lcden=1;delay(1);lcden=0;}void init(){dula=0; //段选位关闭,因为P0口同时也是控制数据管的口wela=0; //同上lcden=0; //使能关(操作之前看时序图都需要E开始是0后来变为1)write_com(0x38); //设置16*2显示,5*7点阵,8位数据口write_com(0x0e); //设置开显示,不显示光标write_com(0x06); //写一个字符后地址指针加1write_com(0x01); //显示清0,数据指针清0}void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf){ uint8 i; write_com(addr); for(i=0;i<length;i++) write_data(pbuf[i]); }
- 【51单片机】(手把手教你)1602液晶屏-基础篇
- 【51单片机】(手把手教你)串口通信-基础篇
- 【51单片机】(手把手教你)串口通信-基础篇
- 手把手教你学单片机--51单片机C语言开发
- 手把手教你学单片机--51单片机C语言开发
- 《手把手教你学51单片机》之十三------1602液晶与串口的应用实例
- protel99se进阶视频教程(手把手教你画51单片机开发板)
- 51单片机学习笔记【五】——1602液晶屏
- 51单片机初学(二)液晶屏时钟,并保存数据
- 《手把手教你学51单片机》之十八----RS485通信与Modbus协议
- 《手把手教你学51单片机-C语言》之十一--------UART串口通信
- 手把手教你使用PIC单片机驱动继电器
- 从业将近十年!手把手教你单片机程序框架
- 手把手教你学习网络编程(基础篇)
- git基础篇--手把手教你使用Git
- Android自学历程—手把手教你使用OkHttp(基础篇)
- 手把手教你 ----JNI的基础实现
- 单片机驱动段式液晶屏
- linux 信号 signal函数
- LeetCode Reverse Linked List II
- 素数的判断
- jQuery使用Ajax
- Codevs_P1493 糖果(DP)
- 【51单片机】(手把手教你)1602液晶屏-基础篇
- [Maven实战](8)依赖配置与依赖范围
- x265-1.8版本-common/framedata.h注释
- DataTables分页表格
- perl weixin获取验证码
- poj3411
- HDU 1009:FatMouse' Trade【贪心】
- HDU1006
- 1144数星星