1、 目 录1.课程设计目的 22.课程设计内容和要求 22.1 设计内容 22.2 设计要求 23.设计方案及实现情况 23.1 设计思路 23.2 工作原理及框图 33.3 各模块功能描述 33.4 仿真结果 103.5 实验箱验证情况 104.课程设计总结 125.参考文献 136.附录:液晶显示器简介 131、课程设计目的 (1)学习操作数字电路设计实验开发系统,掌握液晶显示器的工作原理及应用。(2)掌握组合逻辑电路、时序逻辑电路的设计方法。(3)学习掌握可编程器件设计的全过程。2、课程设计内容和要求:2.1、设计内容 用VHDL语言编写程序,利用拔码开头控制液晶显示器进行ASIC字符显示
2、。2.2、设计要求(1)学习掌握拔码开头控制模块、液晶显示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现ASIC字符的显示;(5)整理设计内容,编写设计说明书.3、设计方案及实现情况3.1、设计思路 运用VHDL语言进行各个模块的程序编写,该设计共有四个模块分别为:拨码模块;消抖模块;译码模块;显示模块.整个、模块共有四个单元电路组成为:图1 译码消抖液晶显示拨码控制图1 原理图3.2、工作原理及框图 图2 系统电路原理图 3.3、各模块功能描述 (1)拨
3、码模块 程序代码为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity bm1 is port( rst:in std_logic; xd: in std_logic; clk: in std_logic; xdout: out std_logic );end bm1;architecture a of bm1 is signal count:integer range 0 to 100; begin process(clk,rs
4、t,xd) begin if(rst=0)then count=0; xdout=0; elsif(clkevent and clk=1)then if(count=5)then count=0; xdout=not xd; else count=count+1; end if; end if; end process;end a;(2)消抖模块 程序代码为:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity xd isport(
5、 aj:in std_logic; rst:in std_logic; ajout:out std_logic_vector(4 downto 0) );end xd;architecture ajwork of xd issignal q: std_logic;signal count : std_logic_vector(4 downto 0);begin q=aj when rst=1else 0; process(q,rst) begin if(rst=0)then count=00000; elsif qevent and q=1 then if count=11111 then c
6、ount=00000; else count=count+1; end if; end if; ajout=count; end process; end ajwork; (3)译码模块 程序代码为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ym1 is port(ym:in std_logic_vector(4 downto 0); Y:out std_logic_vector(7 downto 0);end ym1;architecture yima_arch of ym1
7、 issignal a:std_logic_vector(4 downto 0);begin a=ym;Y=01000001 when ( a=00000 ) else 01000010 when ( a=00001 ) else 01000011 when ( a=00010 ) else 01000100 when ( a=00011 ) else 01000101 when ( a=00100 ) else 00100001 when ( a=00101 ) else 00100011 when ( a=00110 ) else 00100100 when ( a=00111 ) els
8、e 00100101 when ( a=01000 ) else 00100110 when ( a=01001 ) else 00100111 when ( a=01010 ) else 00101000 when ( a=01011 ) else 00101001 when ( a=01100 ) else 00101010 when ( a=01101 ) else 00101011 when ( a=01110 ) else 00101100 when ( a=01111 ) else 00101101 when ( a=10000 ) else 00101110 when ( a=1
9、0001 ) else 00101111 when ( a=10010 ) else 00110000 when ( a=10011 ) else 00110001 when ( a=10100 ) else 00110010 when ( a=10101 ) else 00110011 when ( a=10110 ) else 00110100 when ( a=10111 ) else 00110101 when ( a=11000 ) else 00110110 when ( a=11001 ) else 00110111 when ( a=11010 ) else 00111000
10、when ( a=11011 ) else 00111001 when ( a=11100 ) else 00111010 when ( a=11101 ) else 00111011 when ( a=11110 ) else 00111100 when ( a=11111 ) else 00110000;end yima_arch;(4)显示模块 程序代码为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY lcd ISPO
11、RT(busy:INSTD_LOGIC;clk_fsm :INSTD_LOGIC;db_ascii:INSTD_LOGIC_VECTOR(7 DOWNTO 0);req:OUTSTD_LOGIC;db:OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END lcd;ARCHITECTURE rtl OF lcd ISSIGNALready:STD_LOGIC;TYPEstate IS (CMD_SEND,XX_SEND,YY_SEND,ASCII_SEND); SIGNAL current_state:state;-SIGNAL db_send: std_logic_vecto
12、r(7 downto 0);BEGINPROCESS(clk_fsm,busy,ready,db_ascii) variable cnt1: std_logic_vector(2 downto 0); BEGIN -db_sendIF busy=0 THENIF ready=1 THEN current_state = XX_SEND;ready = 0;ELSEdb = 11111001;-F1req = 1;ready = 0;END IF;ELSEreq = 0;ready = 1;current_state IF busy=0 THENIF ready=1 THENcurrent_st
13、ate = YY_SEND;ready = 0;ELSEdb = 00001001;-07req = 1;ready = 0;END IF;ELSEreq = 0;ready = 1;current_state IF busy=0 THENIF ready=1 THENcurrent_state = ASCII_SEND;ready = 0;ELSEdb = 00000010;-02req = 1;ready = 0;END IF;ELSEreq = 0;ready =1;current_state IF busy=0 THENIF ready=1 THENcurrent_state = CM
14、D_SEND;ready = 0;ELSE db =db_ascii; req = 1;ready = 0; END IF;ELSEreq = 0;ready = 1;current_state = ASCII_SEND;END IF;END CASE;END IF;END PROCESS;END rtl;3.4、仿真结果 (1)液晶显示器仿真结果: 当BUSY信号有效时(BUSY=1),停止输出地址信号;当液晶模块处于空闲状态(BUSY=0)时,输出地址信号。BUSY=0,REQ=1,输出显示结果。(图3)图3 电路程序仿真图3.5、实验箱验证情况 (1)程序仿真编译成功后,再将FPGA芯片
15、与液晶显示器进行连线.(图4)图4 实验箱接线图(2)将程序仿真编译后下载到FPGA芯片,接通电源,液晶显示器显示,拔动拔码开头就可以在液晶屏上显示ASIC符号.(图5、图6、图7、图8、图9、图10、)图5 液晶显示的ASIC符号 图6 液晶显示的ASIC符号图7 液晶显示的ASIC符号 图8 液晶显示的ASIC符号 图9 液晶显示的ASIC符号 图10 液晶显示的ASIC符号4、课程设计总结 在此次课程设计中,通过对平时的课程讲解,资料的查阅以及在同学有帮助下基本完成了本次的课程设计。这次的课程设计让我认识到了在知识储备上还是明显的不足。在设计的过程中,我认真地完成了每一个步骤,并积极与同
16、学展开讨论和请教了学长进而完成了课程设计。通过本次课程设计,我了解了液晶显示屏的逻辑和时序控制要求,掌握液晶显示器的工作原理及应用及键盘控制模块的控制逻辑,并知道如何用它们设计一个基于FPGA的液晶显示驱动电路。还学习了操作数字电路设计实验开发系统的方法,巩固了组合逻辑电路、时序逻辑电路的设计方法,可编程器件设计的全过程。把理论和实践相结合,通过理论指导实践,在实践中理解理论,这是我们每个大学生都应该做到的一点。5、参考文献(1)侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计. 西安:西安电子科技大学出版社,1999(2)求是科技.CPLD/FPGA应用开发技术与工程实践. 北京:人民邮
17、电出版社,2005(3)罗苑棠.CPLD/FPGA常用模块与综合系统设计实例精讲. 北京:电子工业出版社,2007(4)基于FPGA的数字系统设计.西安:西安电子科技大学出版社,20086、附:液晶显示器简介OCMJ中文模块系列液晶显示器内含 GB 2312 16*16点阵国标一级简体汉字和 ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。 OCMJ中文模块系列液晶显示器也可用作一般的点阵图形显示器之用。提供有位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。 OCM
18、J中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。表1:OCMJ2X8(128X32)引脚说明引脚名称方向说明引脚名称方向说明1VLED+I背光源正极(LED+5V)8DB1I数据12VLED-I背光源负极(LED-OV)9DB2I数据23VSSI地10DB3I数据34VDDI(+5V)11DB4I数据45REQI请求信号,高电平有效12DB5I数据56BUSYO应答信号=1:已收到数据并正在处理中 =0:模块空闲,可接收数据13DB6I数据67DB0I数据014DB7I数据7硬件接口接口协议为 请求/应答(REQ/BUSY) 握
19、手方式。应答BUSY 高电平(BUSY =1) 表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断
20、地查询应答线BUSY是否为低(BUSY =0?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。如向模块发出一个完整的显示汉字的命令,包括坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节后才开始执行整个命令的内部操作,因此,最后一个字节的应答BUSY 高电平(BUSY =1)持续时间较长,具体的时序图参见 图-1,对应的具体时间参数说明参见 表-1图1:对模块写汉字时序图四、电性能参数1)表1模块时间参数表编号名称单位值说 明最小值最大值1TruS0.4-数据线上数据稳定时间2TbuS220最大模块响应时间3TrtuS11-最小REQ保持时间4Ts1uS2
21、045最大数据接收时间5Ts2mS-0.130*最大命令指令处理时间*:不同命令所占用的时间各不相同,具体时间在命令表中给出2)表2模块主要电气参数表编号名称单位值说 明2X84X85X101电源工作电压V5552电源电流mA2353输入引脚电压V5554最大输入电压建立时间uS1115最小复位电压持续时间uS666RES端高电平时间6复位内部处理时间mS151515此时模块不接收命令7背光电压V5558标称背光电流mA1201802509外接灰度调节电位器5K20010K用户命令 用户通过用户命令调用 OCMJ 系列液晶显示器的各种功能。命令分为操作码及操作数两部分,操作数为十六进制。共分为 3 类10 条。分别是:一)、字符显示命令:1、显示国标汉字;2、显示8X8 ASCII字符;3、显示8X16ASCII字符;二)、图形显示命令:4、显示位点阵;5、显示字节点阵;三)、屏幕控制命令:6、清屏;7、上移;8、下移; 9、左移;10、右移;(以下所示取值范围分别为:2X8、4X8、5X10的取值范围)显示窗口坐标关系以上列表为汉字、ASC码显示屏幕坐标(ASC码Y坐标一点阵坐标为准)如显示图形点阵,则以128*64(OCMJ4X8)或128*32(OCMJ2X8)点阵坐标为准,可在屏幕任意位置显示。外型尺寸图 (图11)图11 OCMJ2X8模块尺寸图- 15 -
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922