lcd1602时序
LCD1602数字时钟
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
下面是单片机的主要发展趋势。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
纵观自己所处的这个快速发展的信息时代,数字电路的技术已广泛应用于各个领域中,它们无处不在我们的身边,我们通常所使用的手机,数码相机,MP3,MP4等电子产品都关联到数字电路的应用,而我想从自己所学专业的某一点出发,来分析数字电路在生活中的广泛应用。
由于时间在日常生活中的重要性,所以以时间为媒介的电子钟就被选为我这次论文选题的目标。
单片机简介单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
LCD1602知识总结
LCD1602写操作时序:LCD1602读操作时序:1602采用标准的16脚接口,其中: 第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚1602液晶模块内部的控制器共有11条控制指令:它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效指令4:显示开关控制。
D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令DL:高电平时为8位总线,低电平时为4位总线N:低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器RAM地址设置DB5DB4DB3 为字符号,也就是你将来要显示该字符时要用到的字符地址。
(000~111)(能定义八个字符)DB2DB1DB0为行号。
LCD1602数据手册
LCD1602数据⼿册1602LCD主要技术参数:显⽰容量:16×2个字符芯⽚⼯作电压:4.5—5.5V⼯作电流:2.0mA(5.0V)模块最佳⼯作电压:5.0V字符尺⼨:2.95×4.35(W×H)mm引脚功能说明1602LCD采⽤标准的14脚(⽆背光)或16脚(带背光)接⼝,各引脚接⼝说明如表10-13所⽰:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显⽰偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接⼝说明表第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显⽰器对⽐度调整端,接正电源时对⽐度最弱,接地时对⽐度最⾼,对⽐度过⾼时会产⽣“⿁影”,使⽤时可以通过⼀个10K 的电位器调整对⽐度。
第4脚:RS为寄存器选择,⾼电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,⾼电平时进⾏读操作,低电平时进⾏写操作。
当RS和R/W共同为低电平时可以写⼊指令或者显⽰地址,当RS 为低电平R/W为⾼电平时可以读忙信号,当RS为⾼电平R/W为低电平时可以写⼊数据。
第6脚:E端为使能端,当E端由⾼电平跳变成低电平时,液晶模块执⾏命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表10-14所⽰:序号指令RS R/W D7D6D5D4D3D2D1D01清显⽰00000000012光标返回000000001*3置输⼊模式00000001I/D S4显⽰开/关控制0000001D C B5光标或字符移位000001S/C R/L**6置功能00001DL N F**7置字符发⽣存贮器地址0001字符发⽣存贮器地址8置数据存贮器地址001显⽰数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或10要写的数据内容DDRAM)11读出的数据内容11从CGRAM或DDRAM读数表10-14:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
LCD1602中文资料(使用说明)
z 指令寄存器(IR)和数据寄存器(DR) 本模块内部具有两个 8 位寄存器:指令寄存器(IR)和地址寄存器(DR)。用户可以通过 RS 和 R/W
输入信号的组合选择指定的寄存器,进行相应的操作。下表中列出了组合选择方式。
VIL1
tH
VIH1 VIL1
Valid data
tcycE
VIH1 VIL1
项目 E 周期 E 脉宽(高电平) E 上升/下降时间 地址设置时间(RS,R/WtoE) 地址保持时间 数据设置时间 数据保持时间
符号 tcycE PWEN tEr,tEf tAS tAH tDSW tH
条件
Vdd=5V±5% Vss=0V Ta=25℃
写操作时下降沿有效数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道数据输入输出口mpu与模块之间的数据传送通道背光的正端5v背光的负端0v4rs5rw6e7db08db19db210db311db412db513db614db74位方式通讯时不使用db0db315a16k四操作时序图1写操作时序通用1602液晶显示模块使用手册email
-6-
z 本模块采用低功耗 CMOS 设计
通用 1602 液晶显示模块使用手册
☆☆☆☆ Email: support@
1 软硬件注解 1-1 模块组件内部结构
LCD1602的工作时序
首先要了解LCD1602的工作时序部分引脚功能:
信号真值表:
由此可得:
一、写指令函数
void write_com(unsigned char com) {
R/W=0; //0:写
RS=0; //0:指令
E=1; //下降沿写数据
LCD_DATA_PIN=com;
E=0;
}
二、写数据函数
void write_data(unsigned char data)
{
R/W=0; //0:写
RS=1; //1:函数
E=1; //下降沿写数据 LCD_DATA_PIN=data; E=0;
}
指令集
由上面那些资料我们就可以写出驱动LCD1602的程序,下面我一一讲解:
由LCD1602指令集的功能设置我们可知它有两种驱动模式8位数据接口驱动和四位数据接口。
由于AVR单片机IO口有限我就讲四位数据接口驱动模式,由于我们很少读LCD1602里面的数据所以我们可以把R/W引脚直接下拉到地,使LCD1602一直处于写状态,没了读状态,判断不了busy情况,只能用延时来等一下,这样又可以省一个IO口,所以共用六个IO口。
LCD1602液晶显示屏幕时序图分析
LCD1602液晶显示屏幕时序图分析
这段时间里回头看看所学的单片机知识,发现一个很严重的问题看不懂时序图!研究了一上午说说自己的结果,欢迎各位拍砖和指点!
图7.2.2是1602液晶写的时序,时序图从上到下看、从左到右看。
先说说时序图的规则:
高低电平上面的线是高电平,下面的线是低电平,如果高低交叉可能会产生高电平或低电平。
电平的走向看到低电平和高电平交叉产生电平的变化,
看到红圈花的部分,竖线那里有条横线,代表着这个选用的是高电平。
还有一种情况
这种情况是高低电平一起变化,看图中横线标出了电平的变化。
现在我们了解完了规则,现在分析时序图
原图我进行了标号。
时序图从上往下看,从左往右看
1 rs 为高电平 rw 为低电平
2 载入数据db
3 始能e由低电平变为高电平
4和5 始能e由高电平转化为低电平最后数据写完。
这个就是我的理解,如果有错误或不对的地方欢迎指正。
液晶LCD1602使用手册(优选.)
珠联璧合
xlzhu@
液晶显示模块 1602 使用手册
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
� 双行显示(N=1) 双行显示时,DDRAM 地址范围是 00H~27H 和 40H~67H。
6.6 字符发生器 CGROM
字符产生器 CGROM 产生 5×8 点阵或 5×10 点阵字符字模。字符字模是与显示字符字模
ccoomm液晶显示模块1602使用手册液晶显示模块1602使用手册液液晶晶显显示示模模块使用用手手册册项目符号最小值最大值单位使能e时钟周期tcyce1000使能e脉宽pweh450使能e上升下降沿时间tt25eef地址建立时间rsrw到tas60纳秒nse地址保持时间tah20数据建立时间tdsw195数据保持时间th10525255
7.7 设置 CGRAM 地址指令
RS R/W D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
1
S/C R/L
―
―
� 光标或显示移位指令可使光标或显示在没有读写数据的情况下,向左或向右移动。
10
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
珠联璧合
xlzhu@
液晶显示模块 1602 使用手册
列驱动器与控制器配合使用,接受来自控制器的振荡、帧同步输出、串行输出的数据和 移位所存脉冲,产生列 segment 交流扫描驱动信号。
控制器接受来自微控制器的指令和数据,控制着整个模块的工作。它由 CGROM、 CGRAM 和 DDRAM 等字符存储区域以及与微控制器和列驱动器的 I/O 接口、指令寄存和译
LCD1602液晶显示完全资料
LCD1602液晶显示完全资料0x18 光标和显示一起向左移动4.显示地址:LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
5.读写时序:时序图1602手册中有,这里不引用了。
时序图很重要,编程就是根据时序图设置寄存器,让LCD工作。
二、LCD1602程序编写流程:LCD1602在了解完以上信息后便可以编写,这里我们把程序分为以下几步:1.定义LCD1602管脚,包括RS,R/W,E。
这里定义是指这些管脚分别接在单片机哪些I/O口上。
现举例如下:sbit EN=P3^4;sbit RS=P3^5;sbit RW=P3^6;2.显示初始化,在这一步进行初始化及设置显示模式等操作,包括以下步骤:设置显示方式延时清理显示缓存设置显示模式通常推荐的初始化过程如下:延时15ms写指令38H延时5ms写指令38H延时5ms写指令38H延时5ms注:以上写38H指令可以看情况省略1~2步(以上都不检测忙信号)(以下都要检测忙信号)写指令38H写指令08H 关闭显示写指令01H 显示清屏写指令06H 光标移动设置写指令0cH 显示开及光标设置3.设置显示地址(写显示字符的位置)。
4.写显示字符的数据。
三、LCD1602各子程序模块及主程序编写:现在按照上面编写程序的流程,给出各子程序模块及主程序的例子。
1.头文件,宏定义,定义管脚等:#include<reg52.h>#include <string.h>#define uchar unsigned char#define uint unsigned intsbit EN=P3^4;sbit RS=P3^5;sbit RW=P3^6;uchar code table0[]={"QQ:545699636"}; //此条语句为显示字符串时定义的字符串数组2.LCD1602基本初始化子程序:void LCD1602(){EN=0;RS=1;RW=1;P0=0xff; //这里P0为与LCD D0~D7相连的I/O口}3.读忙子程序:void read_busy(){P0=0xff;RS=0;RW=1;EN=1;while(P0&0x80); //P0和10000000相与,D7位若不为0,停在此处EN=0; //若为0跳出进入下一步;这条语句的作用就是检测D7位} //若忙在此等待,不忙跳出读忙子程序执行读写指令4.写指令写数据子程序:void write(uchar i,bit j){read_busy();P0=i; //其中i=0,写指令;i=1,写数据;RS=j;RW=0;EN=1;EN=0;}5.延时子程序:void delay(uint c) //功能为提供初始化等其他子程序中的延时1xc MS{uint a,b;for(a=0;a<c;a++)for(b=0;b<120;b++);}6.LCD1602初始化子程序:void init() //完全按照要求初始化流程来,中间省略了一步写指令38H{delay(15);write(0x38,0);delay(5);write(0x38,0);write(0x08,0);write(0x01,0);write(0x06,0);write(0x0c,0);}7.显示单个字符子程序:void display_lcd_byte(uchar y,uchar x,uchar z) //Y=0,1(起始行)X=0~15(起始列)Z=想写字符的ASCII码{if(y) //是否显示在第二行(若在第一行Y=0,不进入IF语句,若在第二行,进入IF语句{x+=0x40; //第二行起始地址加上列数为字符显示地址}x+=0x80; //设置数据指针位置write(x,0);write(z,1); //写入数据}8.显示字符串子程序:void display_lcd_text(uchar y,uchar x,uchartable[]) //Y,X同上字符显示,table[]字符串数组{uchar z=0;uchar t;t=strlen(table)+x; // 求得字符串长度加上起始列位置 while(x<t) //功能为LCD显示到字符串最后一个字符,防止字符串{ //没有16个字符,从而不够位产生乱码; display_lcd_byte(y,x,table[z]); //逐位显示数组内字符x++;z++;}}9.主程序:主程序里除了放入初始化程序外就是加入自己编写的显示子程序,根据你所要的不用功能可以编写各种类型的显示子程序,这里不做详细介绍,以下举例为显示一个字符和显示字符串的显示子程序。
1602最详细资料
一、关于LCD1602:在编写LCD1602程序前,我们必须了解其手册上一些非常重要的信息,如果这些信息不能理解透彻,编程可能会遇到或多或少的问题,在此先大致归纳几点。
1.管脚:1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
2.操作时序:信号真值表RS R/W EN 操作说明0 0 1→0 写入指令D0~D70 1 1 读出的D0~D7状态字1 0 1→0 写入D0~D7数据1 1 1 读出D0~D7数据注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操作;所以对控制器每次进行读写操作前,必须进行读写检测。
(即后面的读忙子程序)3.指令集:LCD_1602 初始化指令小结:0x38 设置16*2显示,5*7点阵,8位数据接口0x01 清屏0x0f 开显示,显示光标,光标闪烁0x08 关闭显示0x0e 开显示,显示光标,光标不闪烁0x0c 开显示,不显示光标0x06 地址加1,当写入数据的时候光标右移0x02 地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中断内容不变0x18 光标和显示一起向左移动4.显示地址:LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
5.读写时序:时序图1602手册中有,这里不引用了。
LCD1602中文资料程序和使用说明
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
lcd1602指令解读及基本程序
writecmd(0x38); //功能设定8位数据传输双行显示设置工作方式:0x28=4位总线字符两行显示,0x38=8位总线字符两行显示
writecmd(0x0c); //显示器开关
writecmd(0x01); //清屏
writecmd(0x06); //echaracter(1,0,0x80,yue);
displyonecharacter(1,0,0xc0,ri);
/*
HD44780内置了DDRAM、CGROM和CGRAM。
CGROM和CGRAM就是内置192个常用字符产生器,用户自定义的字符产生器RAM
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
显示位置: 1 2 3 4 5 6 7 8 ..... 40
}
void location(unsigned char x,unsigned char y) //坐标函数
{
unsigned char temp;
temp=x&0x0f; //只要x数据的后四位
if(y)
{
temp=temp|0x40;
} //第一行为0第二行为1如果y=1则地址加0x40
temp|=0x80; //DDRAM地址的命令DB7为一
写指令输入:RS=0,RW=0,E=下降沿脉冲,DB0~DB7=指令码输出:无
写数据输入:RS=1,RW=0,E=下降沿脉冲,DB0~DB7=数据输出:无
读状态输入:RS=0,RW=1,E=1输出:DB0~DB7=状态字
读数据输入:RS=1,RW=1,E=1输出:DB0~DB7=数据/
*/
/*
lcd_1602指令:
STC89CRC液晶LCD1602显示时间程序
液晶显示时间程序,代码仅有90行,不知道还有更少的吗,不足之处请指出来,在此感谢!#include <reg52.h>#define DATA_IO P2 //定义数据口sbit RS =P1^7; //定义1602功能引脚sbit RW =P1^6;sbit EN =P1^5;unsigned int t,sec=0,min=0,hour=0;unsigned char time_dis[] = "Time:00:00:00";void delay(unsigned int n) //延时函数{while(n--);}void write_cmd(unsigned char cmd) //写指令{RS = 0;RW = 0;DATA_IO = cmd; //RS和RW都为低电平时,写入指令EN = 1;delay(50);EN = 0; //EN下降沿代表写状态}void write_data(unsigned char dat) //写数据{RS = 1;RW = 0;DATA_IO = dat; //RS为高、RW为低时,写入数据EN = 1;delay(50);EN = 0; //用EN输入一个高脉冲}void write_string(unsigned char *s) //写字符串{while(*s!='\0')write_data(*s++);}void write_buff() //填写缓冲区{time_dis[12] = sec % 10 + 48; //+48表示将这个数转为char型。
0的ASCLL码是48time_dis[11] = sec / 10 + 48;time_dis[9] = min % 10 + 48;time_dis[8] = min / 10 + 48;time_dis[6] = hour % 10 + 48;time_dis[5] = hour / 10 + 48;write_cmd(0x80);write_string(time_dis);}void Init() //液晶初始化{write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x80);write_cmd(0x01);}void main(){TMOD = 0x01; //设定定时方式1TH0 = (65535-46080)/256; //装初值,晶振使用11.0592M TL0 = (65535-46080)%256;EA = 1; //开总中断ET0 = 1; //开定时器0中断TR0 = 1; //启动定时器0Init();while(1){if(t == 20) //一秒{sec++;t=0;if(sec==60) //一分钟{min++;sec=0;if(min==60) //一小时{hour++;min=0;if(hour==24) //一天后归0hour=0;}}}write_buff(); //写显示}}void timer0() interrupt 1 //中断函数, 50ms执行一次{TH0=(65535-46080)/256; //装初值TL0=(65535-46080)%256;t++;}。
如何看懂时序图
如何看懂时序图This model paper was revised by the Standardization Office on December 10, 2020时序图,LCD1602前面总算走完了对AVR MEGA16这块单片机的一些基本的应用方式了,这时候大家对AVR的一些内部资源比如定时器,ADC,最主要的IO口的使用方式应该有了一个虽比较粗浅但是却比较形象的认识了。
这节我们来看使用单片机的另外一大主题,就是用单片机来实现芯片控制。
在前面的数码管显示一文中,就已经涉及到了用单片机来控制芯片为我们工作,CEPARK AVR开发板,为了达到增强驱动能力和节省IO口的作用,运用了移位寄存器74HC595来驱动两个四位八段数码管,是一个十分有创意的设计。
但是前面的内容重心还是集中于对AVR的IO口的控制,所以,我们从这节开始要正式逐渐深入的接触各种芯片了。
先做个引子。
单片机是一种微控制器,本身内部集成了数种资源比如CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
他的主要任务是利用各种资源实现电平控制,可以以此控制与它相连的下级系统,广泛用于工业自动控制领域。
我们就从这句话出发,首先单片机是用来做控制用的,而且利用的是本身的内部资源。
但是,它的功能再强大,资源再丰富也总有一个上限,总有枯竭的一天。
所以我们常常利用单片机外接芯片来弥补或者增强单片机的功能来完成我们所需功能的电路。
比如程序存储器不足,可以外接外部存储器,比如单片机内部中断级不足,可以外接中断控制器等等。
大家可以从这个角度来理解芯片控制的意义罢。
今天我们用AVR单片机来实现对LCD1602液晶显示芯片的控制。
首先从这个名字讲起,LCD:英文全称为Liquid Crystal Display,即为液态晶体显示,也就是我们常说的液晶显示了。
(平时老说LCDLCD,可能大家也都不怎么注意过这个全称吧,呵呵,当增加词汇量了)1602则是表示这个液晶一共能显示2行数据,每一行显示16个字符。
LCD1602的简单使用原理——跟大家分享我学习1602的总结与体会
LCD1602的简单使用原理——跟大家分享我学习1602的总结与体会我的总结主要分为这几部分:①LCD1602的硬件特性及引脚功能②LCD1602的时序特性③LCD1602的使用原理(包括带字库和不带字库的简要使用方法,控制显示指令)④基于FPGA的LCD1602使用案例Part 1. LCD1602的硬件特性及引脚功能LCD1602顾名思义是一种02*16,即为两行十六列的液晶显示屏,液晶两行,每行可以显示16个字符,但是CGRAM及CGROM里面一共有160个字符,包括阿拉伯数字,英文字母大小写,常用符号及日文。
每个字符对应于一个ASCII码值,在液晶显示屏上显示对应的字符时候,只需要将对应的ASCII码写到DDRAM中就好,详细的步骤会在下面细说。
液晶板上排列着5*8的字符点阵,8行,每行5个点位,高电平1就是该点显示,低电平0就是该点不显示。
一、引脚功能:RS,R/W,E控制数据端口DB0~DB7,数据的命令的读写由控制端口控制,并通过数据端口传输。
端口其他特性这里不再赘述,详细见1602液晶手册。
O(∩_∩)O二、硬件特性:①CGRAM 和CGROMCGRAM:character generator ram CGROM:character generator romCGRAM的地址空间:CGRAM的地址是0x40~0x7F, 64个地址空间,每个地址双字节,一共128字节,一个字符是8个字节,所以一共能显示8个自定义字符(每个双字节地址只有一个字节是被自定义字符数据写入的,另外个字节无效,因为CGARM的字符代码的规定,详细原因见下面)字符对应的区位码如下图所示:CGRAM: 字符产生ram,用来存放用户自定义的字符,如上图的两条(1)~(8),区位码为0x00~0x0F.0x00~0x07对应于(1)~(8);0x08~0x0F对应于下一条(1)~(8),虽然看起来有16个地址,但是其实只要8个地址可用,CGRAM的“字符码”规定0~2为地址,3位无效,4~7位全为0,因此CGRAM的字符码等效为0000X111,X为无效位,最后三位的地址只要八个,所以实际能用的只有8个。
LCD1602时序图
现在来看LCD1602的操作时序:在此,我们可以先不读出它的数据的状态或者数据本身。
所以只需要看两个写①当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
②当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW 置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
发现了么,写指令和写数据,差别仅仅在于RS的电平不一样而已。
以下是LCD1602的时序图:大家要慢慢学会看时序图,要知道操作一个器件的精华便蕴藏在其中,看懂看准了时序,你操控这个芯片就是非常容易的事了。
1602的时序是我见过的一个最简单的时序:1、注意时间轴,如果没有标明(其实大部分也都是不标明的),那么从左往右的方向为时间正向轴,即时间在增长。
2、上图框出并注明了看懂此图的一些常识:(1).时序图最左边一般是某一根引脚的标识,表示此行图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。
(2).有线交叉状的部分,表示电平在变化,如上所标注。
(3).应该比较容易理解,如上图右上角所示,两条平行线分别对应高低电平,也正好吻合(2)中电平变化的说法。
(4).上图下,密封的菱形部分,注意要密封,表示数据有效,Valid Data这个词也显示了这点。
3、需要十分严重注意的是,时序图里各个引脚的电平变化,基于的时间轴是一致的。
一定要严格按照时间轴的增长方向来精确地观察时序图。
要让器件严格的遵守时序图的变化。
在类似于18B20这样的单总线器件对此要求尤为严格。
4、以上几点,并不是LCD1602的时序图所特有的,绝大部分的时序图都遵循着这样的一般规则,所以大家要慢慢的习惯于这样的规则。
也许你还注意到了上面有许多关于时间的标注,这也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。
lcd1602的显示及注意点
LCD1602引脚图
第2页/共16页
LCD1602硬件应用图 • 这个是LCD1602的应用图.这是8位总 • 线的工作方式. • 如果需要工作在4位总线的方式,则数 • 据是从D4-D7输入到LCD内部.把8位 • 数据分成二次送入进D4-D7就可以. • LCD的3脚是对比度控制电阻,一般1K • 就可以满足要求.如果大于4.7K • 后,LCD可能显示不清楚. • 在应用LCD1602的时候最好在背光上 • 加一个限流电阻.
第7页/共16页
初始化流程图
开始 设置显示方式 延时5ms 清理显示缓存 设置显示模式
结束
第8页/共16页
开始
初始化
1.设置显示模式
设置显示 地址
2.写显示字符的位 置
写入显示字符 ASSII码
3.写显示字符数据
在对LCD1602进 行操作的时候,需 要判断LCD1602 是否处于忙的状 态.如果是处于忙 的状态,就需要等 LCD1602忙完,再 对它进行读写操 作.
第14页/共16页
第15页/共16页
感谢您的观赏!
第16页/共16页
第13页/共16页
写操作时的注意点 • 在进行写操作的时候,RW脚要置为0,RS脚 • 根据写的内容不同(指令或数据)置为1或0,同时,注意 • C和D两根线,我们在将E脚置为1之前,要先将数据送到 • 数据口上,然后,在C位置,将E脚置为1,经过tPW延时 • 后,再将E脚置为0,在这个时间段内必须保证数据口上的 • 数据稳定不变,为有效的数据。同理,由于tPW这些延时 • 相对较短(ns级),所以在单片里也不必考虑延时问题。
结束
4.完成显示
第9页/共16页
LCD1602自定义显示字符方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前面总算走完了对AVR MEGA16这块单片机的一些基本的应用方式了,这时候大家对AVR的一些内部资源比如定时器,ADC,最主要的IO口的使用方式应该有了一个虽比较粗浅但是却比较形象的认识了。
这节我们来看使用单片机的另外一大主题,就是用单片机来实现芯片控制。
在前面的数码管显示一文中,就已经涉及到了用单片机来控制芯片为我们工作,CEPARK AVR开发板,为了达到增强驱动能力和节省IO口的作用,运用了移位寄存器74HC595来驱动两个四位八段数码管,是一个十分有创意的设计。
但是前面的内容重心还是集中于对AVR的IO口的控制,所以,我们从这节开始要正式逐渐深入的接触各种芯片了。
先做个引子。
单片机是一种微控制器,本身内部集成了数种资源比如CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
他的主要任务是利用各种资源实现电平控制,可以以此控制与它相连的下级系统,广泛用于工业自动控制领域。
我们就从这句话出发,首先单片机用来做控制用的,而且是利用的是本身的内部资源。
但是,它的功能再强大,资源再丰富也总有一个上限,总有枯竭的一天。
所以我们常常利用单片机外接芯片来弥补或者增强单片机的功能来完成我们所需功能的电路。
比如程序存储器不足,可以外接外部存储器,比如单片机内部中断级不足,可以外接中断控制器等等。
大家可以从这个角度来理解芯片控制的意义罢。
今天我们用AVR单片机来实现对LCD1602液晶显示芯片的控制。
首先从这个名字讲起,LCD:英文全称为Liquid Crystal Display,即为液态晶体显示,也就是我们常说的液晶显示了。
(平时老说LCDLCD,可能大家也都不怎么注意过这个全称吧,呵呵,当增加词汇量了)1602则是表示这个液晶一共能显示2行数据,每一行显示16个字符。
这个就是LCD1602的全部来由。
液晶显示的使用有多广泛我就不多说了,LCD1602好像10元左右就可以拿到了的,不算贵。
我们来看看现在市面都有哪些样子的1602,下面从网上搜罗了几个(我手上的这个是蓝色背光白色字体的):
其实显而易,见也就是背光和字体的颜色不一样罢,不过老实说,蓝色背光的1602看上去显得确实比较亮,也许是人眼视觉的关系。
接下来进入LCD1602使用的重点:操作时序。
操作时序永远使用是任何一片IC 芯片的最主要的内容。
一个芯片的所有使用细节都会在它的官方器件手册上包含。
所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上有
用的内容提取,掌握。
介于中国目前的芯片设计能力有限,所以大部分的器件都是外国几个IC巨头比如TI、AT、MAXIM这些公司生产的,器件资料自然也是英文的多,所以,英文的基础要在阅读这些数据手册时得到提高哦。
即便有中文翻译版本,还是建议看英文原版,看不懂时不妨再参考中文版,这样比较利于提高。
我们首先来看1602的引脚定义,1602的引脚是很整齐的SIP单列直插封装,所以器件手册只给出了引脚的功能数据表:
我们只需要关注以下几个管脚:
3脚:VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。
4脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为电平时,则是进行命令字节的传输操作。
命令字节,即是用来对LCD1602的一些工作方式作设置的字节;数据字节,即使用以在1602上显示的字节。
值得一提的是,LCD1602的数据是8位的。
5脚:R/W,读写选择端。
当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。
笔者认为,此脚其实用处不大,直接接地永久置为低电平也不会影响其正常工作。
但是尚未经过复杂系统验证,保留此意见。
6脚:E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
7~14脚:8位并行数据口,使得对LCD1602的数据读写大为方便。
现在来看LCD1602的操作时序:
在此,我们可以先不读出它的数据的状态或者数据本身。
所以只需要看两个写时
序:
① 当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW 置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
② 当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
发现了么,写指令和写数据,差别仅仅在于RS的电平不一样而已。
以下是LCD1602的时序图:
大家要慢慢学会看时序图,要知道操作一个器件的精华便蕴藏在其中,看懂看准了时序,你操控这个芯片就是非常容易的事了。
1602的时序是我见过的一个最简单的时序:
1、注意时间轴,如果没有标明(其实大部分也都是不标明的),那么从左往右的方向为时间正向轴,即时间在增长。
2、上图框出并注明了看懂此图的一些常识:
(1).时序图最左边一般是某一根引脚的标识,表示此行图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。
(2).有线交叉状的部分,表示电平在变化,如上所标注。
(3).应该比较容易理解,如上图右上角所示,两条平行线分别对应高低电平,也正好吻合(2)中电平变化的说法。
(4).上图下,密封的菱形部分,注意要密封,表示数据有效,Valid Data这个词也显示了这点。
3、需要十分严重注意的是,时序图里各个引脚的电平变化,基于的时间轴是一致的。
一定要严格按照时间轴的增长方向来精确地观察时序图。
要让器件严格的遵守时序图的变化。
在类似于18B20这样的单总线器件对此要求尤为严格。
4、以上几点,并不是LCD1602的时序图所特有的,绝大部分的时序图都遵循着这样的一般规则,所以大家要慢慢的习惯于这样的规则。
也许你还注意到了上面有许多关于时间的标注,这也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。
因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。
话
说现在各种处理器的主频也是疯狂增长,日后搞不好出现个双核单片机也不一定就是梦话。
下面是时序参数表:
大家要懂得估计主控芯片的指令时间,可以在官方数据手册上查到MCU的一些级别参数。
比如我们现在用AVR M16做为主控芯片,外部12MHz晶振,指令周期就是一个时钟周期为(1/12MHz)us,所以至少确定了它执行一条指令的时间是us级别的。
我们看到,以上给的时间参数全部是ns级别的,所以即便我们在程序里不加延时程序,也应该可以很好的配合LCD1602的时序要求了。
怎么看这个表呢?很简单,我们在时序图里可以找到TR1,对应时序参数表,可以查到这个是E上升沿/下降沿时间,最大值为25ns,表示E引脚上的电平变化,必须在最大为25ns之内的时间完成。
大家看是不是这个意思?
现在我来解读我对这个时序图的理解:
当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平,注意看是RS的状态先变化完成。
然后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽度。
然后E引脚负跳变,RS电平变化,R/W 电平变化。
这样便是一个完整的LCD1602写命令的时序。
下面来看看CEPARK AVR开发板的1602显示部分原理图:
如你所见,KID画的这个也太能省了,就直接接1k电阻了事…….只有一点要说,就是这个解法,VL脚也就是偏压信号脚的电压就是不可调的了,即对比度固定。
下面附上源程序,里面做了详细注释,希望第一次接触时序图的朋友可以好好对照一下时序图来分析程序。
请点击下载附件:
作几点说明:
1、LCD1602对写进去的数据字节呢是以ASCII码识别的,所以写进去用以显示的字符数据必须是某一个ADCII码,当然如果你不想查ASCII表的话,可以用字符来代替,即用单引号包含的字符常量。
所以,也由此推出,’0’和30H(0的ASCII码)是等价的。
2、操作1602,要先对1602进行初始化,数据手册里写的比较清楚,并且对各个命令字的写入并没有先后要求。
3、1602是有自定义字符的功能的,大家熟悉基本操作之后可以尝试自行拓展
4、在每次写完数据之后,应该要将E引脚置为低电平,为下一次E的高脉冲做准备。
延伸来说,这叫释放时钟线,要养成释放时钟线的好习惯。
对配合时序大有裨益。
5、可以将所要显示的字符一次定义在一个字符数组里,以调用字符数组的形式调用显示数据,这样程序会变得简洁而高效。
6、记住时序的要求,往往是对最小时间有要求,在你严格配合时序的情况下仍然的不到理想的结果时,可以尝试插入延时。
这个并不违反时序的要求。
况且相当多的器件手册并没有详细的讲述最小时间要求。