液晶显示屏实验课程设计.docx

上传人:b****6 文档编号:6553433 上传时间:2023-01-07 格式:DOCX 页数:18 大小:744.10KB
下载 相关 举报
液晶显示屏实验课程设计.docx_第1页
第1页 / 共18页
液晶显示屏实验课程设计.docx_第2页
第2页 / 共18页
液晶显示屏实验课程设计.docx_第3页
第3页 / 共18页
液晶显示屏实验课程设计.docx_第4页
第4页 / 共18页
液晶显示屏实验课程设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

液晶显示屏实验课程设计.docx

《液晶显示屏实验课程设计.docx》由会员分享,可在线阅读,更多相关《液晶显示屏实验课程设计.docx(18页珍藏版)》请在冰豆网上搜索。

液晶显示屏实验课程设计.docx

液晶显示屏实验课程设计

 

《嵌入式系统》课程设计报告

液晶显示实验

系、部:

计算机与信息科学系

学生姓名:

欧阳万里

指导教师:

胡荣

专业:

计算机科学与技术

班级:

计本0702

完成时间:

2010年11月26日

 

 

第1章基础知识

1.1液晶显示屏原理

1.1.1液晶显示屏的LCD的使用原理和设置;

1.1.2液晶显示模块设计方法。

1.1.3查询有关课程设计汉字的国标码

1.1.4有关FPGA的知识

1.1.5端口的设计方法

1.1.6熟悉GW48系列SOPC/EDA实验开发系统及现代DSP实验开发系统的使用方法。

1.2课程设计题目:

液晶显示屏实验

1.2.1课程设计目的及基本要求

液晶显示屏已广泛应用于人们的日常生活中,在各种领域中起到越来越重要

的位置。

因此,掌握和控制液晶显示屏是非常重要的技能。

进行课程设计是加

强实践,提高动手能力的重要环节,通过课程设计,同时在软件编程,排错调

试,相关仪器设备的使用技术等方面得到全面的提高。

掌握液晶显示屏实现的

相关方法,为将来的实际工作打下一定的基础。

本课程设计是以SED1520控制器为基础,基本要求是:

1、掌握SED1520控制器基本结构

2、掌握液晶显示屏的工作原理及使用方法

3、掌握用VHDL语言编写程序

4、掌握QuartusII的使用方法

5、掌握GW48系列SOPC/EDA实验开发系统:

a:

闲置不用GW48系统时,必须关闭电源,拔下电源插头!

b:

在实验中,当选中某种模式后,要按一下右侧的复位键,以使系统进入

该结构模式工作。

c:

换目标芯片时要特别注意,不要插反或插错,也不要带电插拔,确信插

对后才能开电源。

其它接口都可带电插拔。

请特别注意,尽可能不要随

意插拔适配板,及实验系统上的其他芯片。

d:

并行口工作模式设置在“EPP”模式!

e:

跳线座“SPS”默认向下短路(PIO48);右侧开关默认拨向“TOMCU”。

f:

对于GW48-PK2系统,左下角拨码开关除第4档“DS8使能”向下拨(8数

码管显示)外,其余皆默认向上

1.3、设计要求

使用FPGA设计一个液晶显示屏LCD显示的控制器,使其能够显示文字、

数字或图形(根据需要选择LCD屏),至少需要显示“湖南工学院”字样。

其它功能可自行增加!

(型号GW48-PK2)

第2章设计内容提要及说明

2.1元件原理图

图1下载/编程接口电路图

图2液晶显示屏

2.1.1模块引脚说明

表1模块引脚

逻辑工作电压(VDD):

3.3~5.5V

电源地(GND):

0V

工作温度(Ta):

0~+50℃(常温)/-20~70℃(宽温)

2.1.2接口时序

模块有并行和串行两种连接方法(时序如下):

a)8位并行连接时序图

图3MPU写资料到模块

图4MPU从模块读出资料

串行连接时序图

图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)

2.1.3用户指令集

指令表1:

(RE=0:

基本指令集)

表3基本指令表

指令表2:

(RE=1:

扩充指令集)

表4扩充指令表

2.1.4FPGA与LCD连接方式

FPGA与LCD连接方式:

(仅PK2型含此)。

由实验电路结构图COM可知,默认情况下,

FPGA是通过89C51单片机控制LCD液晶显示的,但若FPGA中有Nios嵌入式系统,则能使

