FPGA课程设计报告_第1页
FPGA课程设计报告_第2页
FPGA课程设计报告_第3页
FPGA课程设计报告_第4页
FPGA课程设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、v1.0可编辑可修改Shenyang Agricultural UniversityFPGAM程设计报告题 目:基于CPLD勺1602字符液晶显示系统设计院 系: 信息与电气工程学院班 级:电子信息工程学 号:学生姓名:指导教师:成 绩:2011年7月基于CPLM 1602字符液晶显示系统设计一.设计题目:基于CPLD勺1602字符液晶显示系统设计二.设计要求技术指标:要求用1602液晶显示字符;显示内容:学号+英文姓名;显示方式:流动显示,开关控制字符流动速度及方向; 具有暂停和清屏的功能;三.设计平台:QUARTUS瞰件 MARS-1270 CPLD 1602 液晶四.设计思路与设计步骤:

2、液晶指令介绍:要想控制1602液晶显示字符,首先需要弄清楚1602有那些可控管脚,有哪些控制命令,如何控制其显示,如何控制其移动及如何控制其移动速度及方向等,下面首先介绍一下我所要用的指令及管脚等。(1)接口说明:编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data 1 - 02VDD电源正极IDD3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/箭令选撵瑞rHli1205Data 105IVW读/写选择端(H L)13D6Data 10&E使就信号14D7Data I/O7DODjstA I/O15BLR背光源正极8D1Data I/O16RLK背光源负被(

3、2)基本操作时序:A.读状态:输入:RS=L RW=H,E=H,输出:DB0-DB7= 犬态字B.写指令:输入:RS=L RW=L,E下降沿月冲,DBO-DB7指令码,输出:无C.读数据:输入:RS=H RW=H,E=HU出:DB0-DB7嗷据D.写数据:输入:RS=H RW=L,E下降沿月冲,DBO-DB7数据,输出:无(3)指令集及其设置说明:A.清屏指令:指令功能指令编泗牖 /nsK/UDB7DH6DH5DH4DB3DB2DH1清屏0010ge9001164功能:清除液晶显示器即将DDRAM勺内容全部填入空白的ASCII码20H;光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(

4、AC)的值设为00B.进入设置模式指令:指令功能指令编阴静 时间 /U5RSR/WDB7DB6DR50H4DBSDB2DIMDHU进入模式设置fle000001I/DS40功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:位名设置I/D 0=写入新数据后光标左移1=写入新数据后光标右移S 0=写入新数据后显示屏不移 1=写入新数据后显示屏整体右移1字符C.显示开关控制指令:指令功能指令编码牖 /usRSDH7DD6。由50B30S2B1DBS显示开关控制U001DC40功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如

5、下:位名设置D 0= 显示功能关 1=显示功能开C0=无光标1=有光标B0=光标闪烁1= 光标不闪烁D.设定显示屏或光标移动方向指令:指令功能指令编码牖 /usRSR/U0D7DD6iDBSDB*ona0B2DB1DOOaflag81s/cR/LXX功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:S/C R/L设定情况00光标左移1格,且ACfi减101光标右移1格,且ACfi加110显示器上字符全部左移一格,但光标不动11显示器上字符全部右移一格,但光标不动E.功能设定指令:指令勘能指令编码 /U5nsRZWDB7DBADBSDBUDB3DB21BB1DDB功能设定00001LN*

6、Xlie功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名设置DL 0=数据总线为4位1=数据总线为8位N 0= 显示1行1=显示2行F 0=5X 7点阵/每字符1=5 X 10点阵/每字符F.设定CGRAMfc址指令:指令编梢噩 /us指令功能R/W0B7DES DBU 083 DB2 DB1 DHQ设定隔 地址00ft1CGR育M的地址(6位)llB功能:设定下一个要存入数据的CGRAM地址。DB5DB4DB3 为字符号,也就是你将来要显示该字符时要用到的字符地址。(000111)(能定义八个字符)DB2DB1DB0 为行号。(000111)(八行)G.设定DDRAMfc址

7、指令;指令功能指令编码黯 /USRSR/U9B7DB6 DBS BB4 DH3 DB2 | DB1 DBO设定 地址0e1ccru邮地址铉】4M功能:设定下一个要存入数据的 DDRAMJ地址H.数据写入DDRAME CGRA蟠令:指令功能指令第码ZusRSR/VM7DD6M5M3M2M1数据写人到 阿丽CGRAM10要写人的数据t7-D0|占9功能:将字符码写入DDRAM以使液晶显示屏显示出相对应的字符将使用者自己设计的图形存入CGRAMDB7DB6DB5 可为任何数据,一般取“ 000”。DB4DB3DB2DB1DB0对应于每行5点的字模数据。2 .设计流程:弄懂1602中各种管脚及其控制方

