




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、FPGA課程設計報告題目:基于CPLD的1602 字符液晶顯示系統設計院系:信息與電氣工程學院班級:電子信息工程學號:學生姓名:指導教師:成績:2011年 7月基于 CPLD的 1602 字符液晶顯示系統設計一 . 設計題目:基于 CPLD的 1602 字符液晶顯示系統設計二設計要求技術指標:要求用 1602 液晶顯示字符;顯示內容:學號 +英文姓名;顯示方式:流動顯示, 開關控制字符流動速度及方向;具有暫停和清屏的功能;三設計平臺:QUARTUSII 6.0 軟件 MARS-1270 CPLD 1602 液晶四設計思路與設計步驟:1.1602 液晶指令介紹:要想控制 1602 液晶顯示字符,
2、首先需要弄清楚1602 有那些可控管腳,有哪些控制命令, 如何控制其顯示, 如何控制其移動及如何控制其移動速度及方向等,下面首先介紹一下我所要用的指令及管腳等。( 1)接口說明:(2)基本操作時序:A. 讀狀態:輸入: RS=L,RW=H,E=H,輸出: DB0-DB7=狀態字B. 寫指令:輸入: RS=L,RW=L,E=下降沿脈沖, DBO-DB7=指令碼 ,輸出:無C.讀數據:輸入: RS=H,RW=H,E=H,輸出: DB0-DB7=數據D.寫數據:輸入: RS=H,RW=L,E=下降沿脈沖, DBO-DB7=數據 ,輸出:無(3)指令集及其設置說明:A. 清屏指令:功能:<1&g
3、t;<2>清除液晶顯示器即將 DDRAM的內容全部填入光標歸位,即將光標撤回液晶顯示屏的左上方" 空白 " 的 ASCII碼20H;<3>將地址計數器(AC)的值設為0。B. 進入設置模式指令:功能:設定每次定入 1位數據后光標的移位方向,并且設定每次寫入的一個字符是否移動。參數設定的情況如下所示:位名設置I/D0=寫入新數據后光標左移1=寫入新數據后光標右移S0=寫入新數據后顯示屏不移 1=寫入新數據后顯示屏整體右移 1字符C.顯示開關控制指令:功能:控制顯示器開 / 關、光標顯示 / 關閉以及光標是否閃爍。參數設定的情況如下:位名設置D0=顯示功
4、能關1=顯示功能開C0=無光標1=有光標B0=光標閃爍1=光標不閃爍D.設定顯示屏或光標移動方向指令:功能:使光標移位或使整個顯示屏幕移位。參數設定的情況如下:S/C R/L設定情況00光標左移 1格,且 AC值減 101光標右移 1格,且 AC值加 110顯示器上字符全部左移一格,但光標不動11顯示器上字符全部右移一格,但光標不動E. 功能設定指令:功能:設定數據總線位數、顯示的行數及字型。參數設定的情況如下:位名設置DL0=數據總線為 4位1=數據總線為 8位N0=顯示 1行1=顯示 2行F0=5 ×7 點陣 / 每字符1=5×10 點陣/ 每字符F. 設定 CGRAM
5、地址指令:功能:設定下一個要存入數據的CGRAM的地址。DB5DB4DB3 為字符號,也就是你將來要顯示該字符時要用到的字符地址。 (000111) (能定義八個字符)DB2DB1DB0 為行號。(000111)(八行)G.設定 DDRAM地址指令 ;功能:設定下一個要存入數據的DDRAM的地址。H.數據寫入 DDRAM或 CGRAM指令:功能: <1> 將字符碼寫入 DDRAM,以使液晶顯示屏顯示出相對應的字符;<2>將使用者自己設計的圖形存入CGRAM。DB7DB6DB5可為任何數據,一般取“000”。DB4DB3DB2DB1DB0對應于每行 5 點的字模數據。2.
6、 設計流程:弄懂 1602 中各種管腳及其控制方法以及各種指令的指令碼后, 就可以進行程序的編寫了,首先整理一下編寫流程:初始化設置狀態狀態轉換3. 設計源程序: library IEEE;use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity lcd_1602 isPort ( clk : in std_logic;reset:in std_logic;lcdrs : out std_logic;- 讀或寫指令 | 數據控制端lcdrw : out s
7、td_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 isType state is(set_qingping,set_nobusy,set_cursor,set_switch,set_ddram,write_data,s et_ddram1,write_data1,set_d
8、dram2,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_d ata12,set_ddram13,write_data13,set_ddram14,write_d
9、ata14,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,write
10、_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&q
11、uot;);- 把“王”字字模寫入數組; 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_log
12、ic;signal clkdiv6: std_logic;beginlcdrw <= '0' ; -讀寫控制端設為寫有效process(clk,reset)Beginif(reset='0')thenclkcnt<="0000000000000000000"elsif(clk'event and clk='1')thenif(clkcnt=divcnt)thenclkcnt<="0000000000000000000"elseclkcnt<=clkcnt+1;-對系統時鐘進行
13、分頻使其工作周期為end if;end if;end process ;tc_clkcnt<='1' when clkcnt=divcnt else '0'-tc_clkcnt為12.5ms12.5msprocess(tc_clkcnt,reset)beginif(reset='0')thenclkdiv<='0'elsif(tc_clkcnt'event and tc_clkcnt='1')thenclkdiv<=not clkdiv; -進一步分頻使clkdiv=2*12.5ms;en
14、d if;end process;process(clkdiv,reset)beginif(reset='0')thenclk_int<='0'elsif(clkdiv'event and clkdiv='1')thenclk_int<= not clk_int;-再進一步分頻使clk_int=4*12.5msend if;end process;process(clk_int,reset)beginif(reset='0')thenclkdiv2<='0' -再進一步分頻使clkdiv2
15、=8*12.5mselsif(clk_int'event and clk_int='1')thenclkdiv2<= not clkdiv2;end if;end process;process(clkdiv2,reset)beginif(reset='0')thenclkdiv3<='0' - 再進一步分頻使 clkdiv3=16*12.5ms elsif(clkdiv2'event and clkdiv2='1')thenclkdiv3<= not clkdiv3;end if;end pro
16、cess;process(clkdiv3,reset)beginif(reset='0')thenclkdiv6<='0' - 還是進一步分頻使 clkdiv6=32*12.5ms elsif(clkdiv3'event and clkdiv3='1')thenclkdiv6<= not clkdiv6;end if;end process;process(clkdiv3,reset)beginif(reset='0')thenlcden<='0'elsif(clkdiv3'eve
17、nt and clkdiv3='0')thenlcden<= not lcden;-設置使能信號頻率end if;end process;附注:進行多次分頻的目地是為了使字符顯示速度及移動速度等合適,便于觀察。control:process(clk,reset,current_state)variablecnt1:std_logic_vector(3downto 0);-beginif reset='0'thencurrent_state<=set_nobusy ;cnt1:=(others => '1');lcdrs<=
18、'0'elsif rising_edge(clkdiv6)then控制各種狀態及其轉換- 使用 clkdiv6 是為了和 lcden 吻合,達到使能目地current_state <= current_state ;lcdrs <= '0'case current_state iswhen set_nobusy=>- 測試空閑狀態data<="00111000"-38Hcurrent_state<=set_cursor;when set_cursor=>data<="00000110&quo
19、t;-進入模式設置狀態寫入新數據后光標右移current_state<=set_switch;when set_switch=>data<="00001100"-顯示開關控制狀態 ; 顯示功能開current_state<=set_qingping;when set_qingping=>data<="00000001"-清屏指令current_state<=set_ddram;when set_ddram=>data<="10000000" -設置要顯示數據的位置:第current
20、_state<=write_data;when write_data=>lcdrs<='1'data<="00110001"-設置要顯示的數據1current_state<=set_ddram1;1 行第1 列80Hwhen set_ddram1=>lcdrs<='0'-設置要顯示數據的位置:第data<="10000001"current_state<=write_data1;when write_data1=>lcdrs<='1'-設置要
21、顯示的數據2data<="00110010"current_state<=set_ddram2;1 行第2 列81Hwhen set_ddram2=>lcdrs<='0'-設置要顯示數據的位置:第1 行第 3 列 82Hdata<="10000010"-82Hcurrent_state<=write_data2;when write_data2=>lcdrs<='1'-設置要顯示的數據8data<="00111000"current_state<
22、;=set_ddram3;when set_ddram3=>lcdrs<='0'-設置要顯示數據的位置:第2 行第 4 列 83Hdata<="10000011"current_state<=write_data3;when write_data3=>lcdrs<='1'-設置要顯示的數據8data<="00111000"current_state<=set_ddram4;when set_ddram4=>lcdrs<='0'-設置要顯示數據的位置
23、:第data<="10000100"-82Hcurrent_state<=write_data4;1 行第5 列84Hwhen write_data4=>lcdrs<='1'-設置要顯示的數據data<="00110100"current_state<=set_ddram5;4when set_ddram5=>lcdrs<='0'data<="10000101" -設置要顯示數據的位置:第current_state<=write_data5;w
24、hen write_data5=>lcdrs<='1'data<="00110000"-設置要顯示的數據0current_state<=set_ddram6;1 行第6 列85Hwhen set_ddram6=>lcdrs<='0'data<="10000110"-設置要顯示數據的位置:第current_state<=write_data6;when write_data6=>lcdrs<='1'-設置要顯示的數據1data<="0
25、0110001"current_state<=set_ddram7;1 行第7 列86Hwhen set_ddram7=>lcdrs<='0'data<="10000111"-設置要顯示數據的位置:第current_state<=write_data7;when write_data7=>lcdrs<='1'-設置要顯示的數據5data<="00110101"current_state<=set_ddram8;when set_ddram8=>lcdrs
26、<='0'data<="10001000"-設置要顯示數據的位置:第1 行第1 行第8 列9 列87H88Hcurrent_state<=write_data8;when write_data8=>lcdrs<='1'data<="00101101" -設置要顯示的數據 -current_state<=set_ddram9;when set_ddram9=>lcdrs<='0'data<="10001001"-設置要顯示數據的位
27、置:第1 行第 10 列 89Hcurrent_state<=write_data9;when write_data9=>lcdrs<='1'data<="01011010" -設置要顯示的數據Zcurrent_state<=set_ddram10;when set_ddram10=>lcdrs<='0'data<="10001010"-設置要顯示數據的位置: 第 1 行第 11 列 90Hcurrent_state<=write_data10;when write_d
28、ata10=>lcdrs<='1'data<="01000111" -設置要顯示的數據Gcurrent_state<=set_ddram11;when set_ddram11=>lcdrs<='0'data<="10001011"-設置要顯示數據的位置: 第current_state<=write_data11;when write_data11=>lcdrs<='1'data<="01001100" -設置要顯示的數據L
29、current_state<=set_ddram12;1 行第12 列91Hwhen set_ddram12=>lcdrs<='0'data<="11000000"-設置要顯示數據的位置: 第2 行第1 列C0Hcurrent_state<=write_data12;when write_data12=>lcdrs<='1'-設置要顯示的數據1data<="00110001"current_state<=set_ddram13;when set_ddram13=>
30、lcdrs<='0'data<="11000001"-設置要顯示數據的位置:第2 行第2 列C1Hcurrent_state<=write_data13;when write_data13=>lcdrs<='1'-設置要顯示的數據data<="00110010"current_state<=set_ddram14;2when set_ddram14=>lcdrs<='0'data<="11000010"-設置要顯示數據的位置:第
31、current_state<=write_data14;when write_data14=>lcdrs<='1'-設置要顯示的數據8data<="00111000"current_state<=set_ddram15;2 行第3 列C2Hwhen set_ddram15=>lcdrs<='0'data<="11000011"-設置要顯示數據的位置:第current_state<=write_data15;when write_data15=>lcdrs<=
32、'1'data<="00111000"-設置要顯示的數據8current_state<=set_ddram16;2 行第4 列C3Hwhen set_ddram16=>lcdrs<='0'data<="11000100"-設置要顯示數據的位置:第current_state<=write_data16;when write_data16=>lcdrs<='1'-設置要顯示的數據4data<="00110100"current_state
33、<=set_ddram17;2 行第5 列C4Hwhen set_ddram17=>lcdrs<='0'data<="11000101"-設置要顯示數據的位置:第2 行第6 列C5Hcurrent_state<=write_data17;when write_data17=>lcdrs<='1' -設置要顯示的數據data<="00110000"0current_state<=set_ddram18;when set_ddram18=>lcdrs<='
34、;0'data<="11000110"-設置要顯示數據的位置:第2 行第7 列C6Hcurrent_state<=write_data18;when write_data18=>lcdrs<='1'-設置要顯示的數據data<="00110010"current_state<=set_ddram19;2when set_ddram19=>lcdrs<='0'data<="11000111"-設置要顯示數據的位置:第2 行第8 列C7Hcurr
35、ent_state<=write_data19;when write_data19=>lcdrs<='1'-設置要顯示的數據data<="00111000"current_state<=set_ddram20;8when set_ddram20=>lcdrs<='0'data<="11001000"-設置要顯示數據的位置:第current_state<=write_data20;when write_data20=>lcdrs<='1'-設置
36、要顯示的數據 -data<="00101101"current_state<=set_ddram21;2 行第9 列C8Hwhen set_ddram21=>lcdrs<='0'data<="11001001"-設置要顯示數據的位置: 第2 行第10 列C9Hcurrent_state<=write_data21;when write_data21=>lcdrs<='1'-設置要顯示的數據Xdata<="01011000"current_state&
37、lt;=set_ddram22;when set_ddram22=>lcdrs<='0'data<="11001010"-設置要顯示數據的位置: 第2 行第11 列CAHcurrent_state<=write_data22;when write_data22=>lcdrs<='1'-設置要顯示的數據data<="01001000"current_state<=set_ddram23;Hwhen set_ddram23=>lcdrs<='0'dat
38、a<="11001011"-設置要顯示數據的位置: 第current_state<=write_data23;when write_data23=>lcdda<='1'-設置要顯示的數據Ydata<="01011001"current_state<=set_cgram;when set_cgram=>lcdda<='0'data<="01000000"-設定 CGRAM地址指令;current_state<=write_cgram;when w
39、rite_cgram=>lcdda<='1'cnt1:=cnt1+1;-向 CGRAM中寫入“王”字;data<=cgram(conv_integer(cnt1);if cnt1 = "1000" thencurrent_state<=set_ddram24;end if;2 行第12 列CBHwhen set_ddram24=>lcdda<='0'-設定王字的顯示位置data<="10001100"current_state<=write_data24;第 1行第13 列92Hwhen write_data24=>lcdda<='1'-設置要顯示的王字data<="00000000"current_state<=set_ddram25;when set_ddram25=>lcdda<='0'-設定王字的顯示位置data<="11001100"current_state<=write_data25;when write_data25=>lcdda<='1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 繼承人合同協議書
- 全自動鋪布機項目可行研究報告
- 2025年重組腺病毒P53抗癌因子項目建議書
- 2025年鎢基高比重合金合作協議書
- 高端私人游艇碼頭泊位租賃與船舶租賃代理服務合同
- 抖音短視頻創作者信用評價與激勵措施合作協議
- 知識產權稅費減免效果評估合作協議
- 脊髓骨折的護理
- 生物檢測潔凈室租賃合同及設備維護協議
- 跨境貿易集裝箱GPS追蹤器租賃合同
- 材料科學基礎基礎知識點總結
- 數控銑工圖紙(60份)(共60頁)
- 新時達-奧莎(sigriner)iAStar-S32電梯專用變頻器使用說明書
- 《青年友誼圓舞曲》教案
- 馬清河灌區灌溉系統的規劃設計課程設計
- 惠州市出租車駕駛員從業資格區域科目考試題庫(含答案)
- 加工設備工時單價表
- 高脂血癥藥物治療ppt課件
- 單開、菱形及復式交分道岔的檢查方法帶圖解
- 瀝青拌和站管理制度匯編(正式版)
- 高層建筑等電位聯結安裝技術分析探討
評論
0/150
提交評論