FPGA直接控制LCD显示。

方法是拔去此单片机(在右下侧),用连线将座JP22/JP21(LCD

显示器引脚信号)各信号分别与座JP19/JP20(FPGA引脚信号)相连接即可。

图6实验电路结构图COM

第3章系统硬件设计

本方案采用的FPGA为Alter公司的ACEX1K30芯片,它可提供系统的时钟及读写控制,

ACEX系列的FPGA由逻辑数组块LAB(Logicarrayblock)、嵌入式数组块EAB(embedded

arrayblock)、快速互联以及IO单元构成,每个逻辑数组块包含8个逻辑单元LE(logic

element)和一个局部互联[1]。

每个逻辑单元则由一个4输入查找表(LUT)、一个可

编程触发器、快速进位链、级连链组成,多个LAB和多个EAB则可通过快速通道互相连

接。

EAB是ACEX系列器件在结构设计上的一个重要部件,他是输入埠和输出埠都带有触

发器的一种灵活的RAM块,其主要功能是实现一些规模不太大的FIFO、ROM、RAM和双埠

RAM等。

在本液晶显示接口电路中,EAB主要用宏功能模块实现片上ROM。

它通过调用FPGA

上的EAB资源来实现汉字的显示和字符的存储,并根据控制信号产生的地址值从ROM中

读取字符值,然后送LCD显示器进行显示。

由于所用的图形点阵液晶块内置有SED1520

控制器,所以,其电路特性实际上就是SED1520的电路特性。

SED1520的主要特性如下:

(1)具有液晶显示行驱动器,具有16路行驱动输出,并可级联实现32行驱动。

(2)具有液晶显示列驱动器,共有61路列驱动输出。

(3)内置时序发生器,其占空比可设

置为1/16和1/32两种。

(4)内藏显示内存,显示内存内的数据可直接显示,"1"为显示,"0"为不显示。

(5)接口总线时序可适配8080系列或M6800系列,并可直接与计算机接口。

(6)操作简单,有13条控制指令。

(7)采用CMOS工艺,可在电压低至2.4-7.0V时正常工作,功耗仅30μW。

本设计所用的字符液晶模块CM12232由两块SED1520级连驱动,其中一个工作在主

工作方式下,另一个工作在从方式下,主工作方式SED1520负责上半屏16行的驱动和左

半屏的61列驱动,从工作方式的SED1520则负责下半屏16行的驱动和右半屏的61列驱

动,使能信号E1、E2用来区分具体控制的是那一片SED1520,其系统的硬件连接图如图

1所示。

由图1可见,该系统的硬件部分连接十分简单,其中FPGA部分没画出,而液晶

与FPGA的接口则可直接以网表的形式给出,将它们直接与FPGA的普通I/O引脚相连即

可。

系统的软件接口实现具体实现的重点是如何从存放有字符的ROM块中读出数据,并

按照液晶的时序正确的写入,在介绍具体实现方法前,首先要熟悉SED1520的指令。

SED1520的控制指令表

                     

第四章设计过程

4.1初始化部分的状态机设计

根据字符模块初始化的流程图:

图7LCD初始化流程图

4.2时钟模块的设计

由于FPGA开发板上自带的晶振频率为50MHZ,而所需要的时钟频率则需要小于13.9K。

因此需要一个分频器对其进行分频。

这里采用简单的计数器对其进行分频,通过分频器将外部输入的32MHZ的信号分成频率为153600HZ的信号。

在分频之后由于时钟信号需要同时控制LCD模块以及FPGA的模块,因此需要编写一个程序,使得两者之间同步。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYbaudIS

port(clk,resetb:

instd_logic;

bclk:

outstd_logic);

endbaud;

architectureBehavioralofbaudis

begin

process(clk,resetb)

variablecnt:

integer;

begin

ifresetb='1'then

cnt:

=0;bclk<='0';

elsifrising_edge(clk)then

ifcnt>=208thencnt:

=0;bclk<='1';

elsecnt:

=cnt+1;bclk<='0';

endif;

endif;

endprocess;

endbehavioral;

图8时钟模块

图9系统的仿真图形

4.3中文字符部分的数据模块

中文部分由于VHDL中无法识别中文,使用时需要参照中文字符表,将需要的字符所对应的数据输入RAM,然后通过和英文模块不重复的符号来实现对其的调用。

