FPGA課程設(shè)計(jì)報(bào)告.doc_第1頁(yè)
FPGA課程設(shè)計(jì)報(bào)告.doc_第2頁(yè)
FPGA課程設(shè)計(jì)報(bào)告.doc_第3頁(yè)
FPGA課程設(shè)計(jì)報(bào)告.doc_第4頁(yè)
FPGA課程設(shè)計(jì)報(bào)告.doc_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

FPGA課程設(shè)計(jì)報(bào)告 題 目:基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計(jì) 院 系: 信息與電氣工程學(xué)院 班 級(jí): 電子信息工程 學(xué) 號(hào): 學(xué)生姓名: 指導(dǎo)教師: 成 績(jī): 2011年7月 基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計(jì)1. 設(shè)計(jì)題目: 基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計(jì)2 設(shè)計(jì)要求技術(shù)指標(biāo): 要求用1602液晶顯示字符; 顯示內(nèi)容:學(xué)號(hào)+英文姓名; 顯示方式:流動(dòng)顯示,開(kāi)關(guān)控制字符流動(dòng)速度及方向;具有暫停和清 屏的功能;3 設(shè)計(jì)平臺(tái): QUARTUSII 6.0軟件 MARS-1270 CPLD 1602液晶4 設(shè)計(jì)思路與設(shè)計(jì)步驟: 1.1602液晶指令介紹: 要想控制1602液晶顯示字符,首先需要弄清楚1602有那些可控管腳, 有哪些控制命令,如何控制其顯示,如何控制其移動(dòng)及如何控制其移動(dòng)速度及方向等,下面首先介紹一下我所要用的指令及管腳等。 (1)接口說(shuō)明:(2)基本操作時(shí)序:A.讀狀態(tài):輸入:RS=L,RW=H,E=H, 輸出:DB0-DB7=狀態(tài)字B.寫(xiě)指令:輸入:RS=L,RW=L,E=下降沿脈沖,DBO-DB7=指令碼, 輸出:無(wú)C.讀數(shù)據(jù):輸入:RS=H,RW=H,E=H,輸出:DB0-DB7=數(shù)據(jù)D.寫(xiě)數(shù)據(jù):輸入:RS=H,RW=L,E=下降沿脈沖,DBO-DB7=數(shù)據(jù), 輸出:無(wú) (3)指令集及其設(shè)置說(shuō)明:A. 清屏指令: 功能: 清除液晶顯示器即將DDRAM 的內(nèi)容全部填入空白的ASCII碼20H; 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; 將地址計(jì)數(shù)器(AC)的值設(shè)為0。B. 進(jìn)入設(shè)置模式指令: 功能:設(shè)定每次定入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫(xiě)入的一個(gè) 字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名設(shè)置 I/D 0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移 1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移 S 0=寫(xiě)入新數(shù)據(jù)后顯示屏不移 1=寫(xiě)入新數(shù)據(jù)后顯示屏整體右移1字符C. 顯示開(kāi)關(guān)控制指令: 功能:控制顯示器開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情 況如下: 位名設(shè)置 D 0=顯示功能關(guān) 1=顯示功能開(kāi) C 0=無(wú)光標(biāo) 1=有光標(biāo) B 0=光標(biāo)閃爍 1=光標(biāo)不閃爍D. 設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令: 功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下: S/C R/L 設(shè)定情況 0 0 光標(biāo)左移1格,且AC值減1 0 1 光標(biāo)右移1格,且AC值加1 1 0 顯示器上字符全部左移一格,但光標(biāo)不動(dòng) 1 1 顯示器上字符全部右移一格,但光標(biāo)不動(dòng)E. 功能設(shè)定指令: 功能:設(shè)定數(shù)據(jù)總線(xiàn)位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下: 位名設(shè)置 DL 0=數(shù)據(jù)總線(xiàn)為4位 1=數(shù)據(jù)總線(xiàn)為8位 N 0=顯示1行 1=顯示2行 F 0=57點(diǎn)陣/每字符 1=510點(diǎn)陣/每字符F. 設(shè)定CGRAM地址指令: 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。 DB5DB4DB3 為字符號(hào),也就是你將來(lái)要顯示該字符時(shí)要用到的字符 地址。(000111)(能定義八個(gè)字符) DB2DB1DB0為行號(hào)。(000111)(八行)G. 設(shè)定DDRAM地址指令;功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的DDRAM的地址。H. 數(shù)據(jù)寫(xiě)入DDRAM或CGRAM指令: 功能: 將字符碼寫(xiě)入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符; 將使用者自己設(shè)計(jì)的圖形存入CGRAM。 DB7DB6DB5可為任何數(shù)據(jù),一般取“000”。 DB4DB3DB2DB1DB0對(duì)應(yīng)于每行5點(diǎn)的字模數(shù)據(jù)。2. 設(shè)計(jì)流程: 弄懂1602中各種管腳及其控制方法以及各種指令的指令碼后,就可以進(jìn) 行程序的編寫(xiě)了,首先整理一下編寫(xiě)流程: 初始化 設(shè)置狀態(tài) 狀態(tài)轉(zhuǎn)換 3.設(shè)計(jì)源程序: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity lcd_1602 is Port ( clk : in std_logic; reset:in std_logic; lcdrs : out std_logic;-讀或?qū)懼噶顋數(shù)據(jù)控制端 lcdrw : out std_logic;-讀|寫(xiě)控制端 lcden : buffer std_logic; -使能端 data : out std_logic_vector(7 downto 0); key1: in std_logic; -撥碼開(kāi)關(guān)控制移動(dòng)與不動(dòng); 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,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); -定義各種狀態(tài)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); -把“王”字字模寫(xiě)入數(shù)組;signal current_state:state;signal clkcnt: std_logic_vector(18 downto 0);Constant divcnt:std_logic_vector(18 downto 0):=1111001110001000000;signal clkdiv: std_logic;signal tc_clkcnt: std_logic; signal clk_int: std_logic;signal clkdiv2: std_logic;signal clkdiv3: std_logic;signal clkdiv6: std_logic; begin lcdrw = 0 ; -讀寫(xiě)控制端設(shè)為寫(xiě)有效 process(clk,reset) Begin if(reset=0)then clkcnt=0000000000000000000; elsif(clkevent and clk=1)then if(clkcnt=divcnt)then clkcnt=0000000000000000000; elseclkcnt=clkcnt+1; -對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻使其工作周期為12.5ms end if; end if;end process;tc_clkcnt=1 when clkcnt=divcnt else 0; -tc_clkcnt為12.5msprocess(tc_clkcnt,reset)begin if(reset=0)thenclkdiv=0; elsif(tc_clkcntevent and tc_clkcnt=1)thenclkdiv=not clkdiv; -進(jìn)一步分頻使clkdiv=2*12.5ms; end if;end process;process(clkdiv,reset)begin if(reset=0)thenclk_int=0; elsif(clkdivevent and clkdiv=1)thenclk_int= not clk_int; -再進(jìn)一步分頻使clk_int=4*12.5ms end if;end process;process(clk_int,reset)begin if(reset=0)thenclkdiv2=0; -再進(jìn)一步分頻使clkdiv2=8*12.5ms elsif(clk_intevent and clk_int=1)thenclkdiv2= not clkdiv2; end if;end process;process(clkdiv2,reset) begin if(reset=0)thenclkdiv3=0; -再進(jìn)一步分頻使clkdiv3=16*12.5ms elsif(clkdiv2event and clkdiv2=1)then clkdiv3= not clkdiv3; end if;end process;process(clkdiv3,reset)begin if(reset=0)thenclkdiv6=0; -還是進(jìn)一步分頻使clkdiv6=32*12.5ms elsif(clkdiv3event and clkdiv3=1)thenclkdiv6= not clkdiv6; end if;end process;process(clkdiv3,reset)begin if(reset=0)thenlcden=0; elsif(clkdiv3event and clkdiv3=0)thenlcden= not lcden; -設(shè)置使能信號(hào)頻率 end if;end process; 附注:進(jìn)行多次分頻的目地是為了使字符顯示速度及移動(dòng)速度等合適,便于觀(guān)察。control:process(clk,reset,current_state)variable cnt1: std_logic_vector(3 downto 0); -控制各種狀態(tài)及其轉(zhuǎn)換 beginif reset=0thencurrent_state 1);lcdrs=0;elsif rising_edge(clkdiv6)then -使用clkdiv6是為了和lcden吻合,達(dá)到使能目地 current_state = current_state ; lcdrs -測(cè)試空閑狀態(tài) data=00111000;-38H current_state data=00000110; -進(jìn)入模式設(shè)置狀態(tài)寫(xiě)入新數(shù)據(jù)后光標(biāo)右移 current_state data=00001100; -顯示開(kāi)關(guān)控制狀態(tài);顯示功能開(kāi) current_state data=00000001; -清屏指令 current_state data=10000000; -設(shè)置要顯示數(shù)據(jù)的位置:第1行第1列80H current_state lcdrs=1; data=00110001;-設(shè)置要顯示的數(shù)據(jù)1 current_state lcdrs=0; - 設(shè)置要顯示數(shù)據(jù)的位置:第1行第2列81H data=10000001; current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)2 data=00110010; current_state lcdrs=0; - 設(shè)置要顯示數(shù)據(jù)的位置:第1行第3列82H data=10000010;-82H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)8 data=00111000; current_state lcdrs=0;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第4列83H data=10000011; current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)8 data=00111000; current_state lcdrs=0; - 設(shè)置要顯示數(shù)據(jù)的位置:第1行第5列84H data=10000100;-82H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)4 data=00110100; current_state lcdrs=0; data=10000101; - 設(shè)置要顯示數(shù)據(jù)的位置:第1行第6列85H current_state lcdrs=1; data=00110000; -設(shè)置要顯示的數(shù)據(jù)0 current_state lcdrs=0; data=10000110;- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第7列86H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)1 data=00110001; current_state lcdrs=0; data=10000111;- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第8列87H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)5 data=00110101; current_state lcdrs=0; data=10001000;- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第9列88H current_state lcdrs=1; data=00101101; -設(shè)置要顯示的數(shù)據(jù)- current_state lcdrs=0; data=10001001;- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第10列89H current_state lcdrs=1; data=01011010; -設(shè)置要顯示的數(shù)據(jù)Z current_state lcdrs=0; data=10001010;- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第11列90H current_state lcdrs=1; data=01000111; -設(shè)置要顯示的數(shù)據(jù)G current_state lcdrs=0; data=10001011;- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第12列91H current_state lcdrs=1; data=01001100; -設(shè)置要顯示的數(shù)據(jù)L current_state lcdrs=0; data=11000000;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第1列C0H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)1 data=00110001; current_state lcdrs=0; data=11000001;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第2列C1H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)2 data=00110010; current_state lcdrs=0; data=11000010;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第3列C2H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)8 data=00111000; current_state lcdrs=0; data=11000011;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第4列C3H current_state lcdrs=1; data=00111000;-設(shè)置要顯示的數(shù)據(jù)8 current_state lcdrs=0; data=11000100;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第5列C4H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)4 data=00110100; current_state lcdrs=0; data=11000101;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第6列C5H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)0 data=00110000; current_state lcdrs=0; data=11000110;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第7列C6H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)2 data=00110010; current_state lcdrs=0; data=11000111;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第8列C7H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)8 data=00111000; current_state lcdrs=0; data=11001000;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第9列C8H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)- data=00101101; current_state lcdrs=0; data=11001001;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第10列C9H current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)X data=01011000; current_state lcdrs=0; data=11001010;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第11列CAH current_state lcdrs=1; -設(shè)置要顯示的數(shù)據(jù)H data=01001000; current_state lcdrs=0; data=11001011;- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第12列CBH current_state lcdda=1; -設(shè)置要顯示的數(shù)據(jù)Y data=01011001; current_state lcdda=0; data=01000000; -設(shè)定CGRAM地址指令; current_state lcdda=1; cnt1:=cnt1+1; -向CGRAM中寫(xiě)入“王”字; data=cgram(conv_integer(cnt1); if cnt1 = 1000 then current_state lcdda=0; -設(shè)定王字的顯示位置 第1行第13列 92H data=10001100; current_state lcdda=1; -設(shè)置要顯示的王字 data=00000000; current_state lcdda=0; -設(shè)定王字的顯示位置 第2行第13列 CCH data=11001100; current_state lcdda=1; -設(shè)置要顯示的王字 data=00000000; if key1=1 then current_state=shift_cur; elsif key2=1 then current_state lcdda=0; data=00010100; current_state lcdda=0; datanull; end case; end if; end process; end Behavioral;4. 設(shè)計(jì)結(jié)果: 顯示12884015-ZGL王 12884028-XHY 王5. 自定義漢字顯示:步驟如下:1. 先將自定義字符或漢字寫(xiě)入CGRAM,如下圖定義A的字模一樣所示:如果想自定義一個(gè)十,則八行的字符串

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論