液晶显示器初始化过程设计验证(verilog代码编写实现)
一, 设计要求
根据液晶显示器手册,我们要利用液晶显示器显示图片或者字符时,需要进行一系列的初始化过程才能够让液晶显示器正常显示,其初始化过程需要我们将初始化的指令通过驱动模块发送给液晶显示器。
二, 设计分析
我们需要考虑如何将要发送的指令给到驱动模块?
驱动设计架构图
在发送粗调对比度之前的指令时,对应发送的请求信号不利用应答信号来进行控制,应答信号不进行控制请求信号是因为发送这些指令后有5毫秒的时间延迟,而我们驱动模块发送指令所需要的时间大致在20个驱动时钟周期,其时间远远小于5毫秒,如果我们利用应答信号控制请求信号,这就会导致我们在这5毫秒时间段内一直在发送当前步骤所要发送的指令,而每进行一个初始化步骤时,只需要发送一次指令就可以,那么我们可以利用延迟计数器产生请求信号,我们可以规定当延迟计时器等于1时拉高请求信号,那么请求信号只会拉高一个驱动时钟周期,在拉高请求信号之前将我们要发送的指令给到指令寄存器中。
粗调对比度到开显示初始化过程发送的指令集,由于发送的这些指令是连续发送给液晶显示器,我们控制的请求信号就需要通过应答信号信号来进行控制,通过应答信号将要发送的指令给到指令寄存器中。
接下来我们考虑如何进行初始化模块的逻辑描述?
我们利用有限状态机理论进行初始化过程的描述。
第一个状态:硬件复位状态,20ms的延迟计数器计数,请求信号无效,指令寄存器清零;跳转条件为:延迟计数器计数到最大值(20ms)
第二个状态:硬件置位状态,20ms的延迟计数器计数,请求信号无效,指令寄存器清零;
跳转条件为:延迟计数器计数到最大值(20ms)
第三个状态:软件复位状态,需要发送的指令为e2,软复位信号为低电平,指令或数据寄存器选择信号rs为低电平,5ms的延迟计数器计数,req=(cnt== 1)?1’b1:1’b0;跳转条件为:延迟计数器计数到最大值(5ms)
第四个状态:升压步骤1状态,需要发送的指令为2c,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,5ms的延迟计数器计数,req=(cnt== 1)?1’b1:1’b0;跳转条件为:延迟计数器计数到最大值(5ms)
第五个状态:升压步骤2状态,需要发送的指令为2e,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,5ms的延迟计数器计数,req=(cnt== 1)?1’b1:1’b0;跳转条件为:延迟计数器计数到最大值(5ms)
第六个状态:升压步骤3状态,需要发送的指令为2f,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,5ms的延迟计数器计数,req=(cnt== 1)?1’b1:1’b0;跳转条件为:延迟计数器计数到最大值(5ms)
第七个状态:粗调对比度状态,需要发送的指令为23,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
初始化显示结果
第八个状态::微调对比度状态,需要发送的指令为81,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
第9个状态,微调对比度值状态,需要发送的指令为1a,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
第10个状态:设置偏压比状态,需要发送的指令为a2,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
第11个状态:行扫描顺序状态,需要发送的指令为c0,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
第12个状态:列扫描顺序状态,需要发送的指令为a1,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
第13个状态:开显示状态,需要发送的指令为af,软复位信号为高电平,指令或数据寄存器选择信号rs为低电平,延迟计数器不计数,req=(ack== 1)?1’b0:1’b1;跳转条件为:应答信号有效。
液晶显示器lcd12864驱动结果显示
第14个状态:等待状态,死机。
三, 驱动设计分析
第一点:我们考虑如何得到20mhz的时钟信号?
我们需要产生的时钟信号首先不能够一直存在,只有当我们进行数据传输时才能够产生时钟。空闲时为高电平。根据这个要求我们可以通过锁相环产生一个频率为40mhz时钟信号,在传输数据或者指令时对40mhz进行二分频就可以产生20mhz。
第二点:根据芯片手册如何模拟出要求的时序关系
时序关系
四, 芯片手册说明
可以显示 128 列*64 行点阵单色图片,或显示 8 个/行*4 行 16*16 点阵的汉字,可以显示32个16*16的点阵汉字, 或显示 16 个/行*8 行 8*8 点阵的英文、数字、符号,其数量为128个。
片选信号cs:低电平有效
复位信号RES:低电平复位,高电平正常工作
数据和指令信号rs:高电平表示数据,低电平表示指令
串行时钟信号sclk:用来传输我们要传递的数据或者指令
串行数据信号sda:我们需要传输的数据或者指令需要通过该数据线进行一位一位传递。
在空闲时,我们的串行时钟信号为高电平,片选信号为高电平,数据是通过串行时钟的上升沿传递。
芯片手册规定片选的建立时间最小为:20ns,保持时间为:40ns
数据的建立时间最小为:20ns,保持时间为:10ns
串行时钟sclk高低电平持续都最小时间为:25ns,串行时钟的周期最小为50ns。频率最大为:20Mhz。
在进行数据传输时先发数据高位,后发数据低位。