如“湖”这个中文字符,所对应国标码”bdad”,因此在函数部分应为:

constantdata_buf:

data_buffer:

=(x"bd",x"ad");

本程序驱动液晶显示“湖南工学院”“班级”“姓名”

“日期”

LibraryIEEE;

UseIEEE.STD_LOGIC_1164.ALL;

UseIEEE.STD_LOGIC_ARITH.ALL;

UseIEEE.STD_LOGIC_UNSIGNED.ALL;

entityLCDis

generic(divide_to_100k:

integer:

=1000);

Port(clk,rst:

inSTD_LOGIC;

Rw,rs,e,lcd_rst:

outSTD_LOGIC;

Lcd_data:

outSTD_LOGIC_VECTOR(7downto0));

endLCD;

architectureBehavioralofLCDis

signalclk_100k:

std_logic;

typestateis(s0,s1,s2,s3,s4);

signalcurrent_s:

state;

typedata_bufferisarray(0to43)ofstd_logic_vector(7downto0);

constantdata_buf:

data_buffer:

=(x"bd",x"ad",x"ce",x"f7",

x"c0",x"ed",x"b9",x"a4",

x"b4",x"f3",x"d1",x"a7",

x"d3",x"a6",x"d3",x"c3",

x"bf",x"c6",x"d1",x"a7",

x"d1",x"a7",x"d4",x"ba",

x"bf",x"ce",x"b3",x"cc",

x"c9",x"e8",x"bc",x"c6",

x"b0",x"e0",x"bc",x"b6",

x"d0",x"d5",x"c3",x"fb",

x"c8",x"d5",x"c6",x"da");

begin

process(clk)

variablecnt:

integerrange0todivide_to_100k;

begin

ifrising_edge(clk)thencnt:

=cnt+1;

ifcnt=divide_to_100kthencnt:

=0;

endif;

ifcnt

elseclk_100k<='1';

endif;

endif;

endprocess;

process(clk_100k)

variablecnt1:

integerrange0to500;

variablecnt1_1:

integerrange0to100;

variablecode_cnt:

integerrange0to13;

variabledata_cnt:

integerrange0to48;

begin

ifrising_edge(clk_100k)then

ifrst='1'thencurrent_s<=s0;cnt1:

=0;cnt1_1:

=0;

code_cnt:

=0;data_cnt:

=0;lcd_rst<='0';

elsecasecurrent_sis

whens0=>rw<='1';rs<='1';e<='1';cnt1:

=cnt1+1;

ifcnt1<250thenlcd_rst<='0';

elsifcnt1<500thenlcd_rst<='1';

elsifcnt1=500then

lcd_rst<='1';cnt1:

=0;current_s<=s1;

endif;

whens1=>cnt1_1:

=cnt1_1+1;

ifcnt1_1<1*3thene<='1';rs<='0';rw<='0';

elsifcnt1_1<2*3thenlcd_data<=x"0c";

elsifcnt1_1<10*3thene<='0';

elsifcnt1_1=10*3thencnt1_1:

=0;current_s<=s2;

endif;

whens2=>cnt1_1:

=cnt1_1+1;

ifcnt1_1<1*3thene<='1';rs<='0';rw<='0';

elsifcnt1_1<2*3thenlcd_data<=x"80";

elsifcnt1_1<10*3thene<='0';

elsifcnt1_1=10*3thencnt1_1:

=0;current_s<=s3;

endif;

whens3=>

ifcnt1_1<1*3thene<='1';rs<='1';rw<='0';

elsifcnt1_1<2*3thenlcd_data<=data_buf(data_cnt);

elsifcnt1_1=2*3thendata_cnt:

=data_cnt+1;

elsifcnt1_1<100thene<='0';

endif;

cnt1_1:

=cnt1+1;

ifcnt1_1=100thencnt1_1:

=0;

ifdata_cnt=16thencurrent_s<=s4;data_cnt:

=0;

endif;

endif;

whenothers=>current_s<=s0;

endcase;

endif;

endif;

endprocess;

endBehavioral;

图10显示文字的模块

 

图11系统的仿真图形

4.4图形的数据模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYlcdlinehoziIS

PORT(CLK,key3:

INSTD_LOGIC;

CK0,DISP,Hsync,Vsync:

OUTSTD_LOGIC;

rgb:

OUTSTD_LOGIC_VECTOR(0TO23)

);

