课程设计-基于FPGA的液晶显示控制器设计_第1页
课程设计-基于FPGA的液晶显示控制器设计_第2页
课程设计-基于FPGA的液晶显示控制器设计_第3页
课程设计-基于FPGA的液晶显示控制器设计_第4页
课程设计-基于FPGA的液晶显示控制器设计_第5页
已阅读5页,还剩18页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子信息工程专业专业综合课程设计基于FPGA的液晶显示控制器设计学院(系):信息与通信工程专业:电子信息工程-PAGE21-目录TOC\o"1-6"\h\u53371设计指标及要求 143291.1任务及要求 138351.2设计原理 192042系统硬件电路设计 2178392.1FPGA核心板 2214992.2液晶显示部分 3200492.3按键控制部分 5124303系统软件设计 549404系统调试 659174.1硬件调试 6282214.2软件调试 7197345结论 782086参考文献 717412附录一系统硬件电路图(原理图,PCB) 832558附录二实物照片 98081附录三系统完整程序代码 91设计指标及要求1.1任务及要求采用FPGA技术实现液晶的显示功能,要求学生选好液晶芯片,画出电路板,做好硬件电路后调试程序,基本功能要求显示字符,扩展功能是显示动画。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-DB7R/W=L,E=HDB0-DB7数据写到IR或DR

6 E 使能信号:R/W=L,E信号下降沿锁存到DB0-DB7;

R/W=H,E=H,DDRAM数据读到DB0-DB7

7 DB0~DB78位三态并行数据总线8 PSB PSB=H时为并行输入方式,PSB=L时为串行输入方式9RST复位端,低电平有效12864的信号功能表如下图所示:12864的工作时序如下图所示:2.3按键控制部分按键连接电路如下图所示:按键分别连接着FPGA芯片的I/O口,通过拨动按键使液晶显示不同的字符。3系统软件设计程序流程图如下图所示:4系统调试调试分为硬件调试和软件调试。4.1硬件调试1、上电之前,用万用表测试电源与地未短路。2、上电接通电路,指示灯正常点亮。3、但12864液晶屏背光灯点亮,却未出现正常阴影,将12864反插接入电路,液晶屏点亮,出现正常阴影,检查PCB及原理图发现12864引脚并未接错,于是参考已有12864的多种电路接法,更改板子上的12864电路,问题却仍得不到解决,最终发现是所用12864液晶屏自带电路已默认选择串行数据通信,而我们所采用的电路都是并行数据通信电路,将12864液晶屏自带电路改焊,液晶屏正常点亮。原先设计12864电路所加的用于调节液晶屏对比度的滑动变阻器,实际使用时,发现并未起作用,故将其去掉。4、向板子内烧录简单的显示程序,12864液晶屏正常显示出编写的内容。至此,硬件调试完成。4.2软件调试1、先根据整体思路确定了软件采用状态机的方式编写。然后查阅了12864液晶屏的使用手册以及EP4CE6E22芯片使用手册,确定了基本的操作要求,并根据要求进行了12864读数据写数据的程序编写,建成工程,完成编译,烧录进芯片,上电后,正确显示成功,完成了初步调试。2、画出了程序框图,然后将各部细节补充出来。3、正确的延时对于12864液晶屏的正确显示至关重要。要想延时正确就得先解决时序的问题,我们通过借鉴以往的学习EDA时所做的实验,直接套用了一个典型分频程序,解决了该问题。4、在程序里延时的正确使用是一大难点,因为VHDL语言仿真性极强,其独有的延时语句,多数只支持仿真状态,综合设计时并不能通过编译,无法实现,我们尝试了诸如for、loop、waituntil、waiton等语句都未能正常编译通过,最后采用if语句,计数延时才得以正确延时。5、最终,我们经过多次删改,基本完成了预期要实现的设计目标。5结论本设计硬件电路的使用比较简单,所用元器件较少,电路中使用了FPGA芯片和LCD12864液晶显示器等主要芯片,实现了预计的功能。在对芯片的管脚功能和用法有了充分的了解后,根据原先的选择好的设计要求设计硬件电路,包括FPGA控制电路、按键接口电路、显示电路。然后通过软件编程,实现了用按键进行控制,用液晶模块进行显示,基本完成了预期要实现的目标。6参考文献[1]潘松,黄继业.EDA技术实用教程——VHDL版[M].第四版.北京:科学出版社,2010.[2]赵俊超等.集成电路设计VHDL教程[M].北京

