LCD课程设计128X64液晶显示程序设计.docx

上传人:b****8 文档编号:10197056 上传时间:2023-02-09 格式:DOCX 页数:23 大小:1.34MB
下载 相关 举报
LCD课程设计128X64液晶显示程序设计.docx_第1页
第1页 / 共23页
LCD课程设计128X64液晶显示程序设计.docx_第2页
第2页 / 共23页
LCD课程设计128X64液晶显示程序设计.docx_第3页
第3页 / 共23页
LCD课程设计128X64液晶显示程序设计.docx_第4页
第4页 / 共23页
LCD课程设计128X64液晶显示程序设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

LCD课程设计128X64液晶显示程序设计.docx

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

LCD课程设计128X64液晶显示程序设计.docx

LCD课程设计128X64液晶显示程序设计

 

《CPLD/FPGA》

课程设计报告

 

题目:

128X64液晶显示程序设计

院(系):

信息科学与工程学院

专业班级:

通信1001班

学生姓名:

訚鹏

学号:

20101181021

同组学生:

秦佩

指导教师:

吴莉

 

2013年10月14日至2013年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年月日

摘要…………………………………………………………………………………3

1.课程设计的目的…………………………………………………………………4

2.课程设计题目和要求……………………………………………………………4

3.课程设计报告内容………………………………………………………………4

3.1课程设计原理…………………………………………………………………4

3.2课程设计相关图………………………………………………………………5

3.3课程设计程序…………………………………………………………………6

3.4课程设计的结果………………………………………………………………14

3.5课程设计的波形仿真…………………………………………………………15

4.课程设计所遇到的问题及解决方案…………………………………………15

5.课程设计总结……………………………………………………………………17

 

摘要

在硬件电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体出发,自上至下地将设计任务分为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。

本课设主要是基于FPGA的128X64的液晶显示控制器。

控制部分采用VHDL语言编写,主体程序采用状态机作为主要控制方式。

关键字:

VHDL,状态机,12864

1课程设计的目的

通过对液晶屏的安装调试,需学习掌握:

(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)进行分频的模块):

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNTIS

PORT(CLK:

INSTD_LOGIC;

FREQ1:

OUTSTD_LOGIC;

FREQ488:

OUTSTD_LOGIC;

FREQ1953:

OUTSTD_LOGIC;

FREQ7812:

OUTSTD_LOGIC;

FREQ31250:

OUTSTD_LOGIC;

FREQ125K:

OUTSTD_LOGIC;

FREQ500K:

OUTSTD_LOGIC);

ENDCNT;

ARCHITECTUREBEHVOFCNTIS

SIGNALTEMP:

STD_LOGIC_VECTOR(19DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFTEMP="11110100001000111111"THEN

TEMP<="00000000000000000000";

ELSE

TEMP<=TEMP+1;

ENDIF;

ENDIF;

ENDPROCESS;

FREQ1<=TEMP(19);

FREQ488<=TEMP(10);

FREQ1953<=TEMP(8);

FREQ7812<=TEMP(6);

FREQ31250<=TEMP(4);

FREQ125K<=TEMP

(2);

FREQ500K<=TEMP(0);

ENDBEHV;

2.FREQ模块:

是通过元件例化将各个功能模块组合在一起的。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFREQIS

PORT(CLK:

INSTD_LOGIC;

FSIN:

INSTD_LOGIC;

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

ENDFREQ;

ARCHITECTUREBEHVOFFREQIS

COMPONENTTESTCTL

PORT(CLK:

INSTD_LOGIC;

TSTEN:

OUTSTD_LOGIC;

CLR_CNT:

OUTSTD_LOGIC;

LOAD:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCNT10

PORT(CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

ENA:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CARRY_OUT:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTREG32B

PORT(LOAD:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

ENDCOMPONENT;

SIGNALLOAD1,TSTEN1,CLR_CNT1:

STD_LOGIC;

SIGNALDTO1:

STD_LOGIC_VECTOR(31DOWNTO0);

SIGNALCARRY_OUT1:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

U1:

TESTCTLPORTMAP(CLK=>CLK,TSTEN=>TSTEN1,CLR_CNT=>CLR_CNT1,LOAD=>LOAD1);

U2:

REG32BPORTMAP(LOAD=>LOAD1,DIN=>DTO1,DOUT=>DOUT);

U3:

CNT10PORTMAP(CLK=>FSIN,CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(3DOWNTO0),CARRY_OUT=>CARRY_OUT1(0));

U4:

CNT10PORTMAP(CLK=>CARRY_OUT1(0),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(7DOWNTO4),CARRY_OUT=>CARRY_OUT1

(1));

U5:

CNT10PORTMAP(CLK=>CARRY_OUT1

(1),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(11DOWNTO8),CARRY_OUT=>CARRY_OUT1

(2));

U6:

CNT10PORTMAP(CLK=>CARRY_OUT1

(2),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(15DOWNTO12),CARRY_OUT=>CARRY_OUT1(3));

U7:

CNT10PORTMAP(CLK=>CARRY_OUT1(3),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(19DOWNTO16),CARRY_OUT=>CARRY_OUT1(4));

U8:

CNT10PORTMAP(CLK=>CARRY_OUT1(4),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(23DOWNTO20),CARRY_OUT=>CARRY_OUT1(5));

U9:

CNT10PORTMAP(CLK=>CARRY_OUT1(5),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(27DOWNTO24),CARRY_OUT=>CARRY_OUT1(6));

U10:

CNT10PORTMAP(CLK=>CARRY_OUT1(6),CLR=>CLR_CNT1,ENA=>TSTEN1,

CQ=>DTO1(31DOWNTO28));

ENDBEHV;

 

3.分频模块(50MHZ经过50分频得到1MHZ)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitypin1mhzis

port(clkin:

instd_logic;

clkout:

outstd_logic);

endpin1mhz;

architectureaofpin1mhzis

begin

process(clkin)

variablecnttemp:

integerrange0to49;

begin

ifclkin='1'andclkin'eventthen

ifcnttemp=49thencnttemp:

=0;

else

ifcnttemp<25thenclkout<='1';

elseclkout<='0';

endif;

cnttemp:

=cnttemp+1;

endif;

endif;

endprocess;

endarchitecturea;

4.显示模块(由状态机来完成液晶屏的时序)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useIEEE.STD_LOGIC_ARITH.ALL;

entityclock_lcd_dispis

generic(divide_to_100k:

integer:

=500);

port(clk:

instd_logic;

DATAIN:

instd_logic_vector(31downto0);

rw,rs,e,lcd_rst:

outstd_logic;

lcd_data:

outstd_logic_vector(7downto0));

endclock_lcd_disp;

architecturetclofclock_lcd_dispis

signalclk_100k:

std_logic;

signalclkout:

std_logic;

signaltemp:

std_logic_vector(7downto0);

typestateis

(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);

signalcurrent_s:

state;

typedata_bufferisarray(0to15)of

std_logic_vector(7downto0);

typedata_buffer1isarray(0to7)of

std_logic_vector(7downto0);

signaltime:

std_logic_vector(23downto0);

signaldisp_time:

data_buffer1:

=(

x"31",x"32",x"3a",x"33",

x"34",x"3a",x"35",x"36");

constantdata_buf0:

data_buffer:

=

(x"c6",x"b5",x"c2",x"ca",--频率

x"20",x"20",x"20",x"20",--空格

x"20",x"20",x"20",x"20",

x"20",x"20",x"20",x"20");

constantdata_buf1:

data_buffer:

=

(x"20",x"20",x"20",x"20",--

x"20",x"20",x"20",x"20",

x"20",x"20",x"20",x"20",

x"20",x"20",x"20",x"20");

constantdata_buf2:

data_buffer:

=

(x"c7",x"d8",x"c5",x"e5",--秦佩

x"a1",x"aa",x"a1",x"aa",--——

x"d1",x"d4",x"c5",x"f4",--訚鹏

x"20",x"20",x"20",x"20");

begin

--U1:

divclk1portmap(clk,clk_100k);

process(clk)

variablecnt:

integerrange0todivide_to_100k;

begin

if(clk'eventandclk='1')thencnt:

=cnt+1;

if(cnt=divide_to_100k)thencnt:

=0;

endif;

if(cnt

elseclk_100k<='1';

endif;

endif;

endprocess;

disp_time(7)<=DATAIN(3downto0)+x"30";

disp_time(6)<=DATAIN(7downto4)+x"30";

disp_time(5)<=DATAIN(11downto8)+x"30";

disp_time(4)<=DATAIN(15downto12)+x"30";

disp_time(3)<=DATAIN(19downto16)+x"30";

disp_time

(2)<=DATAIN(23downto20)+x"30";

disp_time

(1)<=DATAIN(27downto24)+x"30";

disp_time(0)<=DATAIN(31downto28)+x"30";

read_time:

process(time)

begin

endprocess;

process(clk_100k)

variablecnt1:

integerrange0to10000;

variablecnt_1:

integerrange0to1000;

variablecode_cnt:

integerrange0to13;

variabledata_cnt:

integerrange0to480;

begin

if(clk_100k'eventandclk_100k='1')then

casecurrent_sis

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

=cnt1+1;

ifcnt1<500thenlcd_rst<='0';

elsifcnt1<1000thenlcd_rst<='1';

elsifcnt1=1000then

lcd_rst<='1';cnt1:

=0;current_s<=s1;

endif;

whens1=>cnt_1:

=cnt_1+1;

ifcnt_1<1*3then

e<='1';rs<='0';rw<='0';

elsifcnt_1<2*3then

lcd_data<=x"0c";

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

elsifcnt_1=10*3then

cnt_1:

=0;current_s<=s2;

endif;

whens2=>cnt_1:

=cnt_1+1;

ifcnt_1<1*3then

e<='1';rs<='0';rw<='0';

elsifcnt_1<2*3then

lcd_data<=x"90";

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

elsifcnt_1=10*3then

cnt_1:

=0;current_s<=s3;

endif;

whens3=>

ifcnt_1<1*3then

e<='1';rs<='1';rw<='0';

elsifcnt_1<2*3then

lcd_data<=data_buf1(data_cnt);

elsifcnt_1=2*3then

data_cnt:

=data_cnt+1;

elsifcnt_1<100thene<='0';

endif;

cnt_1:

=cnt_1+1;

ifcnt_1=100thencnt_1:

=0;

ifdata_cnt=16then

current_s<=s4;

data_cnt:

=0;

endif;

endif;

whens4=>cnt_1:

=cnt_1+1;

ifcnt_1<1*3then

e<='1';rs<='0';rw<='0';

elsifcnt_1<2*3then

lcd_data<=x"88";

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

elsifcnt_1=10*3then

cnt_1:

=0;current_s<=s5;

endif;

whens5=>

ifcnt_1<1*3then

e<='1';rs<='1';rw<='0';

elsifcnt_1<2*3then

lcd_data<=data_buf2(data_cnt);

elsifcnt_1=2*3then

data_cnt:

=data_cnt+1;

elsifcnt_1<100thene<='0';

endif;

cnt_1:

=cnt_1+1;

ifcnt_1=100thencnt_1:

=0;

ifdata_cnt=16then

current_s<=s6;

data_cnt:

=0;

endif;

endif;

whens6=>cnt_1:

=cnt_1+1;

ifcnt_1<1*3then

e<='1';rs<='0';rw<='0';

elsifcnt_1<2*3then

lcd_data<=x"80";

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

elsifcnt_1=10*3then

cnt_1:

=0;current_s<=s7;

endif;

whens7=>

ifcnt_1<1*3then

e<='1';rs<='1';rw<='0';

elsifcnt_1<2*3then

lcd_data<=data_buf0(data_cnt);

elsifcnt_1=2*3then

data_cnt:

=data_cnt+1;

elsifcnt_1<100thene<='0';

endif;

cnt_1:

=cnt_1+1;

ifcnt_1=100thencnt_1:

=0;

ifdata_cnt=16then

current_s<=s8;

data_cnt:

=0;

endif;

endif;

--动态显示

whens8=>cnt_1:

=cnt_1+1;

ifcnt_1<1*3then

e<='1';rs<='0';rw<='0';

elsifcnt_1<5*3then

lcd_data<=x"90";

elsifcnt_1<20*3thene<='0';

el

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

当前位置:首页 > 高等教育 > 文学

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

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