END;

ARCHITECTUREWXOFlcdlinehoziIS

SIGNALCLK_TEMP1,CLK_TEMP2,CK:

STD_LOGIC;

SIGNALCNT1,CNT2:

STD_LOGIC_VECTOR(2DOWNTO0);

signalcnt:

std_logic_vector(1downto0);

SIGNALHS_CNT,VS_CNT:

INTEGERRANGE0TO525;

signalrgbx,rgby:

STD_LOGIC_VECTOR(0TO23);

CONSTANTTHp:

INTEGER:

=41;

CONSTANTTHb:

INTEGER:

=2;

CONSTANTTHf:

INTEGER:

=2;

CONSTANTTVp:

INTEGER:

=10;

CONSTANTTVb:

INTEGER:

=2;

CONSTANTTVF:

INTEGER:

=2;

CONSTANTTHd:

INTEGER:

=480;

CONSTANTTVd:

INTEGER:

=272;

BEGIN

PROCESS(key3)

BEGIN

IFkey3'eventandkey3='1'THEN

IFcnt="10"THENcnt<="00";

elsecnt<=cnt+1;endif;

endif;

endprocess;

process(cnt)

begin

ifcnt="00"thenrgb<="111111111111111111111111";

elsifcnt="01"thenrgb<=rgbx;

elsifcnt="10"thenrgb<=rgby;

elsergb<="000000000000000000000000";

endif;endprocess;

process(hs_cnt,vs_cnt)

begin

ifhs_cnt<102thenrgbx<="000000000000000000000000";

elsifhs_cnt<162thenrgbx<="000000000000000011111111";

elsifhs_cnt<222thenrgbx<="111111110000000000000000";

elsifhs_cnt<282thenrgbx<="000000001111111111111111";

elsifhs_cnt<342thenrgbx<="000000001111111100000000";

elsifhs_cnt<402thenrgbx<="111111110000000011111111";

elsifhs_cnt<462thenrgbx<="111111111111111100000000";

elsifhs_cnt<522thenrgbx<="111111111111111111111111";

elsergbx<="101010101010101010101010";

endif;

ifvs_cnt<43thenrgby<="000000000000000000000000";

elsifvs_cnt<75thenrgby<="000000000000000011111111";

elsifvs_cnt<107thenrgby<="111111110000000000000000";

elsifvs_cnt<139thenrgby<="000000001111111111111111";

elsifvs_cnt<171thenrgby<="000000001111111100000000";

elsifvs_cnt<203thenrgby<="111111110000000011111111";

elsifvs_cnt<235thenrgby<="111111111111111100000000";

elsifvs_cnt<267thenrgby<="111111111111111111111111";

elsergby<="101010101010101010101010";

endif;

endprocess;

CLOCK:

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNT1=2THENCNT1<="000";

ELSECNT1<=CNT1+1;ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='0'THEN

IFCNT2=2THENCNT2<="000";

ELSECNT2<=CNT2+1;ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNT1=0THENCLK_TEMP1<='1';

ELSIFCNT1=1THENCLK_TEMP1<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='0'THEN

IFCNT2=0THENCLK_TEMP2<='1';

ELSIFCNT2=1THENCLK_TEMP2<='0';

ENDIF;

ENDIF;

ENDPROCESS;

CK<=CLK_TEMP1ORCLK_TEMP2;

CK0<=CK;

PROCESS(CK)

BEGIN

IFCK'EVENTANDCK='1'THEN

IFHS_CNT=THp-1THEN

Hsync<='1';HS_CNT<=HS_CNT+1;

ELSIFHS_CNT=THp+THb+THd+THf-1THEN--524

HS_CNT<=0;Hsync<='0';

IFVS_CNT=TVp+TVb+TVd+TVf-1THEN--285VS

VS_CNT<=0;Vsync<='0';DISP<='1';

ELSIFVS_CNT=TVp-1THEN

Vsync<='1';VS_CNT<=VS_CNT+1;

ELSEVS_CNT<=VS_CNT+1;

ENDIF;

ELSEHS_CNT<=HS_CNT+1;

ENDIF;ENDIF;

ENDPROCESS;

ENDWX;

图12显示图像模块

图13系统的仿真图形

 

第5章课程设计总结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1