:北京希望电子出版社,2009.[3]李维是,郭强.液晶显示应用技术[M].北京:电子工业出版社,2011.附录一系统硬件电路图(原理图,PCB)附录二实物照片附录三系统完整程序代码12864液晶的显示时钟:50MHZlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitylcd12864isgeneric(divide_500k:integer:=100;--100分频后:500KHZ:2uscnt1_value:integer:=50);port(clk,reset:instd_logic; key:instd_logic_vector(1downto0);rs,rw,en:outstd_logic;data:outstd_logic_vector(7downto0));endentity;architecturebehavioroflcd12864istypewordisarray(0to15)ofstd_logic_vector(7downto0);--数组中的左起第1个数为数组中的最低位对应的数,所以设置为array(0to3),而不是array(3downto0)。typestateis(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);constantname1:word:=("10100001","11101111","10110100","11110011","11000001","10101100","11000011","11110001","11010111","11100101","11010001","10100111","11010100","10111010","10100001","11101111");--大连民族大学constantname2:word:=("10100001","11101111","10110101","11100111","11010111","11010011","11010000","11000101","11001111","10100010","10111001","10100100","10110011","11001100","10100001","11101111");--电子信息工程constantname3:word:=("11001101","11110101","10111010","10110001","10100001","11101111","10100001","11101111","10100001","11101111","11001101","11110100","11010101","11010111","10111001","11111010");--李瑞constantname4:word:=("11010111","10100011","11000000","11001111","11001010","10100110","10111101","11011010","11001000","11010101","10111111","11101100","11000000","11010110","10100011","10100001");--祝老师节日快乐constantname5:word:=("11010111","10100011","11000000","11001111","11001010","10100110","11001001","11101101","11001100","11100101","10111101","10100001","10111111","10110101","10100011","10100001");--祝老师身体健康constantname6:word:=("11010111","10100011","11000000","11001111","11001010","10100110","11001101","11110010","11001010","11000010","11001000","11100111","11010010","11100010","10100011","10100001");--祝老师万事如意constantname7:word:=("11010111","10100011","11000000","11001111","11001010","10100110","10111010","11001111","10111100","11010010","11010000","11010010","10111000","10100011","10100011","10100001");--祝老师阖家幸福signalpr_state:state;signalnewclk:std_logic;beginprocess(clk)isvariablenum:integerrange0todivide_500k;beginif(clk'eventandclk='1')thennum:=num+1;if(num=divide_500k)thennum:=0;endif;if(num<divide_500k/2)then--设置占空比newclk<='0';elsenewclk<='1';endif;endif;endprocess;process(newclk,reset,pr_state,key)isvariablecnt1:integerrange0to100*cnt1_value:=0;variablecnt2:integerrange0to100:=0;beginifreset='0'then pr_state<=set_dlnf;--把状态set_dlnf赋于pr_state cnt1:=0;cnt2:=0; en<='0'; rs<='0'; rw<='0';data<="00000001";--清屏 en<='1'; elsif(newclk'eventandnewclk='1')then casepr_stateis whenset_dlnf=>cnt1:=cnt1+1;if(cnt1<cnt1_value)thenen<='0';rs<='0';--命令rw<='0';--写elsif(cnt1<2*cnt1_value)thendata<="00110000";--选择8位数据基本指令集:0x30elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=set_cursor;endif;whenset_cursor=>cnt1:=cnt1+1;if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="00001100";--整体显示设置:光标OFF反光0FF:0x0celsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=set_dcb;endif;whenset_dcb=>cnt1:=cnt1+1;if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="00000001";--清除显示,并且认定地址指针为00h:0x01elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=set_shift;endif;whenset_shift=>cnt1:=cnt1+1;if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="00000110";--指定游标的移动方向及指定显示的移位:0x06elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=set_ddram1;endif;whenset_ddram1=>cnt1:=cnt1+1;if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="10000000";--从第一行的第一个字开始显示:0x80elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0; pr_state<=write_xuexiao; endif;whenwrite_xuexiao=>cnt1:=cnt1+1;ifcnt1<1*cnt1_valuethenen<='0';rs<='1';选择数据rw<='0';elsifcnt1<2*cnt1_valuethen ifkey="00"thendata<=name1(cnt2); 送数据elsifkey="01"thendata<=name1(cnt2);elsifkey="10"thendata<=name3(cnt2); elsifkey="11"thendata<=name4(cnt2); endif;elsifcnt1<20*cnt1_valuethenen<='1';在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高elsifcnt1=20*cnt1_valuethenen<='0';通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。cnt1:=0;cnt2:=cnt2+1;ifcnt2=16thenpr_state<=set_ddram2; cnt1:=0; cnt2:=0;endif;endif; whenset_ddram2=> cnt1:=cnt1+1; en<='0'; rw<='0'; rs<='0';if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="10010000";--从第二行的第一个字开始显示:0x80elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=write_zhuanye;endif;whenwrite_zhuanye=>cnt1:=cnt1+1;ifcnt1<1*cnt1_valuethenen<='0';rs<='1';选择数据rw<='0';elsifcnt1<2*cnt1_valuethen ifkey="00"thendata<=name2(cnt2);送数据 elsifkey="01"thendata<=name1(cnt2); elsifkey="10"thendata<=name3(cnt2); elsifkey="11"thendata<=name5(cnt2); endif; elsifcnt1<20*cnt1_valuethenen<='1';在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高elsifcnt1=20*cnt1_valuethenen<='0';通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。cnt1:=0;cnt2:=cnt2+1;ifcnt2=16thenpr_state<=set_ddram3; cnt1:=0; cnt2:=0;endif;endif; whenset_ddram3=> cnt1:=cnt1+1; en<='0'; rw<='0'; rs<='0';if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="10001000";--从第三行的第一个字开始显示:0x80elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=write_mc;endif;whenwrite_mc=>cnt1:=cnt1+1;ifcnt1<1*cnt1_valuethenen<='0';rs<='1';选择数据rw<='0';elsifcnt1<2*cnt1_valuethenifkey="00"thendata<=name3(cnt2);送数据 elsifkey="01"thendata<=name1(cnt2); elsifkey="10"thendata<=name3(cnt2); elsifkey="11"thendata<=name6(cnt2); endif;elsifcnt1<20*cnt1_valuethenen<='1';在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高elsifcnt1=20*cnt1_valuethenen<='0';通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。cnt1:=0;cnt2:=cnt2+1;ifcnt2=16thenpr_state<=set_ddram4; cnt1:=0; cnt2:=0;endif;endif;whenset_ddram4=> cnt1:=cnt1+1; en<='0'; rw<='0'; rs<='0';if(cnt1<cnt1_value)thenen<='0';elsif(cnt1<2*cnt1_value)thendata<="10011000";--从第四行的第一个字开始显示:0x80elsif(cnt1<20*cnt1_value)thenen<='1';elsif(cnt1=20*cnt1_value)thenen<='0';cnt1:=0;pr_state<=write_fh;endif;whenwrite_fh=>cnt1:=cnt1+1;ifcnt1<1*cnt1_valuethenen<='0';rs<='1';选择数据rw<='0';elsifcnt1<2*cnt1_valuethenifkey="00"thendata<=name4(cnt2);送数据 elsifkey="01"thendata<=name1(cnt2); elsifkey="10"thendata<=name3(cnt2); elsifkey="11"thendata<=name7(cnt2); endif;elsifcnt1<20*cnt1_valuethenen<='1';在上升沿时,数据才能写入液晶,所以要先送数据,再让使能端变高elsifcnt1=20*cnt1_valuethenen<='0';通过液晶的时序图知:使能端先低,送数据,使能端升高,再变低。cnt1:=0;cnt2:=cnt2+1;ifcnt2=16thenpr_state<=over; cnt1:=0; cnt2:=0;endif; endif; whenover=>null;whenothers=>en<='Z';rs<='Z';rw<='Z'; data<=(others=>'Z');cnt1:=0;cnt2:=0;endcase;endif;endprocess;endarchitecture;基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究基于单片机的一体化智能差示扫描量热仪系统研究基于TCP/IP协议的单片机与Internet互联的研究与实现变频调速液压电梯单片机控制器的研究基于单片机γ-免疫计数器自动换样功能的研究与实现基于单片机的倒立摆控制系统设计与实现单片机嵌入式以太网防盗报警系统基于51单片机的嵌入式Internet系统的设计与实现H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论