FPGA课程设计报告Word文件下载.docx

上传人:b****6 文档编号:17438848 上传时间:2022-12-01 格式:DOCX 页数:21 大小:51.26KB
下载 相关 举报
FPGA课程设计报告Word文件下载.docx_第1页
第1页 / 共21页
FPGA课程设计报告Word文件下载.docx_第2页
第2页 / 共21页
FPGA课程设计报告Word文件下载.docx_第3页
第3页 / 共21页
FPGA课程设计报告Word文件下载.docx_第4页
第4页 / 共21页
FPGA课程设计报告Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

FPGA课程设计报告Word文件下载.docx

《FPGA课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计报告Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

FPGA课程设计报告Word文件下载.docx

数据/命令选择端〔WL)

12

D5

Data1/O

5

R/W

读/写选择端(H/L)

13

06

6

E

便能佶号

14

D7

7

DO

15

BLA

背光源正檢

8

01

16

BLK

背光源负根

(2)基本操作时序:

A.读状态:

输入:

RS=LRW=H,E=H,输出:

DB0--DB7=犬态字

B.写指令:

RS=LRW=L,E下降沿脉冲,DBO--DB7指令码,输出:

C.读数据:

RS=HRW=H,E=H俞出:

DB0--DB7教据

D.写数据:

RS=HRW=L,E下降沿脉冲,DBO--DB7数据,输出:

(3)指令集及其设置说明:

A.清屏指令:

担令功能

梧令编码

/ns

DB7

DB6

DB5

DB1

1清屏

Q

a

1.64

功能:

<

1>

清除液晶显示器即将DDRAM勺内容全部填入"

空白"

的ASCII码20H;

<

2>

光标归位,即将光标撤回液晶显示屏的左上方;

3>

将地址计数器(AC)的值设为0。

B.进入设置模式指令:

指令功能

扌旨令编码

DB1I

DB3

DB2

DB0

迸入模式设置

D

I/O

S

40

设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。

参数设定的情况如下所示:

位名设置

I/D0=写入新数据后光标左移1=写入新数据后光标右移

S0=写入新数据后显示屏不移1=写入新数据后显示屏整体右移1字符

C.显示开关控制指令:

D0=显示功能关1=显示功能开

C0=无光标1=有光标

B0=光标闪烁1=光标不闪烁

D.设定显示屏或光标移动方向指令:

指令编码

/U5

D81

DBS

S/C

R/L

K

4D

 

使光标移位或使整个显示屏幕移位。

参数设定的情况如下:

S/CR/L

设定情况

光标左移1格,且AC值减1

光标右移1格,且AC值加1

显示器上字付全部左移一格,

但光标不动

显示器上字符全部右移一格,

E.功能设定指令:

扌旨令功能

挹令编码

/US

R/U

DB4

D82

DBB

功能设定

DL

F

X

U0

设定数据总线位数、显示的行数及字型。

位名设置

DL0=数据总线为4位1=数据总线为8位

N0=显示1行1=显示2行

F0=5X7点阵/每字符仁5X10点阵/每字符

F.设定CGRA地址指令:

指令编码执行

7us

085

DB3DB2

设定CGRRM體止

B

g

弱朋11的地址"

位J

设定下一个要存入数据的CGRA的地址。

DB5DB4DB3为字符号,也就是你将来要显示该字符时要用到的字符

地址。

(000~111)(能定义八个字符)

DB2DB1DB0为行号。

(000~111)(八行)

G.设定DDRAM地址指令;

拒令功能

/us

DS7

D86

DBO

设定BDRAM地址

CGRflW的地址IT位)

48

设定下一个要存入数据的DDRA的地址

H.数据写入DDRA或CGRAI指令:

I指令编码

DBA

D眄

DBAi

0B3

DBD

数据写入到DDRAM或

CGRflll

昊写入的数据

4Q

将字符码写入DDRAM以使液晶显示屏显示出相对应的字符;

将使用者自己设计的图形存入CGRA。

DB7DB6DB5可为任何数据,一般取“000”

DB4DB3DB2DB1DB0对应于每行5点的字模数据。

2.设计流程:

弄懂1602中各种管脚及其控制方法以及各种指令的指令码后,就可以进

行程序的编写了,首先整理一下编写流程:

:

初始化

3.设计源程序:

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitylcd_1602is

Port(clk:

instd_logic;

--读或写指令|数据控制端

--读|写控制端

使能端

reset:

instd_logic;

lcdrs:

outstd_logic;

lcdrw:

lcden:

bufferstd_logic;

--

data:

outstd」ogic_vector(7downto0);

key1:

--拨码开关控制移动与不动;

key2:

instd」ogic);

endlcd_1602;

ArchitectureBehavioraloflcd_1602is

Typestateis

(set_qingping,set_nobusy,set_cursor,set_switch,set_ddram,write_data,set_ddram1,write_data1,set_ddram2,write_data2,set_ddram3,write_data3,set_ddram4,write_data4,set_ddram5,write_data5,set_ddram6,write_data6,set_ddram7,write_data7,set_ddram8,write_data8,set_ddram9,write_data9,set_ddram10,write_data10,set_ddram11,write_data11,set_ddram12,write_data12,set_ddram13,write_data13,set_ddram14,write_data14,set_ddram15,write_data15,set_ddram17,write_data17,set_ddram16,write_data16,set_ddram18,write_data18,set_ddram19,write_data19,set_ddram20,write_data20,set_ddram21,write_data21,set_ddram22,write_data22,set_ddram23,write_data23,set_cgram,write_cgram,set_ddram24,write_data24,set_ddram25,write_data25,shift_cur,shift_display);

--定义各种状态

typeram2isarray(0to7)ofstd_logic_vector(7downto0);

