FPGA课程设计报告

  • 格式:docx
  • 大小:78.54 KB
  • 文档页数:27

下载文档原格式

  / 27
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA课程设计报告

题目:基于CPLD的 1602字符液晶显示系统设计院系:信息与电气工程学院

班级:电子信息工程

学号:

学生姓名:

指导教师:

成绩:

2011 年7 月

基于CPLD的1602字符液晶显示系统设

一. 设计题目:

基于CPLD的1602 字符液晶显示系统设计

二.设计要求技术指标:

要求用1602 液晶显示字符;

显示内容:学号+英文姓名;

显示方式:流动显示,开关控制字符

流动速度及方向;具有暂停和清

屏的功能;

三.设计平台:

QUARTUSII软件MARS-1270 CPLD 1602 液晶

四.设计思路与设计步骤:

液晶指令介绍:

要想控制1602 液晶显示字符,首先需要弄清

楚1602 有那些可控管脚,

有哪些控制命令,如何控制其显示,如何控制其移动及如何控制其移动速度及方

(1)接口说明:

(2)基本操作时序:

A. 读状态:输入:RS=L,RW=H,E=H,输出:D B0--DB7=状态字

B.写指令:输入:RS=L,RW=L,E=下降沿脉冲,

DBO--DB7=指令码, 输出:无

C.读数据:输入:RS=H,RW=H,E=H输出:, D B0--DB7=数据

D.写数据:输入:RS=H,RW=L,E=下降沿脉冲,

DBO--DB7=数据, 输出:无

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

A. 清屏指令:

功能:<1> 清除液晶显示器即将DDRAM的内容全部填入"空白"的ASCII码20H;

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

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

B.进入设置模式指令:

功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个

字符是否移动。参数设定的情况如下所示:

位名设置

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

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

C.显示开关控制指令:

功能:控制显示器开/ 关、光标显示/关闭以及光标是否闪烁。参数设定的情

况如下:

位名设置

D 0= 显示功能关1= 显示功能开

C 0= 无光标1= 有光标

B 0= 光标闪烁1= 光标不闪烁

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

功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:

S/C R/L 设定情况

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

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

1 0显示器上字符全部左移一格,但光标不动

1 1显示器上字符全部右移一格,但光标不动

E.功能设定指令:

功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名设置

DL 0= 数据总线为4位1= 数据总线为8位

N 0= 显示1行1= 显示2行

F 0=5 × 7点阵/每字符1=5 × 10 点阵/每字符

F. 设定CGRAM地址指令:

功能:设定下一个要存入数据的CGRA的地址。M

DB5DB4DB3 为字符号,也就是你将来要显示该字符时要用到的字符地址。(000~111)(能定义八个字符)

DB2DB1DB0 为行号。(000~111)(八行)

G.设定DDRAM地址指令;

功能:设定下一个要存入数据的DDRAM的地址。

H.数据写入DDRAM或CGRAM指令:

功能:<1> 将字符码写入DDRA,以使液晶显示屏显示出相对应的字符M

<2> 将使用者自己设计的图形存入CGRA。M

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

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

2. 设计流程:

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

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

3. 设计源程序:

library IEEE;

use use use entity lcd_1602 is

Port ( clk : in std_logic;

reset:in std_logic;

lcdrs : out std_logic; -- 读或写指令| 数据控制端

lcdrw : out std_logic; -- 读| 写控制端

lcden : buffer std_logic;

data : out std_logic_vector(7 downto 0);

key1: in std_logic; 拨码开关控制移动与不动;

key2: in std_logic);

初始化

end lcd_1602;

Architecture Behavioral of lcd_1602 is

Type state is

(set_qingping,set_nobusy,set_cursor,set_switch,set_ddram,write_data,s et_ddram1,write_data1,set_ddram2,write_data2,set_ddram3,write_data3,s et_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_d ata12,set_ddram13,write_data13,set_ddram14,write_data14,set_ddram15,w rite_data15,set_ddram17,write_data17,set_ddram16,write_data16,set_ddr am18, write_data18,set_ddram19,write_data19,set_ddram20,write_data20, set_ddram21,write_data21,set_ddram22,write_data22,set_ddram23,write_d ata23,set_cgram,write_cgram,set_ddram24,write_data24,set_ddram25,writ e_data25,shift_cur,shift_display); -- 定义各种状态

type ram2 is array(0 to 7) of std_logic_vector(7 downto 0);

constant cgram:ram2:=(("00011111"),("00000100"),("00000100"), ("00011111"),("00000100"),("00000100"),("00000100"),("00011111")); -- 把“王”字字模写入数组;

signal current_state:state;

signal clkcnt: std_logic_vector(18 downto 0);

Constant divcnt:std_logic_vector(18 downto 0):="000000";

signal clkdiv: std_logic;

signal tc_clkcnt: std_logic;

signal clk_int: std_logic;

signal clkdiv2: std_logic;

signal clkdiv3: std_logic;

相关主题