液晶显示屏中,1602型算是比较简单的一种,据说和12864还是全兼容的。这两天学习的结果如下。
一、1602里的存储器有三种:CGROM、CGRAM、DDRAM。CGROM保存了厂家生产时固化在LCM中的点阵型显示数据,CGRAM是留给用户自己定义点阵型显示数据的,DDRAM则是和显示屏的内容对应的。1602内部的DDRAM有80字节,而显示屏上只有2行 ×16列,共32个字符,所以两者不完全一一对应。默认情况下,显示屏上第一行的内容对应DDRAM中80H到8FH的内容,第二行的内容对应DDRAM 中C0H到CFH的内容。DDRAM中90H到A7H、D0H到E7H的内容是不显示在显示屏上的,但是在滚动屏幕的情况下,这些内容就可能被滚动显示出来了。注:这里列举的DDRAM的地址准确来说应该是DDRAM地址+80H之后的值,因为在向数据总线写数据的时候,命令字的最高位总是为1。
二、1602使用三条控制线:EN、RW、RS。其中EN起到类似片选和时钟线的作用,RW和RS指示了读、写的方向和内容。在读数据(或者Busy标志)期间,EN线必须保持高电平;而在写指令(或者数据)过程中,EN线上必须送出一个正脉冲。RW、RS的组合一共有四种情况,分别对应四种操作:
RS=0、RW=0——表示向LCM写入指令
RS=0、RW=1——表示读取Busy标志
RS=1、RW=0——表示向LCM写入数据
RS=1、RW=1——表示从LCM读取数据
三、LCD在使用的过程中,可以在RS=0、RW=0的情况下,向LCM写入一个字节的控制指令。使用的控制指令一共八个类别。有的类别又有几条不同的指令。具体的情况罗列在下:
①01H:清除DDRAM的所有单元,光标被移动到屏幕左上角。
②02H:DDRAM所有单元的内容不变,光标移至左上角。
③输入方式设置(EnterModeSet),这些指令规定了两个方面:一是写入一个DDRAM单元后,地址指针如何改变(加一还是减一);二是屏幕上的内容是否滚动。
04H:写入DDRAM后,地址指针减一,比如第一个字符写入8FH,则下一个字符会写入8EH;屏幕上的内容不滚动。
05H:写入DDRAM后,地址指针减一,同上一种情况;每一个字符写入以后,屏幕上的内容向右滚动一个字符位。
06H:写入DDRAM后,地址指针加一,比如第一个字符写入80H,则下一个字符会写入81H;屏幕上的内容也是不滚动。这应该是最常用的一种显示方式。
07H:写入DDRAM后,地址指针加一,同上一种情况;每一个字符写入以后,屏幕上的内容向左滚动一个字符位。
④屏幕开关、光标开关、闪烁开关。
08H、09H、0AH、0BH:关闭显示屏,实质上是不把DDRAM中的内容对应显示在屏幕上,对DDRAM的操作还是在进行的,执行这条指令,接着对 DDRAM进行写入,屏幕上没有任何内容,但是接着执行下面的某条指令,就能看到刚才屏幕关闭期间,对DDRAM操作的效果了。
0cH:打开显示屏,不显示光标,光标所在位置的字符不闪烁。
0dH:打开显示屏,不显示光标,光标所在位置的字符闪烁。
0eH:打开显示屏,显示光标,光标所在位置的字符不闪烁。
0fH:打开显示屏,显示光标,光标所在位置的字符闪烁。
关于光标的位置:光标所在的位置指示了下一个被写入的字符所处的位置,加入在写入下一个字符前没有通过指令设置DDRAM的地址,那么这个字符就应该显示在光标指定的地方。
⑤设置光标移动(本质就是AC的增加还是减少)、整体画面是否滚动。
10H:每输入一次该指令,AC就减一,对应了光标向左移动一格。整体的画面不滚动。
14H:每输入一次该指令,AC就加一,对应了光标向右移动一格。整体的画面不滚动。
18H:每输入一次该指令,整体的画面就向左滚动一个字符位。
1CH:每输入一次该指令,整体的画面就向右滚动一个字符位。画面在滚动的时候,每行的首尾是连在一起的,也就是每行的第一个字符,若左移25次,就会显示在该行的最后一格。在画面滚动的过程中,AC的值也是变化的。 ⑥显示模式设定指令,设定了显示几行,显示什么样的点阵字符,数据总线占用几位。
20H:4位总线,单行显示,显示5×7的点阵字符。
24H:4位总线,单行显示,显示5×10的点阵字符。
28H:4位总线,双行显示,显示5×7的点阵字符。
2CH:4位总线,双行显示,显示5×10的点阵字符。
30H:8位总线,单行显示,显示5×7的点阵字符。
34H:8位总线,单行显示,显示5×10的点阵字符。
38H:8位总线,双行显示,显示5×7的点阵字符。这是最常用的一种模式。3CH:8位总线,双行显示,显示5×10的点阵字符。
关键字:LCD1602 学习体会
引用地址:
LCD1602学习体会
推荐阅读最新更新时间:2024-03-16 15:00
单片机:矩阵键盘和LCD1602
一、矩阵键盘 1、检测按键的方法: (1)先使1-4全部赋低电平,5-8赋高电平。当有按键按下时,5-8中会有某个点平被拉低。 (2)然后依次将1-4中的某一位置0,其他位置1,观察对应返回值,即可确定哪个按键被按下。 2、对应程序 unsigned char bsp_mkeyscan() { unsigned char keyvalue = 0x99; KEYPORT = 0xF0; if (KEYPORT != 0xF0) { KEYPORT = 0xFE; if (KEYPORT != 0xFE) { keyvalue = KEYPORT; while(key
[单片机]
pic16f877连接LCD1602液晶显示
//#include picme1687x.h #include pic.h #define uchar unsigned char #define rs RC0 #define rw RC1 #define en RC2 #define data PORTD const uchar tab = Welcometo Earth! ; void delay(uchar y) { uchar x; for(;y 0;y--) for(x=110;x 0;x--); } void check_busy() { uchar temp; do { data=
[单片机]
单片机+LCD1602+HR-04显示屏显示超声波测距工作原理
1.基本工作原理 (1)采用IO口TRIG触发测距,给最少10us的高电平信号。 (2)模块自动发送8个40khz的方波,自动检测是否有信号返回。 (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续时间就是超声波从发射到返回的时间,测试距离=(高电平时间*声速(340M/s)/2(发射和回来的时间,所以要除以2)) 2.模块实物图 3.驱动程序 文章下面有链接,由于proteus里面没有HR04模块,所以在仿真的时候可以用另一个单片机模拟HR-04模块,然后单片机和单片机进行通信,不能用串口通信,因为超声波测距在用定时器进行着计时,而设置波特率用到定时器1,没办法用定时器1来设置波特率。过程有点麻烦,我就没搭建
[单片机]
icc avr LCD1602显示屏程序
入口参数说明: // control port //#define SET_RS sbi(PORTB,5) //#define CLR_RS cbi(PORTB,5) //#define OUT_RS sbi(DDRB,5) //#define SET_RW sbi(PORTB,6) //#define CLR_RW cbi(PORTB,6) //#define OUT_RW sbi(DDRB,6) //#define SET_E sbi(PORTB,7) //#define CLR_E cbi(PORTB,7) //#define OUT_E sbi(DDRB,7) // data port //#define SET_D4
[嵌入式]
lcd1602 屏驱动(自定义字符)
1、时序图 2、代码 3、自定义字符 时序图 代码: #include reg51.h #include intrins.h sbit RS = P2^4; //定义端口 sbit RW = P2^5; sbit EN = P2^6; void Delayus(unsigned char t) // us级别延时 { while(--t); } void Delayms(unsigned char t)// ms级别延时 { while(t--) { //大致延时1mS Delayus(245); Delayus(245)
[单片机]
stm32F4+lcd1602实现采集两路adc并显示
以STM32F403为控制核心,设计一种基于STM32的智能照明控制系统,使用光敏电阻作为光照信息来源,使用GP2D12作为人物信息来源,当光照强度改变时,光敏电阻的阻值改变,从而改变STM32的采样电压。当人物移动时,红外传感器的电压改变从而改变采样电压。当光照强度小于一定值,且感应到有人时,LED亮。 通过光敏电阻和GP2D12传感器获取光照和红外信息,作为模拟量,传入STM32F4的采集端口。STM32F4进行模数转换后,在LCD1602上进行显示。 采用了HAL库进行配置STM32F4,一直有个问题就是proteus仿真DS18B20和DHT11这种带有时序要求的传感器,同STM32通信时出现时序错误,有经验的师兄
[单片机]
pic单片机两个IO口四线驱动LCD1602
经过多天调式,优化程序。只用两个IO端口驱动74LS164扩展成并口驱动LCD1602(四线模式),这是个完整简单的例子,可实现字符串左移200次,右移200次,不停的循环。现上传与大家共享成果!//引入头文件********************************************************* #include pic.h #include pic12f6x.h #include delay.h #include delay.c //熔丝配置*********************************************************** __CONFIG(P
[单片机]
基于51单片机的电子秒表设计
设计要求: 最多可记录十组数据 可删除其中多组数据 可上下查阅所记录的数据 数据通过lcd1602显示 计时精度到0.01s 由于并没有使用24c02,导致程序去数据较大,仿真可能不行。实际验证通过 程序界面如图: 仿真界面如图: 如果编译出错,将keil按如图参数设置: 以下为程序代码: 包括两个文件,主程序里面是: #include 1602.h #include reg52.h #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #
[单片机]