constantcgram:

ram2:

=(("

00011111"

),("

00000100"

),

("

));

--把“王”字字模写入数组;

signalcurrent_state:

state;

signalclkcnt:

std_logic_vector(18downto0);

Constantdivcnt:

std_logic_vector(18downto0):

="

1111001110001000000"

;

signalclkdiv:

std_logic;

signaltc_clkcnt:

signalclk_int:

signalclkdiv2:

signalclkdiv3:

signalclkdiv6:

std_logic;

begin

ledrw<

='

O'

--读写控制端设为写有效

process(clk,reset)

Begin

if(reset='

)then

clkcnt<

OOOOOOOOOOOOOOOOOOO"

elsif(clk'

eventandclk='

1'

if(clkcnt=divcnt)then

else

=clkcnt+1;

--对系统时钟进行分频使其工作周期为12.5ms

endif;

endprocess;

tc_clkcnt<

='

whenclkcnt=divcntelse'

--tc_clkcnt为12.5ms

process(tc_clkcnt,reset)

begin

clkdiv<

elsif(tc_clkcnt'

eventandtc_clkcnt='

=notclkdiv;

--进一步分频使clkdiv=2*12.5ms;

endprocess;

process(clkdiv,reset)

clk_int<

elsif(clkdiv'

eventandclkdiv='

clk_int<

=notclk_int;

--再进一步分频使clk_int=4*12.5ms

process(clk_int,reset)

clkdiv2<

0'

--再进一步分频使clkdiv2=8*12.5ms

elsif(clk_int'

eventandclk_int='

=notclkdiv2;

process(clkdiv2,reset)

)thenclkdiv3<

--再进一步分频使clkdiv3=16*12.5ms

elsif(clkdiv2'

eventandclkdiv2='

clkdiv3<

=notclkdiv3;

process(clkdiv3,reset)

)thenclkdiv6<

--还是进一步分频使clkdiv6=32*12.5mselsif(clkdiv3'

eventandclkdiv3='

clkdiv6<

=notclkdiv6;

lcden<

elsif(clkdiv3'

=notlcden;

--设置使能信号频率

附注:

进行多次分频的目地是为了使字符显示速度及移动速度等合适,便于观察。

control:

process(clk,reset,current_state)

variablecnt1:

std」ogic_vector(3downto0);

--控制各种状态及其转换

ifreset='

then

current_state<

=set_nobusy;

cnt1:

=(others=>

'

);

lcdrs<

elsifrising_edge(clkdiv6)then

--使用clkdiv6是为了和lcden吻合,达到使能目地

current_state<

=current_state;

lcdrs<

casecurrent_stateis

whenset_nobusy=>

--测试空闲状态

data<

00111000"

--38Hcurrent_state<

=set_cursor;

whenset_cursor=>

00000110"

--进入模式设置状态写入新数据后光标右移

=set_switch;

whenset_switch=>

data<

00001100"

--显示开关控制状态;

显示功能开

=set_qingping;

whenset_qingping=>

00000001"

--清屏指令

=set_ddram;

whenset_ddram=>

10000000"

--设置要显示数据的位置:

第1行第1列80H

=write_data;

whenwrite_data=>

00110001"

--设置要显示的数据1current_state<

=set_ddram1;

whenset_ddram1=>

lcdrs<

第1行第2列81H

10000001"

=write_data1;

whenwrite_data1=>

--设置要显示的数据2

00110010"

=set_ddram2;

whenset_ddram2=>

第1行第3列82H

10000010"

--82H

=write_data2;

whenwrite_data2=>

--设置要显示的数据8

=set_ddram3;

whenset_ddram3=>

第2行第4列83H

10000011"

=write_data3;

whenwrite_data3=>

=set_ddram4;

whenset_ddram4=>

第1

10000100"

--82Hcurrent_state<

=write_data4;

whenwrite_data4=>

--设置要显示的数据4

00110100"

=set_ddram5;

whenset_ddram5=>

10000101"

=write_data5;

whenwrite_data5=>

00110000"

--设置要显示的数据0

=set_ddram6;

whenset_ddram6=>

10000110"

=write_data6;

whenwrite_data6=>

--设置要显示的数据1

=set_ddram7;

whenset_ddram7=>

10000111"

=write_data7;

whenwrite_data7=>

--设置要显示的数据5

00110101"

=set_ddram8;

whenset_ddram8=>

10001000"

行第5列84H

1行第6列85H

1行第7列86H

1行第8列87H

1行第9列88H

=write_data8;

whenwrite_data8=>

00101101"

--设置要显示的数据-

=set_ddram9;

whenset_ddram9=>

10001001"

=write_data9;

whenwrite_data9=>

01011010"

--设置要显示的数据Z

=set_ddram10;

whenset_ddram10=>

10001010"

=write_data10;

whenwrite_data10=>

01000111"

--设置要显示的数据G

=set_ddram11;

whenset_ddram11=>

10001011"

=write_data11;

whenwrite_data11=>

01001100"

--设置要显示的数据L

=set_ddram12;

whenset_ddram12=>

11000000"

--设置要显示数据的位置:

1行第10列89H

第1行第11列90H

第1行第12列91H

第2行第1列C0H

=write_data12;

2行第2列C1H

=write_data13;

whenwrite_data13=>

--设置要显示的数据2

=set_ddram14;

whenset_ddram14=>

11000010"

=write_data14;

whenwrite_data14=>

=set_ddram15;

2行第3列C2H

whenset_ddram15=>

11000011"

=write_data15;

whenwrite_data15=>

--设置要显示的数据8

=set_ddram16;

2行第4列C3H

whenset_ddram16=>

11000100"

current_state

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

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

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

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