1、电子信息工程专业 专业综合课程设计 基于FPGA的液晶显示控制器设计学 院(系): 信息与通信工程 专 业: 电子信息工程 专业综合课程设计题目目 录1设计指标及要求11.1任务及要求11.2设计原理12系统硬件电路设计22.1FPGA核心板22.2液晶显示部分32.3按键控制部分53系统软件设计54系统调试64.1硬件调试64.2软件调试75结论76参考文献7附录一 系统硬件电路图(原理图,PCB)8附录二 实物照片9附录三 系统完整程序代码9- 21 -1设计指标及要求1.1任务及要求 采用FPGA技术实现液晶的显示功能,要求学生选好液晶芯片,画出电路板,做好硬件电路后调试程序,基本功能要
2、求显示字符,扩展功能是显示动画。1.2设计原理显示控制模块是通过对FPGA芯片的编程,在此同时通过调用显示ROM文件中的字库,找到相应的二进制显示代码,再一条一条地送到显示驱动电路中,最后经过放大,送到点阵中的液晶去显示。系统的整体框图如下图所示:2系统硬件电路设计2.1FPGA核心板2.2液晶显示部分12864各引脚的功能如下:引脚号 引脚名称 引脚功能描述 1 VSS 电源地2 VDD 电源电压 3 V0 LCD驱动负电压,调节LCD对比度4 RS H:DB0-DB7为显示数据 L: DB0-DB7为指令数据5 R/W R/W=H,E=H数据被读到DB0-DB7 R/W=L,E=H DB0
3、-DB7数据写到IR或DR6 E 使能信号:R/W=L,E信号下降沿锁存到DB0-DB7; R/W=H,E=H,DDRAM数据读到DB0-DB77 DB0DB7 8位三态并行数据总线8 PSB PSB=H时为并行输入方式,PSB=L时为串行输入方式9 RST 复位端,低电平有效 12864的信号功能表如下图所示: 12864的工作时序如下图所示:2.3按键控制部分 按键连接电路如下图所示: 按键分别连接着FPGA芯片的I/O口,通过拨动按键使液晶显示不同的字符。3系统软件设计 程序流程图如下图所示: 4系统调试调试分为硬件调试和软件调试。4.1硬件调试1、上电之前,用万用表测试电源与地未短路。
4、2、上电接通电路,指示灯正常点亮。3、但12864液晶屏背光灯点亮,却未出现正常阴影,将12864反插接入电路,液晶屏点亮,出现正常阴影,检查PCB及原理图发现12864引脚并未接错,于是参考已有12864的多种电路接法,更改板子上的12864电路,问题却仍得不到解决,最终发现是所用12864液晶屏自带电路已默认选择串行数据通信,而我们所采用的电路都是并行数据通信电路,将12864液晶屏自带电路改焊,液晶屏正常点亮。原先设计12864电路所加的用于调节液晶屏对比度的滑动变阻器,实际使用时,发现并未起作用,故将其去掉。4、向板子内烧录简单的显示程序,12864液晶屏正常显示出编写的内容。至此,硬
5、件调试完成。4.2软件调试1、先根据整体思路确定了软件采用状态机的方式编写。然后查阅了12864液晶屏的使用手册以及EP4CE6E22芯片使用手册,确定了基本的操作要求,并根据要求进行了12864读数据写数据的程序编写,建成工程,完成编译,烧录进芯片,上电后,正确显示成功,完成了初步调试。2、画出了程序框图,然后将各部细节补充出来。3、正确的延时对于12864液晶屏的正确显示至关重要。要想延时正确就得先解决时序的问题,我们通过借鉴以往的学习EDA时所做的实验,直接套用了一个典型分频程序,解决了该问题。4、在程序里延时的正确使用是一大难点,因为VHDL语言仿真性极强,其独有的延时语句,多数只支持
6、仿真状态,综合设计时并不能通过编译,无法实现,我们尝试了诸如for、loop、wait until、wait on等语句都未能正常编译通过,最后采用if语句,计数延时才得以正确延时。5、最终,我们经过多次删改,基本完成了预期要实现的设计目标。5结论本设计硬件电路的使用比较简单,所用元器件较少,电路中使用了FPGA芯片和LCD12864液晶显示器等主要芯片,实现了预计的功能。在对芯片的管脚功能和用法有了充分的了解后,根据原先的选择好的设计要求设计硬件电路,包括FPGA控制电路、按键接口电路、显示电路。然后通过软件编程,实现了用按键进行控制,用液晶模块进行显示,基本完成了预期要实现的目标。6参考文
7、献1 潘松, 黄继业. EDA技术实用教程VHDL版M. 第四版. 北京:科学出版社, 2010.2 赵俊超等. 集成电路设计VHDL教程M. 北京:北京希望电子出版社, 2009.3 李维是, 郭强. 液晶显示应用技术M. 北京:电子工业出版社, 2011.附录一 系统硬件电路图(原理图,PCB)附录二 实物照片附录三 系统完整程序代码-12864液晶的显示- -时钟:50MHZ library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity lcd12864 is generic( div
8、ide_500k:integer:=100;-100分频后:500KHZ:2us cnt1_value:integer:=50 ); port( clk,reset:in std_logic;key:in std_logic_vector(1 downto 0); rs,rw,en:out std_logic; data:out std_logic_vector(7 downto 0) ); end entity; architecture behavior of lcd12864 is type word is array(0 to 15) of std_logic_vector(7 dow
9、nto 0);-数组中的左起第1个数为数组中的最低位对应的数,所以设置为array(0 to 3),而不是array(3 downto 0)。 type state is( set_dlnf,set_cursor,set_dcb,set_shift, set_ddram1,set_ddram2,set_ddram3,set_ddram4, write_xuexiao,write_zhuanye,write_mc,write_fh, over ); constant name1:word:=(10100001,11101111,10110100,11110011,11000001,1010110
10、0,11000011,11110001,11010111,11100101,11010001,10100111,11010100,10111010,10100001,11101111);-大连民族大学 constant name2:word:=(10100001,11101111,10110101,11100111,11010111,11010011,11010000,11000101,11001111,10100010,10111001,10100100,10110011,11001100,10100001,11101111);-电子信息工程 constant name3:word:=(11
11、001101,11110101,10111010,10110001,10100001,11101111,10100001,11101111,10100001,11101111,11001101,11110100,11010101,11010111,10111001,11111010);-李瑞constant name4:word:=(11010111,10100011,11000000,11001111,11001010,10100110,10111101,11011010,11001000,11010101,10111111,11101100,11000000,11010110,101000
12、11,10100001);-祝老师节日快乐constant name5:word:=(11010111,10100011,11000000,11001111,11001010,10100110,11001001,11101101,11001100,11100101,10111101,10100001,10111111,10110101,10100011,10100001);-祝老师身体健康constant name6:word:=(11010111,10100011,11000000,11001111,11001010,10100110,11001101,11110010,11001010,1
13、1000010,11001000,11100111,11010010,11100010,10100011,10100001);-祝老师万事如意constant name7:word:=(11010111,10100011,11000000,11001111,11001010,10100110,10111010,11001111,10111100,11010010,11010000,11010010,10111000,10100011,10100011,10100001);-祝老师阖家幸福signal pr_state:state; signal newclk:std_logic; begin
14、process(clk) is variable num:integer range 0 to divide_500k; begin if(clkevent and clk=1)then num:=num+1; if(num=divide_500k) then num:=0; end if; if(numdivide_500k/2) then-设置占空比 newclk=0; else newclk=1; end if; end if; end process; process(newclk,reset,pr_state,key) is variable cnt1:integer range 0
15、 to 100*cnt1_value:=0; variable cnt2:integer range 0 to 100:=0; begin if reset=0 then pr_state=set_dlnf;-把状态set_dlnf赋于pr_state cnt1:=0; cnt2:=0; en=0; rs=0; rw=0; data=00000001;-清屏 en cnt1:=cnt1+1; if(cnt1cnt1_value) then en=0; rs=0; -命令 rw=0; -写 elsif(cnt12*cnt1_value) then data=00110000; -选择8位数据基本
16、指令集:0x30 elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_state cnt1:=cnt1+1; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_value) then data=00001100; -整体显示设置:光标OFF 反光0FF:0x0c elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_st
17、ate cnt1:=cnt1+1; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_value) then data=00000001; -清除显示,并且认定地址指针为00h:0x01 elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_state cnt1:=cnt1+1; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_value) then data=00000110; -指定游标
18、的移动方向及指定显示的移位:0x06 elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_state cnt1:=cnt1+1; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_value) then data=10000000; -从第一行的第一个字开始显示:0x80 elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0;
19、pr_state cnt1:=cnt1+1; if cnt11*cnt1_value then en=0; rs=1; -选择数据 rw=0; elsif cnt12*cnt1_value thenif key=00 then data=name1(cnt2) ; -送数据 elsif key=01 then data=name1(cnt2); elsif key=10 then data=name3(cnt2);elsif key=11 then data=name4(cnt2);end if; elsif cnt120*cnt1_value then en=1; -在上升沿时,数据才能写入
20、液晶,所以要先送数据,再让使能端变高 elsif cnt1=20*cnt1_value then en=0; -通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。 cnt1:=0; cnt2:=cnt2+1; if cnt2=16 then pr_state cnt1:=cnt1+1; en=0; rw=0; rs=0; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_value) then data=10010000; -从第二行的第一个字开始显示:0x80 elsif(cnt120*cnt1_value) then en=1; els
21、if(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_state cnt1:=cnt1+1; if cnt11*cnt1_value then en=0; rs=1; -选择数据 rw=0; elsif cnt12*cnt1_value then if key=00 then data=name2(cnt2); -送数据elsif key=01 then data=name1(cnt2);elsif key=10 then data=name3(cnt2);elsif key=11 then data=name5(cnt2);end if; elsif c
22、nt120*cnt1_value then en=1; -在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高 elsif cnt1=20*cnt1_value then en=0; -通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。 cnt1:=0; cnt2:=cnt2+1; if cnt2=16 then pr_state cnt1:=cnt1+1; en=0; rw=0; rs=0; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_value) then data=10001000; -从第三行的第一个字开始显示:0x8
23、0 elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_state cnt1:=cnt1+1; if cnt11*cnt1_value then en=0; rs=1; -选择数据 rw=0; elsif cnt12*cnt1_value then if key=00 then data=name3(cnt2); -送数据elsif key=01 then data=name1(cnt2);elsif key=10 then data=name3(cnt2);elsif key
24、=11 then data=name6(cnt2); end if; elsif cnt120*cnt1_value then en=1; -在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高 elsif cnt1=20*cnt1_value then en=0; -通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。 cnt1:=0; cnt2:=cnt2+1; if cnt2=16 then pr_state cnt1:=cnt1+1; en=0; rw=0; rs=0; if(cnt1cnt1_value) then en=0; elsif(cnt12*cnt1_val
25、ue) then data=10011000; -从第四行的第一个字开始显示:0x80 elsif(cnt120*cnt1_value) then en=1; elsif(cnt1=20*cnt1_value) then en=0; cnt1:=0; pr_state cnt1:=cnt1+1; if cnt11*cnt1_value then en=0; rs=1; -选择数据 rw=0; elsif cnt12*cnt1_value then if key=00 then data=name4(cnt2); -送数据elsif key=01 then data=name1(cnt2);el
26、sif key=10 then data=name3(cnt2);elsif key=11 then data=name7(cnt2);end if; elsif cnt120*cnt1_value then en=1; -在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高 elsif cnt1=20*cnt1_value then en=0; -通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。 cnt1:=0; cnt2:=cnt2+1; if cnt2=16 then pr_state null; when others= en=Z; rs=Z; rw=Z; data
27、Z); cnt1:=0; cnt2:=0; end case; end if;end process; end architecture; 1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器7. 单片机控制的二级倒立摆系统的研究8. 基于增强型51系列单片机的TC
28、P/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO,2激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL
29、单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制32. 基于单片机系统的多功能温度测量仪的研制 33. 基
30、于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 4
31、6. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54. 基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器
32、研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压器油色谱在线监测技术研究 66. 基于单片机的膛壁温度报警系统设计 67. 基于AVR单片机的低压无功补偿控制器的设计 68. 基于单片机船舶电力推进电机监测系统 69. 基于单片机网络的振动信号的采集系统 70. 基于单片机的大容量数据存储技术的应用研究 71. 基于单片机的叠图机研究与教
33、学方法实践 72. 基于单片机嵌入式Web服务器技术的研究及实现 73. 基于AT89S52单片机的通用数据采集系统 74. 基于单片机的多道脉冲幅度分析仪研究 75. 机器人旋转电弧传感角焊缝跟踪单片机控制系统 76. 基于单片机的控制系统在PLC虚拟教学实验中的应用研究77. 基于单片机系统的网络通信研究与应用 78. 基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究79. 基于单片机的模糊控制器在工业电阻炉上的应用研究 80. 基于双单片机冲床数控系统的研究与开发 81. 基于Cygnal单片机的C/OS-的研究82. 基于单片机的一体化智能差示扫描量热仪系统研究 83. 基
34、于TCP/IP协议的单片机与Internet互联的研究与实现 84. 变频调速液压电梯单片机控制器的研究 85. 基于单片机-免疫计数器自动换样功能的研究与实现 86. 基于单片机的倒立摆控制系统设计与实现 87. 单片机嵌入式以太网防盗报警系统 88. 基于51单片机的嵌入式Internet系统的设计与实现 89. 单片机监测系统在挤压机上的应用 90. MSP430单片机在智能水表系统上的研究与应用 91. 基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用92. 单片机在高楼恒压供水系统中的应用 93. 基于ATmega16单片机的流量控制器的开发 94. 基于MSP430单片机的远程抄表系统及智能网络水表的设计95. 基于MSP430单片机具有数据存储与回放功能的嵌入式电子血压计的设计 96. 基于单片机的氨分解率检测系统的研究与开发 97. 锅炉的单片机控制系统 98. 基于单片机控制的电磁振动式播种控制系