LCD课程设计---128X64液晶显示程序设计.doc_第1页
LCD课程设计---128X64液晶显示程序设计.doc_第2页
LCD课程设计---128X64液晶显示程序设计.doc_第3页
LCD课程设计---128X64液晶显示程序设计.doc_第4页
LCD课程设计---128X64液晶显示程序设计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

CPLD/FPGA 课程设计报告题 目: 128X64液晶显示程序设计 院 (系): 信息科学与工程学院 专业班级: 通信1001班 学生姓名: 訚 鹏 学 号: 20101181021 同组学生: 秦 佩 指导教师: 吴 莉 20 13 年 10 月 14 日至20 13 年 10 月 25 日 华中科技大学武昌分校制 128X64液晶显示程序设计 课程设计任务书一、设计(调查报告/论文)题目128X64液晶显示程序设计二、设计(调查报告/论文)主要内容下述设计内容需由学生个人独立完成:1设计EP1C6Q240C8控制128X64液晶屏显示电路原理图;2分析128X64液晶工作原理;3能按要求进行元器件的焊接; 4. 能正确处理安装与调试过程中所遇到的问题;三、原始资料1. 通信与电子系统实验指导书;2. 128X64液晶显示电路制作套件。四、要求的设计(调查/论文)成果1元件布局美观,硬件焊接可靠,无虚焊,短路;2. 能在液晶屏上正确显示相关文字信息;3结合实际编出具有特色功能程序,程序结构合理,语言简洁,格式规范,注释详细; 4. 按要求完成课程设计报告,格式符合学校规范标准,字数不少于2000字。五、进程安排第 1 天 理论讲解,材料发放,学生进行元器件清理并检测;第 2天 安装焊接,电路调试,硬件故障排查;第 3 天,软件编程调试;第4-5 天 调测,验收,评分。六、主要参考资料1 陈曦. 通信与电子系统实验指导书,武汉:华中科技大学武昌分校.2 谭会生.EDA技术及应用,西安:西安电子科技大学出版社,2010.3 潘松,黄继业.EDA技术与VHDL,北京:清华大学出版社,2009.指导教师(签名):20 年 月 日19 目 录摘 要31.课程设计的目的42.课程设计题目和要求43.课程设计报告内容43.1课程设计原理43.2课程设计相关图53.3课程设计程序63.4课程设计的结果143.5课程设计的波形仿真154. 课程设计所遇到的问题及解决方案 155. 课程设计总结17摘 要 在硬件电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体出发,自上至下地将设计任务分为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。 本课设主要是基于FPGA的128X64的液晶显示控制器。控制部分采用VHDL语言编写,主体程序采用状态机作为主要控制方式。关键字:VHDL,状态机,128641 课程设计的目的通过对液晶屏的安装调试,需学习掌握:(1) 液晶屏显示文字的整体设计流程。(2) Quartus2软件的调试方法及相关工具的使用。(3) 液晶屏LCD12864的使用方法。(4) 各种常见元器件的选择及使用。2 课程设计题目描述和要求题目描述:频率计的设计制作要求:用VHDL编程控制LCD12864显示的频率计。(1) 用LCD12864显示“频率及姓名”等内容。(2) 显示过程:实验板通电开机后,下载运行之后,LCD显示器显示“频率及姓名”,本组成员等内容。(3) 熟悉单片机系统的工作原理及调测方法。软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课设报告。3 课程设计报告内容3.1 课程设计原理 该设计分为三个模块:信号源模块,频率计模块,显示模块。通过软件程序下载运行在LCD上显示频率等信息。采用一个标准的基准时钟,在单位时间如(1s)里对被测信号的脉冲数进行计数,即为信号的频率。由于闸门起始和结束时刻对于信号来说是随机的,将会有一个脉冲周期的量化误差。进一步分析测量准确度:设待测信号脉冲周期为TX,频率为FX,当测量时间为T=1s时,测量精度为&=TX/T =1/FX.由此可知直接测频法的测量准确度与信号的频率有关:当代侧信号频率较高时,测量准确度也较高。反之测量准确度较低。因此直接测频法适合频率较高的信号,不能满足在整个测量频段内的测量进度保持不变的要求。若要得到整个频段内较高的精确度,应该考虑等精度测量等其他方法。最后将测得的频率送到显示部分显示。3.2课设相关图(1)顶层原理图(2)频率计原理图(3) 引脚匹配(4)硬件电路 3.3课程设计程序1.信号源模块(信号源是为了产生1HZ的门控信号和待测的定频信号,而对输入系统时钟clk(50MHZ)进行分频的模块):LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT ISPORT(CLK :IN STD_LOGIC; FREQ1 :OUT STD_LOGIC; FREQ488 :OUT STD_LOGIC; FREQ1953 :OUT STD_LOGIC; FREQ7812 :OUT STD_LOGIC; FREQ31250:OUT STD_LOGIC; FREQ125K :OUT STD_LOGIC; FREQ500K :OUT STD_LOGIC);END CNT;ARCHITECTURE BEHV OF CNT IS SIGNAL TEMP: STD_LOGIC_VECTOR(19 DOWNTO 0);BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1 THEN IF TEMP=11110100001000111111 THEN TEMP=00000000000000000000; ELSE TEMP=TEMP+1; END IF; END IF; END PROCESS; FREQ1=TEMP(19); FREQ488=TEMP(10); FREQ1953=TEMP(8); FREQ7812=TEMP(6); FREQ31250=TEMP(4); FREQ125K=TEMP(2); FREQ500KCLK,TSTEN=TSTEN1,CLR_CNT=CLR_CNT1,LOAD=LOAD1); U2: REG32B PORT MAP(LOAD=LOAD1,DIN=DTO1,DOUT=DOUT); U3: CNT10 PORT MAP(CLK=FSIN,CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(3 DOWNTO 0),CARRY_OUT=CARRY_OUT1(0); U4: CNT10 PORT MAP(CLK=CARRY_OUT1(0),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(7 DOWNTO 4),CARRY_OUT=CARRY_OUT1(1); U5: CNT10 PORT MAP(CLK=CARRY_OUT1(1),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(11 DOWNTO 8),CARRY_OUT=CARRY_OUT1(2); U6: CNT10 PORT MAP(CLK=CARRY_OUT1(2),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(15 DOWNTO 12),CARRY_OUT=CARRY_OUT1(3); U7: CNT10 PORT MAP(CLK=CARRY_OUT1(3),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(19 DOWNTO 16),CARRY_OUT=CARRY_OUT1(4); U8: CNT10 PORT MAP(CLK=CARRY_OUT1(4),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(23 DOWNTO 20),CARRY_OUT=CARRY_OUT1(5); U9: CNT10 PORT MAP(CLK=CARRY_OUT1(5),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(27 DOWNTO 24),CARRY_OUT=CARRY_OUT1(6); U10: CNT10 PORT MAP(CLK=CARRY_OUT1(6),CLR=CLR_CNT1,ENA=TSTEN1, CQ=DTO1(31 DOWNTO 28);END BEHV;3.分频模块(50MHZ经过50分频得到1MHZ)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pin1mhz is port(clkin : in std_logic; clkout : out std_logic);end pin1mhz;architecture a of pin1mhz isbeginprocess(clkin)variable cnttemp: integer range 0 to 49;begin if clkin=1 and clkinevent then if cnttemp=49 then cnttemp:=0; else if cnttemp25 then clkout=1; else clkout=0; end if; cnttemp:=cnttemp+1; end if; end if;end process;end architecture a;4.显示模块(由状态机来完成液晶屏的时序)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity clock_lcd_disp is generic(divide_to_100k:integer:=500); port(clk:in std_logic; DATAIN:in std_logic_vector(31 downto 0); rw,rs,e,lcd_rst:out std_logic; lcd_data:out std_logic_vector(7 downto 0); end clock_lcd_disp;architecture tcl of clock_lcd_disp is signal clk_100k:std_logic; signal clkout:std_logic; signal temp:std_logic_vector(7 downto 0); type state is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12); signal current_s:state; type data_buffer is array(0 to 15)of std_logic_vector(7 downto 0); type data_buffer1 is array(0 to 7)of std_logic_vector(7 downto 0); signal time:std_logic_vector(23 downto 0); signal disp_time:data_buffer1:=( x31,x32,x3a,x33, x34,x3a,x35,x36); constant data_buf0:data_buffer:=(xc6,xb5,xc2,xca, -频率 x20,x20,x20,x20, -空格 x20,x20,x20,x20, x20,x20,x20,x20); constant data_buf1:data_buffer:=(x20,x20,x20,x20, - x20,x20,x20,x20, x20,x20,x20,x20, x20,x20,x20,x20); constant data_buf2:data_buffer:=(xc7,xd8,xc5,xe5, -秦佩 xa1,xaa,xa1,xaa, - xd1,xd4,xc5,xf4, -訚鹏 x20,x20,x20,x20); begin-U1:divclk1 port map(clk,clk_100k);process(clk) variable cnt:integer range 0 to divide_to_100k; begin if(clkevent and clk=1)then cnt:=cnt+1; if(cnt=divide_to_100k)then cnt:=0; end if; if(cntdivide_to_100k/2) then clk_100k=0; else clk_100k=1; end if; end if;end process; disp_time(7)=DATAIN(3 downto 0)+x30; disp_time(6)=DATAIN(7 downto 4)+x30; disp_time(5)=DATAIN(11 downto 8)+x30; disp_time(4)=DATAIN(15 downto 12)+x30; disp_time(3)=DATAIN(19 downto 16)+x30; disp_time(2)=DATAIN(23 downto 20)+x30; disp_time(1)=DATAIN(27 downto 24)+x30; disp_time(0)rw=1;rs=1;e=1;cnt1:=cnt1+1; if cnt1500 then lcd_rst=0; elsif cnt11000 then lcd_rst=1; elsif cnt1=1000 then lcd_rst=1;cnt1:=0;current_scnt_1:=cnt_1+1; if cnt_11*3 then e=1;rs=0;rw=0; elsif cnt_12*3 then lcd_data=x0c; elsif cnt_110*3 then e=0; elsif cnt_1=10*3 then cnt_1:=0;current_scnt_1:=cnt_1+1; if cnt_11*3 then e=1;rs=0;rw=0; elsif cnt_12*3 then lcd_data=x90; elsif cnt_110*3 then e=0; elsif cnt_1=10*3 then cnt_1:=0;current_s if cnt_11*3 then e=1;rs=1;rw=0; elsif cnt_12*3 then lcd_data=data_buf1(data_cnt); elsif cnt_1=2*3 then data_cnt:=data_cnt+1; elsif cnt_1100 then e=0; end if; cnt_1:=cnt_1+1; if cnt_1=100 then cnt_1:=0; if data_cnt=16 then current_scnt_1:=cnt_1+1; if cnt_11*3 then e=1;rs=0;rw=0; elsif cnt_12*3 then lcd_data=x88; elsif cnt_110*3 then e=0; elsif cnt_1=10*3 then cnt_1:=0;current_s if cnt_11*3 then e=1;rs=1;rw=0; elsif cnt_12*3 then lcd_data=data_buf2(data_cnt); elsif cnt_1=2*3 then data_cnt:=data_cnt+1; elsif cnt_1100 then e=0; end if; cnt_1:=cnt_1+1; if cnt_1=100 then cnt_1:=0; if data_cnt=16 then current_scnt_1:=cnt_1+1; if cnt_11*3 then e=1;rs=0;rw=0; elsif cnt_12*3 then lcd_data=x80; elsif cnt_110*3 then e=0; elsif cnt_1=10*3 then cnt_1:=0;current_s if cnt_11*3 then e=1;rs=1;rw=0; elsif cnt_12*3 then lcd_data=data_buf0(data_cnt); elsif cnt_1=2*3 then data_cnt:=data_cnt+1; elsif cnt_1100 then e=0; end if; cnt_1:=cnt_1+1; if cnt_1=100 then cnt_1:=0; if data_cnt=16 then current_scnt_1:=cnt_1+1; if cnt_11*3 then e=1;rs=0;rw=0; elsif cnt_15*3 then lcd_data=x90; elsif cnt_120*3 then e=0; elsif cnt_1=20*3 then cnt_1:=0;current_s if cnt_11*3 then e=1;rs=1;rw=0; elsif cnt_12*3 then lcd_data=disp_time(data_cnt); elsif cnt_1=2*3 then data_cnt:=data_cnt+1; elsif cnt_1100 then e=0; end if; cnt_1:=cnt_1+1; if cnt_1=100 then cnt_1:=0; if data_cnt=8 then current_scurrent_s=s0; end case; end if;end process;end tcl; 3.4课程设计结果3.5课程设计的波形仿真上图中可以很明显的看到显示模块程序的S1这个状态,根据程序来观察时序图,发现时序与程序一致,并且满足液晶屏要显示文字的条件。4 课程设计所遇到的问题以及解决方案4.1液晶屏只亮却不显示文字焊接后液晶屏能够正常显示文字,但一段时间后却不能够正常显示。经过电压表测量后,焊接电路没有问题,后发现是FPGA芯片出故障,有可能是下载程序时操作失误所引起的。4.2状态的转变在显示模块中有多个状态,理解起来有一定难度,并且每个状态所需的时间很难把握,所以要花时间在液晶屏的使用特性上。经反复研究发现,要想成功发送数据,那么每个状态的时间应当大于液晶屏资料说明中的并行时序图中的Tc=1200ns,否则变化的太快,数据来不及发送,就会出现故障。这就要求我们在编写程序时要考虑到进程的触发时钟信号的频率,以及每个状态所用的时间。4.3用户指令集 在编写程序时要弄清楚液晶屏的显示过程,要仔细阅读用户指令集,清楚每条指令是做什么。并且在焊

温馨提示

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

评论

0/150

提交评论