LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx

上传人:b****5 文档编号:18558991 上传时间:2022-12-27 格式:DOCX 页数:20 大小:1.33MB
下载 相关 举报
LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx_第1页
第1页 / 共20页
LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx_第2页
第2页 / 共20页
LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx_第3页
第3页 / 共20页
LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx_第4页
第4页 / 共20页
LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx

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

LCD课程设计128X64液晶显示程序设计Word文档下载推荐.docx

六、主要参考资料

[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:

FREQ1953:

FREQ7812:

FREQ31250:

FREQ125K:

FREQ500K:

OUTSTD_LOGIC);

ENDCNT;

ARCHITECTUREBEHVOFCNTIS

SIGNALTEMP:

STD_LOGIC_VECTOR(19DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IFCLK'

EVENTANDCLK='

1'

THEN

IFTEMP="

11110100001000111111"

TEMP<

="

00000000000000000000"

;

ELSE

=TEMP+1;

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模块:

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

ENTITYFREQIS

PORT(CLK:

INSTD_LOGIC;

FSIN:

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

ENDFREQ;

ARCHITECTUREBEHVOFFREQIS

COMPONENTTESTCTL

TSTEN:

OUTSTD_LOGIC;

CLR_CNT:

LOAD:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCNT10

CLR:

ENA:

CQ:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CARRY_OUT:

COMPONENTREG32B

PORT(LOAD:

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

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:

CARRY_OUT1(0),CLR=>

DTO1(7DOWNTO4),CARRY_OUT=>

CARRY_OUT1

(1));

U5:

CARRY_OUT1

(1),CLR=>

DTO1(11DOWNTO8),CARRY_OUT=>

CARRY_OUT1

(2));

U6:

CARRY_OUT1

(2),CLR=>

DTO1(15DOWNTO12),CARRY_OUT=>

CARRY_OUT1(3));

U7:

CARRY_OUT1(3),CLR=>

DTO1(19DOWNTO16),CARRY_OUT=>

CARRY_OUT1(4));

U8:

CARRY_OUT1(4),CLR=>

DTO1(23DOWNTO20),CARRY_OUT=>

CARRY_OUT1(5));

U9:

CARRY_OUT1(5),CLR=>

DTO1(27DOWNTO24),CARRY_OUT=>

CARRY_OUT1(6));

U10:

CARRY_OUT1(6),CLR=>

DTO1(31DOWNTO28));

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='

andclkin'

eventthen

ifcnttemp=49thencnttemp:

=0;

else

ifcnttemp<

25thenclkout<

='

elseclkout<

0'

endif;

cnttemp:

=cnttemp+1;

endprocess;

endarchitecturea;

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

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:

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

typedata_buffer1isarray(0to7)of

signaltime:

std_logic_vector(23downto0);

signaldisp_time:

data_buffer1:

=(

x"

31"

x"

32"

3a"

33"

34"

35"

36"

);

constantdata_buf0:

data_buffer:

=

(x"

c6"

b5"

c2"

ca"

--频率

20"

--空格

constantdata_buf1:

--

constantdata_buf2:

c7"

d8"

c5"

e5"

--秦佩

a1"

aa"

--——

d1"

d4"

f4"

--訚鹏

begin

--U1:

divclk1portmap(clk,clk_100k);

process(clk)

variablecnt:

integerrange0todivide_to_100k;

if(clk'

eventandclk='

)thencnt:

=cnt+1;

if(cnt=divide_to_100k)thencnt:

if(cnt<

divide_to_100k/2)thenclk_100k<

elseclk_100k<

disp_time(7)<

=DATAIN(3downto0)+x"

30"

disp_time(6)<

=DATAIN(7downto4)+x"

disp_time(5)<

=DATAIN(11downto8)+x"

disp_time(4)<

=DATAIN(15downto12)+x"

disp_time(3)<

=DATAIN(19downto16)+x"

disp_time

(2)<

=DATAIN(23downto20)+x"

disp_time

(1)<

=DATAIN(27downto24)+x"

disp_time(0)<

=DATAIN(31downto28)+x"

read_time:

process(time)

begin

endprocess;

process(clk_100k)

variablecnt1:

integerrange0to10000;

variablecnt_1:

integerrange0to1000;

variablecode_cnt:

integerrange0to13;

variabledata_cnt:

integerrange0to480;

if(clk_100k'

eventandclk_100k='

)then

casecurrent_sis

whens0=>

rw<

rs<

e<

cnt1:

=cnt1+1;

ifcnt1<

500thenlcd_rst<

elsifcnt1<

1000thenlcd_rst<

elsifcnt1=1000then

lcd_rst<

current_s<

=s1;

whens1=>

cnt_1:

=cnt_1+1;

ifcnt_1<

1*3then

elsifcnt_1<

2*3then

lcd_data<

=x"

0c"

10*3thene<

elsifcnt_1=10*3then

=s2;

whens2=>

90"

=s3;

whens3=>

=data_buf1(data_cnt);

elsifcnt_1=2*3then

data_cnt:

=data_cnt+1;

100thene<

cnt_1:

ifcnt_1=100thencnt_1:

ifdata_cnt=16then

=s4;

data_cnt:

whens4=>

88"

=s5;

whens5=>

=data_buf2(data_cnt);

=s6;

whens6=>

80"

=s7;

whens7=>

=data_buf0(data_cnt);

=s8;

--动态显示

whens8=>

5*3then

20*3thene<

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

当前位置:首页 > 表格模板 > 调查报告

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

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