TA的每日心情 | 郁闷 2017-12-4 18:33 |
---|
签到天数: 94 天 连续签到: 1 天 [LV.6]常住居民II
|
本节使用的LCD1602模块,但控制模块是精简版,或者简单版更恰当。因为舍去了LCD1602的读操作,利用慢显示原理,只对LCD1602进行写操作。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
管脚功能如下表所示:
引脚 | 符号 | 功能说明 | 1
| VSS
| 一般接地
| 2
| VDD
| 接电源(+5V或+3.3V)
| 3
| V0
| 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
| 4
| RS
| RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
| 5
| R/W
| R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
| 6
| E
| E(或EN)端为使能(enable)端,
写操作时,下降沿使能。
读操作时,E高电平有效
| 7
| DB0
| 低4位三态、 双向数据总线 0位(最低位)
| 8
| DB1
| 低4位三态、 双向数据总线 1位
| 9
| DB2
| 低4位三态、 双向数据总线 2位
| 10
| DB3
| 低4位三态、 双向数据总线 3位
| 11
| DB4
| 高4位三态、 双向数据总线 4位
| 12
| DB5
| 高4位三态、 双向数据总线 5位
| 13
| DB6
| 高4位三态、 双向数据总线 6位
| 14
| DB7
| 高4位三态、 双向数据总线 7位(最高位)(也是busy flag)
| 15
| BLA
| 背光电源正极
| 16
| BLK
| 背光 电源负极
|
寄存器选择控制表:
RS
| R/W
| 操作说明
| 0
| 0
| 写入指令寄存器(清除屏等)
| 0
| 1
| 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值
| 1
| 0
| 写入数据寄存器(显示各字型等)
| 1
| 1
| 从数据寄存器读取数据
| 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.LCD 1602在使用前首先需要进行初始化。
本节初始化内容有:
1、功能设置:Mode_Set = 8'h38 // 设置16*2显示,5*7点阵,8位数据接口
2、显示设置:Cursor_Set = 8'h0c // 开显示,不显示光标
3、地址设置:Address_Set = 8'h06 // 地址加1,当写入数据的时候光标右移
4、清屏: Clear_Set = 8'h01 // 清楚屏幕显示
代码如下:
//-------------------init_state---------------------8'd0 : begin data_buf = Data; lcd_rs <= 1'b0; lcd_en <= 1'b1; lcd_data <= Mode_Set; state <= state + 1'b1;end8'd1 : begin lcd_en <= 1'b0; state <= state + 1'b1;end8'd2 : begin lcd_rs <= 1'b0; lcd_en <= 1'b1; lcd_data <= Cursor_Set; state <= state + 1'b1;end8'd3 : begin lcd_en <= 1'b0; state <= state + 1'b1;end8'd4 : begin lcd_rs <= 1'b0; lcd_en <= 1'b1; lcd_data <= Address_Set; state <= state + 1'b1;end8'd5 : begin lcd_en <= 1'b0; state <= state + 1'b1;end8'd6 : begin lcd_rs <= 1'b0; lcd_en <= 1'b1; lcd_data <= Clear_Set; state <= state + 1'b1;end8'd7 : begin lcd_en <= 1'b0; state <= state + 1'b1;end显示内容:
1、写地址
2、写数据
主要代码如下:
8'd8 : begin lcd_rs <= 1'b0; lcd_en <= 1'b1; lcd_data <= addr1; state <= state + 1'b1;end8'd9 : begin lcd_en <= 1'b0; state <= state + 1'b1;end8'd10 : begin lcd_rs <= 1'b1; lcd_en <= 1'b1; lcd_data <= data_buf[255:248]; state <= state + 1'b1;end8'd11 : begin lcd_en <= 1'b0; data_buf <= {data_buf[247:0],data_buf[255:248]}; Address <= Address + 1'b1; if(Address == 15) state <= state + 1'b1; else state <= 10;end连好线就可以显示啦!!!
|
|