8、法以及各种指令的指令码后,就可以进行程序的编写了,首先整理一下编写流程:设置状态:初始化23lcdrs : out std_logic;-读或写指令|数据控制端lcdrw : out std_logic;-读|写控制端3 .设计源程序:library IEEE;use use use entity lcd_1602 isPort ( clk : in std_logic;reset:in std_logic;key1: in std_logic;拨码开关控制移动与不动;lcden : buffer std_logic;data : out std_logic_vector(7 downto 0

9、);key2: in std_logic);end lcd_1602;Architecture Behavioral of lcd_1602 isType state is(set_qingping,set_nobusy,set_cursor,set_switch,set_ddram,whte_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_d

10、dram7,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_dd

11、ram19,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:

12、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_in

13、t: std_logic;signal clkdiv2: std_logic;signal clkdiv3: std_logic;signal clkdiv6: std_logic ;beginIcdrw = 0;-读写控制端设为写有效process(clk,reset)Beginif(reset=0)thenclkcnt=0000000000000000000”;elsif(clkevent and clk=1)thenif(clkcnt=divcnt)then clkcnt=0000000000000000000”;elseclkcnt=clkcnt+1;-对系统时钟进行分频使其工作周期为

14、end if;end if;end process ;tc_clkcnt=1 when clkcnt=divcnt else 0; -tc_clkcntprocess(tc_clkcnt,reset)beginif(reset=0)thenclkdiv=0;elsif(tc_clkcntevent and tc_clkcnt=1)thenclkdiv=not clkdiv;- 进一步分频使 clkdiv=2*;end if;end process;process(clkdiv,reset)beginif(reset=0)thenclkjnt=0;elsif(clkdivevent and cl

15、kdiv=1)thenclk_int= not clk_int;-再进一步分频使 clk_int=4*end if;end process;process(clk_int,reset)beginif(reset=0)thenclkdiv2=0;-再进一步分频使 clkdiv2=8*elsif(clk_intevent and clk_int=1)thenclkdiv2= not clkdiv2;end if;end process;process(clkdiv2,reset)beginif(reset=0)thenclkdiv3=0;-再进一步分频使 clkdiv3=16*elsif(clkd

16、iv2event and clkdiv2=1)thenclkdiv3= not clkdiv3;end if;end process;process(clkdiv3,reset)beginif(reset=0)thenclkdiv6=0;-还是进一步分频使 clkdiv6=32*elsif(clkdiv3event and clkdiv3=1)thenclkdiv6= not clkdiv6;end if;end process;process(clkdiv3,reset)beginif(reset=0)thenlcden=0;elsif(clkdiv3event and clkdiv3=0)

17、thenlcden= not Icden;-设置使能信号频率end if;end process;附注:进行多次分频的目地是为了使字符显示速度及移动速度等合适,便于观察。control:process(clk,reset,current_state)variable cntl: std_logic_vector(3 downto 0);-控制各种状态及其转换beginif reset=0thencurrent_state 1);lcdrs=0;elsif rising_edge(clkdiv6)then-使用clkdiv6是为了和lcden吻合,达到使能目地 current_state = c

18、urrent_state ;lcdrs -测试空闲状态data=00111000”;-38Hcurrent_statedata=00000110”;-进入模式设置状态写入新数据后光标右移current_statedata=00001100”;-显示开关控制状态;显示功能开current_statedata=00000001”;-清屏指令current_statedata=;-设置要显示数据的位置:第1行第1列80Hcurrent_statelcdrs=1;data=00110001”;- 设置要显示的数据1current_statelcdrs=0;设置要显示数据的位置:第1行第2列81Hdat

19、a=;current_statelcdrs=1;-设置要显示的数据2data=00110010”;current_statelcdrs=0;-设置要显示数据的位置:第1行第3列82Hdata=;-82Hcurrent_statelcdrs=1;- 设置要显示的数据8data=00111000”;current_statelcdrs=0;-设置要显示数据的位置:第 2行第4列83Hdata=;current_statelcdrs=1;-设置要显示的数据8data=00111000”;current_statelcdrs=0;-设置要显示数据的位置:第1行第5列84Hdata=;-82Hcurre

