SOPC课程设计报告书-液晶显示屏LCD显示接口设计.doc_第1页
SOPC课程设计报告书-液晶显示屏LCD显示接口设计.doc_第2页
SOPC课程设计报告书-液晶显示屏LCD显示接口设计.doc_第3页
SOPC课程设计报告书-液晶显示屏LCD显示接口设计.doc_第4页
SOPC课程设计报告书-液晶显示屏LCD显示接口设计.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

赣南师院物理与电子信息学院SOPC课程设计报告书姓名: 匡远熹 班级:电子信息工程09级 学号: 090802015 时间:2011年 12 月 31 日论文题目液晶显示屏LCD显示接口设计课程论文要 求使用FPGA设计一个液晶显示屏LCD显示的控制器,使其能够显示文字、数字或图形(根据需要选择LCD屏)设计过程一、 元件原理图图1 下载/编程接口电路图图2 液晶显示屏二、 模块引脚说明表1 模块引脚逻辑工作电压(VDD):3.35.5V电源地(GND):0V工作温度(Ta):0+50(常温)/ -2070(宽温)三、 接口时序模块有并行和串行两种连接方法(时序如下):a) 8位并行连接时序图图3 MPU写资料到模块图4 MPU从模块读出资料a) 串行连接时序图图5 串行时序图表2 时钟周期表串行数据传送共分三个字节完成:第一字节:串口控制格式 11111ABC A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD。 B为数据类型选择: H表示数据室显示数据,L表示数据室控制指令 C固定为0第二字节:(并行)8位数据的高4位格式DDDD0000第三字节:(并行)8位数据的低4位格式DDDD0000串行接口时序参数:(测试条件: T=25 VDD=4.5V)四、 FPGA与LCD连接方式FPGA与LCD连接方式:(仅PK2型含此)。由实验电路结构图COM可知,默认情况下,FPGA是通过89C51单片机控制LCD液晶显示的,但若FPGA中有Nios嵌入式系统,则能使FPGA直接控制LCD显示。方法是拔去此单片机(在右下侧),用连线将座JP22/JP21(LCD显示器引脚信号)各信号分别与座JP19/JP20(FPGA引脚信号)相连接即可。图6 实验电路结构图COM五、 初始化部分的状态机设计根据字符模块初始化的流程图:图7 LCD初始化流程图六、 时钟模块的设计由于FPGA开发板上自带的晶振频率为50MHZ,而所需要的时钟频率则需要小于13.9K。因此需要一个分频器对其进行分频。这里采用简单的计数器对其进行分频,通过分频器将外部输入的32 MHZ的信号分成频率为153600HZ的信号。在分频之后由于时钟信号需要同时控制LCD模块以及FPGA的模块,因此需要编写一个程序,使得两者之间同步。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY baud IS port(clk,resetb:in std_logic; bclk:out std_logic);end baud;architecture Behavioral of baud isbeginprocess(clk,resetb)variable cnt:integer;beginif resetb=1 thencnt:=0;bclk=208 then cnt:=0;bclk=1;else cnt:=cnt+1;bclk=0;end if;end if;end process;end behavioral;图8 时钟模块图9 系统的仿真图形七、 中文字符部分的数据模块中文部分由于VHDL中无法识别中文,使用时需要参照中文字符表,将需要的字符所对应的数据输入RAM,然后通过和英文模块不重复的符号来实现对其的调用。constant data_buf : data_buffer := (xbd,xad);本程序驱动液晶显示“赣南师范学院课程设计” “班级”“姓名”“日期”Library IEEE;Use IEEE.STD_LOGIC_1164.ALL;Use IEEE.STD_LOGIC_ARITH.ALL;Use IEEE.STD_LOGIC_UNSIGNED.ALL;entity LCD isgeneric(divide_to_100k :integer:=1000);Port(clk, rst:in STD_LOGIC;Rw, rs, e, lcd_rst :out STD_LOGIC;Lcd_data:out STD_LOGIC_VECTOR(7 downto 0); end LCD;architecture Behavioral of LCD issignal clk_100k:std_logic;type state is(s0,s1,s2,s3,s4);signal current_s: state ;type data_buffer is array (0 to 43) of std_logic_vector ( 7 downto 0 ) ;constant data_buf : data_buffer := (xbd,xad,xce,xf7,xc0,xed,xb9,xa4, xb4,xf3,xd1,xa7,xd3,xa6,xd3,xc3,xbf,xc6,xd1,xa7, xd1,xa7,xd4,xba,xbf,xce,xb3,xcc,xc9,xe8,xbc,xc6, xb0,xe0,xbc,xb6, xd0,xd5,xc3,xfb, xc8,xd5,xc6,xda); beginprocess(clk)variable cnt:integer range 0 to divide_to_100k;beginif rising_edge(clk)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;process(clk_100k)variable cnt1:integer range 0 to 500;variable cnt1_1:integer range 0 to 100;variable code_cnt:integer range 0 to 13;variable data_cnt:integer range 0 to 48; beginif rising_edge(clk_100k)thenif rst = 1 then current_s = s0 ; cnt1 := 0 ;cnt1_1 := 0;code_cnt := 0 ; data_cnt := 0 ; lcd_rst rw= 1;rs = 1;e = 1;cnt1:=cnt1+1;if cnt1 250 then lcd_rst = 0;elsif cnt1 500 then lcd_rst = 1;elsif cnt1=500 then lcd_rst = 1;cnt1 := 0;current_s cnt1_1:=cnt1_1+1; if cnt1_1 1*3 then e = 1;rs = 0;rw = 0;elsif cnt1_12*3 then lcd_data=x0c;elsif cnt1_110*3 then e=0;elsif cnt1_1=10*3 then cnt1_1:=0;current_scnt1_1:=cnt1_1+1; if cnt1_11*3 then e=1;rs=0;rw=0;elsif cnt1_12*3 then lcd_data=x80;elsif cnt1_110*3 then e=0;elsif cnt1_1=10*3 then cnt1_1:=0;current_s if cnt1_11*3 then e=1;rs=1;rw=0;elsif cnt1_12*3 then lcd_data=data_buf(data_cnt);elsif cnt1_1=2*3 then data_cnt:= data_cnt+1;elsif cnt1_1100 then e=0;end if;cnt1_1:=cnt1+1;if cnt1_1=100 then cnt1_1:=0;if data_cnt=16 then current_scurrent_s=s0;end case;end if;end if;end process;end Behavioral;图10 显示文字的模块图11 系统的仿真图形八、 图形的数据模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY lcdlinehozi IS PORT( CLK,key3: IN STD_LOGIC; CK0,DISP,Hsync,Vsync:OUT STD_LOGIC; rgb:OUT STD_LOGIC_VECTOR(0 TO 23) ); END;ARCHITECTURE WX OF lcdlinehozi ISSIGNAL CLK_TEMP1,CLK_TEMP2,CK :STD_LOGIC ;SIGNAL CNT1,CNT2:STD_LOGIC_VECTOR(2 DOWNTO 0);signal cnt:std_logic_vector(1 downto 0);SIGNAL HS_CNT,VS_CNT:INTEGER RANGE 0 TO 525;signal rgbx,rgby: STD_LOGIC_VECTOR(0 TO 23);CONSTANT THp:INTEGER :=41;CONSTANT THb:INTEGER :=2;CONSTANT THf:INTEGER :=2;CONSTANT TVp:INTEGER :=10;CONSTANT TVb:INTEGER :=2;CONSTANT TVF:INTEGER :=2;CONSTANT THd:INTEGER :=480;CONSTANT TVd:INTEGER :=272;BEGINPROCESS(key3) BEGIN IF key3event and key3=1 THEN IF cnt=10 THEN cnt=00; else cnt=cnt+1; end if; end if; end process; process(cnt) begin if cnt=00 then rgb=111111111111111111111111; elsif cnt=01then rgb=rgbx; elsif cnt=10then rgb=rgby; else rgb=000000000000000000000000; end if;end process; process(hs_cnt,vs_cnt) begin if hs_cnt102 then rgbx=000000000000000000000000; elsif hs_cnt162 then rgbx=000000000000000011111111; elsif hs_cnt222 then rgbx=111111110000000000000000; elsif hs_cnt282 then rgbx=000000001111111111111111; elsif hs_cnt342 then rgbx=000000001111111100000000; elsif hs_cnt402 then rgbx=111111110000000011111111; elsif hs_cnt462 then rgbx=111111111111111100000000; elsif hs_cnt522 then rgbx=111111111111111111111111; else rgbx=101010101010101010101010; end if; if vs_cnt43 then rgby=000000000000000000000000; elsif vs_cnt75 then rgby=000000000000000011111111; elsif vs_cnt107 then rgby=111111110000000000000000; elsif vs_cnt139 then rgby=000000001111111111111111; elsif vs_cnt171 then rgby=000000001111111100000000; elsif vs_cnt203 then rgby=111111110000000011111111; elsif vs_cnt235 then rgby=111111111111111100000000; elsif vs_cnt267 then rgby=111111111111111111111111; else rgby=101010101010101010101010; end if; end process; CLOCK:PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1THEN IF CNT1=2 THEN CNT1=000; ELSE CNT1=CNT1+1;END IF; END IF; END PROCESS; PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=0 THEN IF CNT2=2 THEN CNT2=000; ELSE CNT2=CNT2+1;END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1 THEN IF CNT1=0 THEN CLK_TEMP1=1; ELSIF CNT1=1 THEN CLK_TEMP1=0; END IF; END IF; END PROCESS; PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=0THEN IF CNT2=0 THEN CLK_TEMP2=1; ELSIF CNT2=1 THEN CLK_TEMP2=0; END IF; END IF; END PROCESS; CK=CLK_TEMP1 OR CLK_TEMP2; CK0=CK; PROCESS(CK) BEGIN IF CKEVENT AND CK=1 THEN IF HS_CNT=THp-1 THEN Hsync=1; HS_CNT=HS_CNT+1; ELSIF HS_CNT=THp+THb+THd+THf-1 THEN-524 HS_CNT=0;Hsync=0; IF VS_CNT=TVp+TVb+TVd+TVf-1 THEN-285 VS VS_CNT=0;Vsync=0;DISP=1; ELSIF VS_CNT=TVp-1 THEN Vsync=1;VS_CNT=VS_CNT+1; ELSE VS_CNT=VS_CNT+1; END IF; ELSE HS_CNT=HS_CNT+1;END IF;END IF; END PROCESS; END WX;图12 显示图像模块图13 系统的仿真图形九、实验结果讨论心得这

温馨提示

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

评论

0/150

提交评论