差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
图片显示系统设计 [2018/11/01 10:26] anran [实验原理] |
图片显示系统设计 [2020/01/18 21:57] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | =====图片显示系统设计===== | + | ### 图片显示系统设计 |
- | ----- | + | |
- | ====实验任务==== | + | --- |
+ | |||
+ | #### 实验任务 | ||
* 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成图片显示系统设计并观察调试结果 | * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成图片显示系统设计并观察调试结果 | ||
行 7: | 行 9: | ||
* 解析:将单色图片的数据存储到rom中,驱动1.8寸将图片刷到液晶屏上。 | * 解析:将单色图片的数据存储到rom中,驱动1.8寸将图片刷到液晶屏上。 | ||
- | ====实验目的==== | + | #### 实验目的 |
扩展板卡上集成了1.8寸彩色液晶屏TFT_LCD模块,大家可以驱动LCD显示文字、图片或动态的波形。本实验主要学习1.8寸串行彩色液晶屏的驱动设计,然后将小脚丫Logo处理显示,完成图片显示系统的总体设计。 | 扩展板卡上集成了1.8寸彩色液晶屏TFT_LCD模块,大家可以驱动LCD显示文字、图片或动态的波形。本实验主要学习1.8寸串行彩色液晶屏的驱动设计,然后将小脚丫Logo处理显示,完成图片显示系统的总体设计。 | ||
行 13: | 行 15: | ||
* 完成图片显示系统设计实现 | * 完成图片显示系统设计实现 | ||
- | ====设计框图==== | + | #### 设计框图 |
根据前面的实验解析我们可以得知,该设计可以拆分成两个功能模块实现, | 根据前面的实验解析我们可以得知,该设计可以拆分成两个功能模块实现, | ||
行 20: | 行 22: | ||
{{:12-Top-Down层次设计.png?500|Top-Down层次设计}} {{:12-模块结构设计.png?500|模块结构设计}} | {{:12-Top-Down层次设计.png?500|Top-Down层次设计}} {{:12-模块结构设计.png?500|模块结构设计}} | ||
- | ====实验原理==== | ||
- | ===液晶屏介绍=== | + | #### 实验原理 |
+ | |||
+ | ##### 液晶屏介绍 | ||
{{:12-液晶屏规格书.png?800|液晶屏规格书}} | {{:12-液晶屏规格书.png?800|液晶屏规格书}} | ||
行 46: | 行 49: | ||
更多的内容这里就不一一介绍了,感兴趣的同学可以详细阅读ST7735S芯片手册。 | 更多的内容这里就不一一介绍了,感兴趣的同学可以详细阅读ST7735S芯片手册。 | ||
- | ===液晶屏硬件连接=== | + | ##### 液晶屏硬件连接 |
STEP BaseBoard V3.0底板上的1.8寸串行彩色液晶屏模块电路,其电路图如下: | STEP BaseBoard V3.0底板上的1.8寸串行彩色液晶屏模块电路,其电路图如下: | ||
行 54: | 行 57: | ||
底板上的1.8寸串行彩色液晶屏电路和VGA显示电路复用部分FPGA管脚,两者不能同时使用,当使用1.8寸串行彩色液晶屏时,DISP_SEL信号置高,驱动1.8寸串行彩色液晶屏使能同时点亮背光,DISP_2~ DISP_5分别对应RESET、D/C、SDA、SCK管脚,最后FPGA驱动1.8寸液晶屏完成屏显示控制即可。 | 底板上的1.8寸串行彩色液晶屏电路和VGA显示电路复用部分FPGA管脚,两者不能同时使用,当使用1.8寸串行彩色液晶屏时,DISP_SEL信号置高,驱动1.8寸串行彩色液晶屏使能同时点亮背光,DISP_2~ DISP_5分别对应RESET、D/C、SDA、SCK管脚,最后FPGA驱动1.8寸液晶屏完成屏显示控制即可。 | ||
- | ===液晶屏驱动设计=== | + | ##### 液晶屏驱动设计 |
要驱动液晶屏需要先了解液晶屏的驱动流程,可以从液晶屏驱动芯片ST7735S的芯片手册上获取,也可以到网上找找有没有别人使用同类液晶屏的案例,或者向卖方问问有没有相关资料提供,这里我们找到了一个用51单片机驱动的程序例程,例程仅供参考,需要根据例程中的配置到芯片手册中查找确认,不可以直接套用。 | 要驱动液晶屏需要先了解液晶屏的驱动流程,可以从液晶屏驱动芯片ST7735S的芯片手册上获取,也可以到网上找找有没有别人使用同类液晶屏的案例,或者向卖方问问有没有相关资料提供,这里我们找到了一个用51单片机驱动的程序例程,例程仅供参考,需要根据例程中的配置到芯片手册中查找确认,不可以直接套用。 | ||
行 117: | 行 120: | ||
LCD_WriteCommand(0x29); //Display on | LCD_WriteCommand(0x29); //Display on | ||
} | } | ||
- | <\code> | + | </code> |
创建存储器,将初始化过程中写的所有指令和数据存储,同时存储的还有指令或数据标志,例如初始化第1条指令为8'h11,我们增加最高位1‘b0组成9位位宽数据。存储器部分指令和数据如下: | 创建存储器,将初始化过程中写的所有指令和数据存储,同时存储的还有指令或数据标志,例如初始化第1条指令为8'h11,我们增加最高位1‘b0组成9位位宽数据。存储器部分指令和数据如下: | ||
行 128: | 行 131: | ||
reg_init[ 3] = {1'b1,8'h3c}; | reg_init[ 3] = {1'b1,8'h3c}; | ||
reg_init[ 4] = {1'b1,8'h3c}; | reg_init[ 4] = {1'b1,8'h3c}; | ||
- | <\code> | + | </code> |
从51例程中可以看到,整个初始化过程都在给液晶屏写指令或数据,通过查看写指令或写数据的时序发现,唯一不同的就是对A0(对应底板液晶屏模块中的D/C信号)的控制,程序实现如下: | 从51例程中可以看到,整个初始化过程都在给液晶屏写指令或数据,通过查看写指令或写数据的时序发现,唯一不同的就是对A0(对应底板液晶屏模块中的D/C信号)的控制,程序实现如下: | ||
行 146: | 行 149: | ||
CSB=1; | CSB=1; | ||
} | } | ||
- | <\code> | + | </code> |
FPGA驱动液晶屏的设计使用状态机完成,将写数据与写指令的SPI时序整合成一个状态,另加一位指令数据控制位,程序实现如下: | FPGA驱动液晶屏的设计使用状态机完成,将写数据与写指令的SPI时序整合成一个状态,另加一位指令数据控制位,程序实现如下: | ||
行 176: | 行 179: | ||
endcase | endcase | ||
end | end | ||
- | <\code> | + | </code> |
初始化指令和数据都放到存储器中了,数据写入的SPI串行时序也已经设计成了一个状态,初始化状态只需要在复位后将存储器中的指令或数据通过WRITE状态发送给液晶屏,程序实现如下: | 初始化指令和数据都放到存储器中了,数据写入的SPI串行时序也已经设计成了一个状态,初始化状态只需要在复位后将存储器中的指令或数据通过WRITE状态发送给液晶屏,程序实现如下: | ||
行 202: | 行 205: | ||
endcase | endcase | ||
end | end | ||
- | <\code> | + | </code> |
初始化完成,进入刷屏状态,刷屏数据写入前首先进行区域坐标的定位,然后刷写数据,图片采用单色显示,图片ram中每位数表示一个液晶屏一个像素点的亮还是灭,彩色液晶屏本实验采用16bit格式,即需要16bit数据决定像素的颜色,16bit数据分两次发送,最终从ram模块中获取的数据每位数据都要转换成16bit的数据,0转换成背景色对应的数据,1转换成顶层色对应的数据,程序实现如下: | 初始化完成,进入刷屏状态,刷屏数据写入前首先进行区域坐标的定位,然后刷写数据,图片采用单色显示,图片ram中每位数表示一个液晶屏一个像素点的亮还是灭,彩色液晶屏本实验采用16bit格式,即需要16bit数据决定像素的颜色,16bit数据分两次发送,最终从ram模块中获取的数据每位数据都要转换成16bit的数据,0转换成背景色对应的数据,1转换成顶层色对应的数据,程序实现如下: | ||
行 244: | 行 247: | ||
endcase | endcase | ||
end | end | ||
- | <\code> | + | </code> |
- | ===系统总体实现=== | + | ##### 系统总体实现 |
液晶屏驱动模块的数据来源于图片数据的ram模块,这些数据由图片取模得到,使用图片取模软件,将图片载入软件,输出数据类型选择C语言数组,根据液晶屏驱动实际情况配置对应的扫描模式,输出灰度选择单色,调整最大宽度和高度符合液晶屏要求,最后点击保存生成需要的文件。 | 液晶屏驱动模块的数据来源于图片数据的ram模块,这些数据由图片取模得到,使用图片取模软件,将图片载入软件,输出数据类型选择C语言数组,根据液晶屏驱动实际情况配置对应的扫描模式,输出灰度选择单色,调整最大宽度和高度符合液晶屏要求,最后点击保存生成需要的文件。 | ||
行 261: | 行 264: | ||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00, | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00, | ||
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00, | 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00, | ||
- | <\code> | + | </code> |
使用编辑器的查找替换功能,将数据处理成下图格式 | 使用编辑器的查找替换功能,将数据处理成下图格式 | ||
行 271: | 行 274: | ||
132'h0000000000000000F800000000000000, | 132'h0000000000000000F800000000000000, | ||
132'h0000000000000007FF00000000000000, | 132'h0000000000000007FF00000000000000, | ||
- | <\code> | + | </code> |
创建ram模块,将图片数据初始化到ram中,程序实现图下: | 创建ram模块,将图片数据初始化到ram中,程序实现图下: | ||
行 284: | 行 287: | ||
8'd3 : Q = 132'h0000000000000000F800000000000000; | 8'd3 : Q = 132'h0000000000000000F800000000000000; | ||
8'd4 : Q = 132'h0000000000000007FF00000000000000; | 8'd4 : Q = 132'h0000000000000007FF00000000000000; | ||
- | <\code> | + | </code> |
存储图片数据的ram本实验采用分布式ram搭建,前面波形信号发生器实验中讲过ram IP核的例化及使用方法,有兴趣的同学可以自己尝试一下。 | 存储图片数据的ram本实验采用分布式ram搭建,前面波形信号发生器实验中讲过ram IP核的例化及使用方法,有兴趣的同学可以自己尝试一下。 | ||
行 294: | 行 297: | ||
{{:12-RTL设计框图.png?800|RTL设计框图}} | {{:12-RTL设计框图.png?800|RTL设计框图}} | ||
- | ====实验步骤==== | + | #### 实验步骤 |
- 双击打开Quartus Prime工具软件; | - 双击打开Quartus Prime工具软件; | ||
- 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); | - 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); | ||
行 305: | 行 308: | ||
- | ====实验现象==== | + | #### 实验现象 |
+ | |||
+ | 将设计加载到FPGA中,观察底板液晶屏显示,小脚丫的Logo被显示出来了,前面说了1.8寸串行液晶屏支持不同的刷新方向,大家可以调整图片显示的方向 | ||
+ | |||
+ | {{:12-实验现象.png?400|实验现象}} |