20、nt_statelcdrs=1;-设置要显示的数据4data=00110100”;current_statelcdrs=0;data=;-设置要显示数据的位置:第1行第6列85Hcurrent_statelcdrs=1;data=00110000”;- 设置要显示的数据 0current_statelcdrs=0;data=;-设置要显示数据的位置:第1行第7列86Hcurrent_statelcdrs=1;-设置要显示的数据1data=00110001”;current_statelcdrs=0;data=;-设置要显示数据的位置:第1行第8列87Hcurrent_statelcdrs=1;

21、-设置要显示的数据5data=00110101”;current_statelcdrs=0;data=;-设置要显示数据的位置:第1行第9列88Hcurrent_statelcdrs=1;data=00101101”;-设置要显示的数据-current_statelcdrs=0;data=;-设置要显示数据的位置:第1行第10列89Hcurrent_statelcdrs=1;data=01011010”;-设置要显示的数据 Zcurrent_statelcdrs=0;data=;-设置要显示数据的位置:第1行第11列90Hcurrent_statelcdrs=1;data=01000111”;

22、-设置要显示的数据current_statelcdrs=0;data=;-设置要显示数据的位置:第1行第12歹U 91Hcurrent_statelcdrs=1;data=01001100”;-设置要显示的数据current_statelcdrs=0;data=;-设置要显示数据的位置:第2行第1歹U C0Hcurrent_statelcdrs=1;-设置要显示的数据1data=00110001”;current_statelcdrs=0;data=;-设置要显示数据的位置:第 2行第2列C1H current_statelcdrs=1;-设置要显示的数据2data=00110010”;cur

23、rent_statelcdrs=0;data=;-设置要显示数据的位置:第 2行第3列C2Hcurrent_statelcdrs=1;- 设置要显示的数据8data=00111000”;current_statelcdrs=0;data=;-设置要显示数据的位置:第 2行第4列C3Hcurrent_statelcdrs=1;data=00111000”;- 设置要显示的数据 8current_statelcdrs=0;data=;-设置要显示数据的位置:第 2行第5列C4Hcurrent_statelcdrs=1;-设置要显示的数据4data=00110100”;current_statelc

24、drs=0;data=;-设置要显示数据的位置:第current_statelcdrs=1;-设置要显示的数据0data=00110000”;current_statelcdrs=0;data=;-设置要显示数据的位置:第current_statelcdrs=1;- 设置要显示的数据2data=00110010”;current_statelcdrs=0;2行第6歹U C5H2行第7歹U C6H2行第8歹U C7Hdata=;-设置要显示数据的位置:第current_statelcdrs=1;- 设置要显示的数据8data=00111000”;current_statelcdrs=0;data

25、=;-设置要显示数据的位置:第 2行第9列C8Hcurrent_statelcdrs=1;- 设置要显示的数据-data=00101101”;current_statelcdrs=0;data=;-设置要显示数据的位置:第 2行第10歹1C9Hcurrent_statelcdrs=1;- 设置要显示的数据Xdata=01011000”;current_statelcdrs=0;data=;-设置要显示数据的位置:第 2行第11列CAHcurrent_statelcdrs=1;- 设置要显示的数据Hdata=01001000”;current_statelcdrs=0;data=;-设置要显示数

26、据的位置:第 2行第12歹1CBHcurrent_statelcdda=1;- 设置要显示的数据Ydata=01011001;current_statelcdda=0;data=01000000”;- 设定 CGRAMfc址指令;current_statelcdda=1;cnt1:=cnt1+1;- 向 CGRAMlP写入“王”字;data=cgram(conv_integer(cnt1);if cntl = 1000 thencurrent_statelcdda=0;-设定王宇的显示位置第1行第13列92Hdata=;current_statelcdda=1;-设置要显示的王宇data=00

27、000000”;current_statelcdda=0;-设定王宇的显示位置第2行第13列CCHdata=;current_statelcdda=1;-设置要显示的王宇data=00000000”;if key1=1 thencurrent_state=shift_cur;elsif key2=1 thencurrent_statelcdda=0;data=00010100”;current_state lcdda=0;datanull;end case;end if;end process;end Behavioral ;4 .设计结果:显示-ZGL王-XHY 王5 .自定义汉字显示:步骤如下:1.先将自定义字符或汉字写入CGRAM如下图定义A的字模一样所示:如果想自 定义一个十,则八行的字符串构成一个数组,每个元素是一个八位的二进制字 符申,则十所构成的字模为(不够八位的前三位补零):data8=( “0000010。,“00000100”,“00000100”,“00011111”,“0000010。, “0000010。,“00000100, “00000100,)把这个数组写到CGRAM某一个位置中,比如第一个留下来的位置中,则这个“十” 字就可以和CGROM已有的字符一样

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论