版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> FPGA課程設(shè)計(jì)報(bào)告</p><p> 題 目:基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計(jì) </p><p> 院 系: 信息與電氣工程學(xué)院 </p><p> 班 級(jí): 電子信息工程 </p><p> 學(xué) 號(hào):
2、 </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: </p><p> 成 績(jī):
3、 </p><p><b> 2011年7月</b></p><p> 基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計(jì)</p><p><b> 設(shè)計(jì)題目:</b></p><p> 基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計(jì)</p><p><b
4、> 設(shè)計(jì)要求技術(shù)指標(biāo):</b></p><p> 要求用1602液晶顯示字符;</p><p> 顯示內(nèi)容:學(xué)號(hào)+英文姓名;</p><p> 顯示方式:流動(dòng)顯示,開(kāi)關(guān)控制字符流動(dòng)速度及方向;具有暫停和清 </p><p><b> 屏的功能;</b></p><p>
5、<b> 設(shè)計(jì)平臺(tái):</b></p><p> QUARTUSII 6.0軟件 MARS-1270 CPLD 1602液晶</p><p> 設(shè)計(jì)思路與設(shè)計(jì)步驟:</p><p> 1.1602液晶指令介紹:</p><p> 要想控制1602液晶顯示字符,首先需要弄清楚1602有那些可控管腳,
6、 </p><p> 有哪些控制命令,如何控制其顯示,如何控制其移動(dòng)及如何控制其移動(dòng)速度及方向等,下面首先介紹一下我所要用的指令及管腳等。</p><p><b> ?。?)接口說(shuō)明:</b></p><p> ?。?)基本操作時(shí)序:</p><p> A.讀狀態(tài):輸入:RS=L,RW=H,E=H, 輸出:DB
7、0--DB7=狀態(tài)字</p><p> B.寫(xiě)指令:輸入:RS=L,RW=L,E=下降沿脈沖,DBO--DB7=指令碼, 輸出:無(wú)</p><p> C.讀數(shù)據(jù):輸入:RS=H,RW=H,E=H,輸出:DB0--DB7=數(shù)據(jù)</p><p> D.寫(xiě)數(shù)據(jù):輸入:RS=H,RW=L,E=下降沿脈沖,DBO--DB7=數(shù)據(jù), 輸出:無(wú)</p><
8、;p> (3)指令集及其設(shè)置說(shuō)明:</p><p><b> 清屏指令:</b></p><p> 功能:<1> 清除液晶顯示器即將DDRAM 的內(nèi)容全部填入"空白"的ASCII碼20H;</p><p> <2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;</p><
9、;p> <3> 將地址計(jì)數(shù)器(AC)的值設(shè)為0。</p><p><b> 進(jìn)入設(shè)置模式指令:</b></p><p> 功能:設(shè)定每次定入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫(xiě)入的一個(gè)</p><p> 字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示:</p><p><b> 位名設(shè)置&
10、lt;/b></p><p> I/D 0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移 1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移</p><p> S 0=寫(xiě)入新數(shù)據(jù)后顯示屏不移 1=寫(xiě)入新數(shù)據(jù)后顯示屏整體右移1字符</p><p><b> 顯示開(kāi)關(guān)控制指令:</b></p><p> 功能:控制顯示器
11、開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情</p><p><b> 況如下:</b></p><p><b> 位名設(shè)置</b></p><p> D 0=顯示功能關(guān) 1=顯示功能開(kāi)</p><p> C 0=無(wú)光標(biāo) 1=有光標(biāo)</p&
12、gt;<p> B 0=光標(biāo)閃爍 1=光標(biāo)不閃爍</p><p> 設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令:</p><p> 功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下:</p><p> S/C R/L 設(shè)定情況</p><p> 0 0 光標(biāo)左移1格,且AC值減1</p
13、><p> 0 1 光標(biāo)右移1格,且AC值加1</p><p> 1 0 顯示器上字符全部左移一格,但光標(biāo)不動(dòng)</p><p> 1 1 顯示器上字符全部右移一格,但光標(biāo)不動(dòng)</p><p><b> 功能設(shè)定指令:</b></p><p> 功能:設(shè)定數(shù)
14、據(jù)總線(xiàn)位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:</p><p><b> 位名設(shè)置</b></p><p> DL 0=數(shù)據(jù)總線(xiàn)為4位 1=數(shù)據(jù)總線(xiàn)為8位</p><p> N 0=顯示1行 1=顯示2行</p><p> F 0=5×7點(diǎn)陣/每字
15、符 1=5×10點(diǎn)陣/每字符</p><p> 設(shè)定CGRAM地址指令:</p><p> 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。</p><p> DB5DB4DB3 為字符號(hào),也就是你將來(lái)要顯示該字符時(shí)要用到的字符</p><p> 地址。(000~111)(能定義八個(gè)字符)</p><
16、;p> DB2DB1DB0為行號(hào)。(000~111)(八行)</p><p> 設(shè)定DDRAM地址指令;</p><p> 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的DDRAM的地址。</p><p> 數(shù)據(jù)寫(xiě)入DDRAM或CGRAM指令:</p><p> 功能:<1> 將字符碼寫(xiě)入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符
17、;</p><p> <2> 將使用者自己設(shè)計(jì)的圖形存入CGRAM。</p><p> DB7DB6DB5可為任何數(shù)據(jù),一般取“000”。</p><p> DB4DB3DB2DB1DB0對(duì)應(yīng)于每行5點(diǎn)的字模數(shù)據(jù)。</p><p><b> 設(shè)計(jì)流程:</b></p><p>
18、 弄懂1602中各種管腳及其控制方法以及各種指令的指令碼后,就可以進(jìn) 行程序的編寫(xiě)了,首先整理一下編寫(xiě)流程:</p><p><b> 初始化</b></p><p><b> 設(shè)置狀態(tài)</b></p><p><b> 狀態(tài)轉(zhuǎn)換</b></p><p><b&g
19、t; 3.設(shè)計(jì)源程序:</b></p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;</p><p> use IEEE.STD_LOGIC_ARITH.ALL;</p><p> use IEEE.STD_LOGIC_UNSIGNED.ALL;<
20、/p><p> entity lcd_1602 is</p><p> Port ( clk : in std_logic;</p><p> reset:in std_logic;</p><p> lcdrs : out std_logic;--讀或?qū)懼噶顋數(shù)據(jù)控制端</p><p> lcdrw : o
21、ut std_logic;--讀|寫(xiě)控制端</p><p> lcden : buffer std_logic; --使能端</p><p> data : out std_logic_vector(7 downto 0);</p><p> key1: in std_logic; --撥碼開(kāi)關(guān)控制移動(dòng)與不動(dòng);</p>
22、<p> key2: in std_logic);</p><p> end lcd_1602;</p><p> Architecture Behavioral of lcd_1602 is</p><p> Type state is</p><p> (set_qingping,set_nobusy,set_
23、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,wr
24、ite_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
25、,set_ddram16,write_data16,set_d</p><p> type ram2 is array(0 to 7) of std_logic_vector(7 downto 0);</p><p> constant cgram:ram2:=(("00011111"),("00000100"),("00000100&
26、quot;),</p><p> ("00011111"),("00000100"),("00000100"),("00000100"),("00011111"));</p><p> --把“王”字字模寫(xiě)入數(shù)組;</p><p> signal current
27、_state:state;</p><p> signal clkcnt: std_logic_vector(18 downto 0);</p><p> Constant divcnt:std_logic_vector(18 downto 0):="1111001110001000000";</p><p> signal clkdiv:
28、 std_logic;</p><p> signal tc_clkcnt: std_logic; </p><p> signal clk_int: std_logic;</p><p> signal clkdiv2: std_logic;</p><p> signal clkdiv3: std_logic;</p>
29、<p> signal clkdiv6: std_logic;</p><p><b> begin </b></p><p> lcdrw <= '0' ; --讀寫(xiě)控制端設(shè)為寫(xiě)有效</p><p> process(clk,reset)</p><p><b>
30、; Begin</b></p><p> if(reset='0')then</p><p> clkcnt<="0000000000000000000";</p><p> elsif(clk'event and clk='1')then</p><p>
31、 if(clkcnt=divcnt)then clkcnt<="0000000000000000000";</p><p><b> else</b></p><p> clkcnt<=clkcnt+1; --對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻使其工作周期為12.5ms</p><p><b
32、> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> tc_clkcnt<='1' when clkcnt=divcnt else '0'; --tc_clkcnt為12.5ms</p&
33、gt;<p> process(tc_clkcnt,reset)</p><p><b> begin</b></p><p> if(reset='0')then</p><p> clkdiv<='0';</p><p> elsif(tc_clkcnt&
34、#39;event and tc_clkcnt='1')then</p><p> clkdiv<=not clkdiv; --進(jìn)一步分頻使clkdiv=2*12.5ms;</p><p><b> end if;</b></p><p> end process;</p><p> pr
35、ocess(clkdiv,reset)</p><p><b> begin</b></p><p> if(reset='0')then</p><p> clk_int<='0';</p><p> elsif(clkdiv'event and clkdiv=
36、39;1')then</p><p> clk_int<= not clk_int; --再進(jìn)一步分頻使clk_int=4*12.5ms </p><p><b> end if;</b></p><p> end process;</p><p> process(clk_int,rese
37、t)</p><p><b> begin</b></p><p> if(reset='0')then</p><p> clkdiv2<='0'; --再進(jìn)一步分頻使clkdiv2=8*12.5ms</p><p> elsif(clk_int'event an
38、d clk_int='1')then</p><p> clkdiv2<= not clkdiv2; </p><p><b> end if;</b></p><p> end process;</p><p> process(clkdiv2,reset)</p><
39、p><b> begin</b></p><p> if(reset='0')then</p><p> clkdiv3<='0'; --再進(jìn)一步分頻使clkdiv3=16*12.5ms</p><p> elsif(clkdiv2'event and clkdiv2='
40、1')then</p><p> clkdiv3<= not clkdiv3; </p><p><b> end if;</b></p><p> end process;</p><p> process(clkdiv3,reset)</p><p><b>
41、; begin</b></p><p> if(reset='0')then</p><p> clkdiv6<='0'; --還是進(jìn)一步分頻使clkdiv6=32*12.5ms</p><p> elsif(clkdiv3'event and clkdiv3='1')then
42、</p><p> clkdiv6<= not clkdiv6; </p><p><b> end if;</b></p><p> end process;</p><p> process(clkdiv3,reset)</p><p><b> begin</
43、b></p><p> if(reset='0')then</p><p> lcden<='0';</p><p> elsif(clkdiv3'event and clkdiv3='0')then</p><p> lcden<= not lcden;
44、--設(shè)置使能信號(hào)頻率</p><p><b> end if;</b></p><p> end process; </p><p> 附注:進(jìn)行多次分頻的目地是為了使字符顯示速度及移動(dòng)速度等合適,便于觀察。</p><p> control:process(clk,reset,current_state
45、)</p><p> variable cnt1: std_logic_vector(3 downto 0); --控制各種狀態(tài)及其轉(zhuǎn)換 </p><p><b> begin</b></p><p> if reset='0'then</p><p> current_state<
46、=set_nobusy ;</p><p> cnt1:=(others => '1');</p><p> lcdrs<='0';</p><p> elsif rising_edge(clkdiv6)then </p><p> --使用clkdiv6是為了和lcden吻合,達(dá)到使能
47、目地</p><p> current_state <= current_state ;</p><p> lcdrs <= '0';</p><p> case current_state is</p><p> when set_nobusy=> --測(cè)試空閑狀態(tài) <
48、;/p><p> data<="00111000";--38H</p><p> current_state<=set_cursor;</p><p> when set_cursor=></p><p> data<="00000110"; --進(jìn)入模式設(shè)置狀態(tài)寫(xiě)入新數(shù)
49、據(jù)后光標(biāo)右移</p><p> current_state<=set_switch;</p><p> when set_switch=></p><p> data<="00001100"; --顯示開(kāi)關(guān)控制狀態(tài);顯示功能開(kāi)</p><p> current_state<=set_qi
50、ngping;</p><p> when set_qingping=></p><p> data<="00000001"; --清屏指令</p><p> current_state<=set_ddram;</p><p> when set_ddram=></p>&
51、lt;p> data<="10000000"; --設(shè)置要顯示數(shù)據(jù)的位置:第1行第1列80H</p><p> current_state<=write_data;</p><p> when write_data=> </p><p> lcdrs<='1';<
52、/p><p> data<="00110001";--設(shè)置要顯示的數(shù)據(jù)1</p><p> current_state<=set_ddram1;</p><p> when set_ddram1=></p><p> lcdrs<='0'; -- 設(shè)置要顯示數(shù)據(jù)的位置:
53、第1行第2列81H</p><p> data<="10000001";</p><p> current_state<=write_data1;</p><p> when write_data1=></p><p> lcdrs<='1'; --設(shè)置要顯示的
54、數(shù)據(jù)2</p><p> data<="00110010";</p><p> current_state<=set_ddram2;</p><p> when set_ddram2=></p><p> lcdrs<='0'; -- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第3
55、列82H</p><p> data<="10000010";--82H</p><p> current_state<=write_data2;</p><p> when write_data2=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)8
56、</p><p> data<="00111000";</p><p> current_state<=set_ddram3;</p><p> when set_ddram3=></p><p> lcdrs<='0';-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第4列83H<
57、/p><p> data<="10000011";</p><p> current_state<=write_data3;</p><p> when write_data3=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)8</p>&
58、lt;p> data<="00111000";</p><p> current_state<=set_ddram4;</p><p> when set_ddram4=></p><p> lcdrs<='0'; -- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第5列84H</p>&l
59、t;p> data<="10000100";--82H</p><p> current_state<=write_data4;</p><p> when write_data4=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)4</p><
60、p> data<="00110100";</p><p> current_state<=set_ddram5;</p><p> when set_ddram5=></p><p> lcdrs<='0';</p><p> data<="10000
61、101"; -- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第6列85H</p><p> current_state<=write_data5;</p><p> when write_data5=></p><p> lcdrs<='1';</p><p> data<="001100
62、00"; --設(shè)置要顯示的數(shù)據(jù)0</p><p> current_state<=set_ddram6;</p><p> when set_ddram6=></p><p> lcdrs<='0';</p><p> data<="10000110";-- 設(shè)
63、置要顯示數(shù)據(jù)的位置:第1行第7列86H</p><p> current_state<=write_data6;</p><p> when write_data6=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)1</p><p> data<="0011000
64、1";</p><p> current_state<=set_ddram7;</p><p> when set_ddram7=></p><p> lcdrs<='0';</p><p> data<="10000111";-- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第8
65、列87H</p><p> current_state<=write_data7;</p><p> when write_data7=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)5</p><p> data<="00110101";</p&
66、gt;<p> current_state<=set_ddram8;</p><p> when set_ddram8=></p><p> lcdrs<='0';</p><p> data<="10001000";-- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第9列88H</p>
67、<p> current_state<=write_data8;</p><p> when write_data8=></p><p> lcdrs<='1';</p><p> data<="00101101"; --設(shè)置要顯示的數(shù)據(jù)-</p><p> c
68、urrent_state<=set_ddram9; </p><p> when set_ddram9=></p><p> lcdrs<='0';</p><p> data<="10001001";-- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第10列89H</p><p> cur
69、rent_state<=write_data9;</p><p> when write_data9=></p><p> lcdrs<='1';</p><p> data<="01011010"; --設(shè)置要顯示的數(shù)據(jù)Z</p><p> current_state&l
70、t;=set_ddram10;</p><p> when set_ddram10=></p><p> lcdrs<='0';</p><p> data<="10001010";-- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第11列90H</p><p> current_state<
71、;=write_data10;</p><p> when write_data10=></p><p> lcdrs<='1';</p><p> data<="01000111"; --設(shè)置要顯示的數(shù)據(jù)G </p><p> current_state<=set_ddr
72、am11;</p><p> when set_ddram11=></p><p> lcdrs<='0';</p><p> data<="10001011";-- 設(shè)置要顯示數(shù)據(jù)的位置:第1行第12列91H</p><p> current_state<=write_da
73、ta11;</p><p> when write_data11=></p><p> lcdrs<='1';</p><p> data<="01001100"; --設(shè)置要顯示的數(shù)據(jù)L</p><p> current_state<=set_ddram12;</p
74、><p> when set_ddram12=></p><p> lcdrs<='0';</p><p> data<="11000000";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第1列C0H</p><p> current_state<=write_data12;</p&
75、gt;<p> when write_data12=> </p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)1</p><p> data<="00110001";</p><p> current_state<=set_ddram13;<
76、;/p><p> when set_ddram13=></p><p> lcdrs<='0';</p><p> data<="11000001";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第2列C1H</p><p> current_state<=write_data13;<
77、/p><p> when write_data13=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)2</p><p> data<="00110010";</p><p> current_state<=set_ddram14;</p>&l
78、t;p> when set_ddram14=></p><p> lcdrs<='0';</p><p> data<="11000010";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第3列C2H</p><p> current_state<=write_data14;</p><
79、;p> when write_data14=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)8</p><p> data<="00111000";</p><p> current_state<=set_ddram15;</p><p>
80、when set_ddram15=></p><p> lcdrs<='0';</p><p> data<="11000011";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第4列C3H</p><p> current_state<=write_data15;</p><p> w
81、hen write_data15=></p><p> lcdrs<='1';</p><p> data<="00111000";--設(shè)置要顯示的數(shù)據(jù)8</p><p> current_state<=set_ddram16;</p><p> when set_ddram
82、16=></p><p> lcdrs<='0';</p><p> data<="11000100";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第5列C4H</p><p> current_state<=write_data16;</p><p> when write_data
83、16=></p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)4</p><p> data<="00110100";</p><p> current_state<=set_ddram17;</p><p> when set_ddram17=><
84、/p><p> lcdrs<='0';</p><p> data<="11000101";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第6列C5H</p><p> current_state<=write_data17;</p><p> when write_data17=><
85、/p><p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)0</p><p> data<="00110000";</p><p> current_state<=set_ddram18;</p><p> when set_ddram18=></p><
86、p> lcdrs<='0';</p><p> data<="11000110";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第7列C6H</p><p> current_state<=write_data18;</p><p> when write_data18=></p><
87、p> lcdrs<='1'; --設(shè)置要顯示的數(shù)據(jù)2</p><p> data<="00110010";</p><p> current_state<=set_ddram19;</p><p> when set_ddram19=></p><p> lcdr
88、s<='0';</p><p> data<="11000111";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第8列C7H</p><p> current_state<=write_data19;</p><p> when write_data19=></p><p> lcdr
89、s<='1'; --設(shè)置要顯示的數(shù)據(jù)8</p><p> data<="00111000";</p><p> current_state<=set_ddram20;</p><p> when set_ddram20=></p><p> lcdrs<='
90、;0';</p><p> data<="11001000";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第9列C8H</p><p> current_state<=write_data20;</p><p> when write_data20=></p><p> lcdrs<='
91、;1'; --設(shè)置要顯示的數(shù)據(jù)-</p><p> data<="00101101";</p><p> current_state<=set_ddram21;</p><p> when set_ddram21=></p><p> lcdrs<='0';&l
92、t;/p><p> data<="11001001";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第10列C9H</p><p> current_state<=write_data21;</p><p> when write_data21=></p><p> lcdrs<='1';
93、 --設(shè)置要顯示的數(shù)據(jù)X</p><p> data<="01011000";</p><p> current_state<=set_ddram22;</p><p> when set_ddram22=></p><p> lcdrs<='0';</p>
94、<p> data<="11001010";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第11列CAH</p><p> current_state<=write_data22;</p><p> when write_data22=></p><p> lcdrs<='1'; --設(shè)置要顯
95、示的數(shù)據(jù)H</p><p> data<="01001000";</p><p> current_state<=set_ddram23;</p><p> when set_ddram23=></p><p> lcdrs<='0';</p><p>
96、; data<="11001011";-- 設(shè)置要顯示數(shù)據(jù)的位置:第2行第12列CBH</p><p> current_state<=write_data23; </p><p> when write_data23=></p><p> lcdda<='1'; --設(shè)置要顯示的數(shù)
97、據(jù)Y</p><p> data<="01011001";</p><p> current_state<=set_cgram;</p><p> when set_cgram=></p><p> lcdda<='0';</p><p> data
98、<="01000000"; --設(shè)定CGRAM地址指令;</p><p> current_state<=write_cgram;</p><p> when write_cgram=> </p><p> lcdda<='1';</p><p>
99、 cnt1:=cnt1+1; --向CGRAM中寫(xiě)入“王”字;</p><p> data<=cgram(conv_integer(cnt1)); </p><p> if cnt1 = "1000" then</p><p> current_state<=set_ddram24;</p>
100、<p><b> end if; </b></p><p> when set_ddram24=></p><p> lcdda<='0'; --設(shè)定王字的顯示位置 第1行第13列 92H</p><p> data<="10001100";</p>
101、;<p> current_state<=write_data24;</p><p> when write_data24=></p><p> lcdda<='1'; --設(shè)置要顯示的王字</p><p> data<="00000000";</p><p
102、> current_state<=set_ddram25;</p><p> when set_ddram25=></p><p> lcdda<='0'; --設(shè)定王字的顯示位置 第2行第13列 CCH</p><p> data<="11001100";</p>
103、<p> current_state<=write_data25;</p><p> when write_data25=></p><p> lcdda<='1'; --設(shè)置要顯示的王字</p><p> data<="00000000";</p><p>
104、 if key1='1' then</p><p> current_state<=shift_cur;</p><p> elsif key2='1' then</p><p> current_state<=shift_display;</p><p> end if; <
105、/p><p> when shift_cur=></p><p> lcdda<='0';</p><p> data<="00010100";</p><p> current_state<=shift_cur;</p><p> when shift
106、_display=></p><p> lcdda<='0';</p><p> data<="00011100";</p><p> when others=>null;</p><p> end case; </p><p><
107、b> end if;</b></p><p> end process;</p><p> end Behavioral;</p><p><b> 設(shè)計(jì)結(jié)果:</b></p><p> 顯示12884015-ZGL王</p><p> 12884028-XHY 王&
108、lt;/p><p><b> 自定義漢字顯示:</b></p><p><b> 步驟如下:</b></p><p> 先將自定義字符或漢字寫(xiě)入CGRAM,如下圖定義A的字模一樣所示:如果想自定義一個(gè)"十",則八行的字符串構(gòu)成一個(gè)數(shù)組,每個(gè)元素是一個(gè)八位的二進(jìn)制字符串,則十所構(gòu)成的字模為(不夠八位的前
109、三位補(bǔ)零):</p><p> data[8]=(“00000100”,“00000100”,“00000100”,“00011111”,“00000100”,</p><p> “00000100”,“00000100”,“00000100”,)</p><p> 把這個(gè)數(shù)組寫(xiě)到CGRAM中某一個(gè)位置中,比如第一個(gè)留下來(lái)的位置中,則這個(gè)“十”字就可以和CGR
110、OM中已有的字符一樣的顯示到液晶中了。</p><p> 共七行(剩余略去) </p><p><b> 設(shè)計(jì)總結(jié):</b></p><p> 要想控制1602液晶顯示,首先需要了解1602的各種參數(shù)指令及控制,其次就是需要熟悉 QUARTUSII 6.0軟件的用法,會(huì)使用VHDL語(yǔ)言來(lái)編寫(xiě)程序控制,</p><
111、p> 在寫(xiě)程序時(shí)還需注意各種狀態(tài)之間的轉(zhuǎn)換,特別注意時(shí)鐘的協(xié)調(diào)設(shè)置,程序比較長(zhǎng),比較繁瑣,要注意有耐心且一定要細(xì)心認(rèn)真。</p><p><b> 六.設(shè)計(jì)體會(huì):</b></p><p> 通過(guò)這一周的忙碌,終于把我和組員的學(xué)號(hào)及姓名的首字母成功的顯示到了</p><p> 1602液晶上,通過(guò)這次課程設(shè)計(jì),我們組再一次鞏固了FP
112、GA的有關(guān)知識(shí),更深入的掌握了VHDL語(yǔ)言的用法,更重要的是我們學(xué)會(huì)了利用mars-1270編寫(xiě)程序去控制1602液晶顯示,掌握了1602的各種指令及控制方法,雖然很累,中間遇到了很多困難,但在老師和同學(xué)的幫助下,最終還是完成了,我們很滿(mǎn)意。過(guò)程很累,程序很繁瑣,讓人看著頭疼,但在老師和同學(xué)的鼓勵(lì)和幫助下,最終勝利完成任務(wù)的感覺(jué)還是非常好的,再次感謝鄭老師和田同學(xué)的耐心幫助。</p><p><b>
113、 附:</b></p><p> CGROM中部分字符碼與部分字符字模關(guān)系對(duì)照表:</p><p><b> 參考文獻(xiàn):</b></p><p> CPLD/FPGA設(shè)計(jì)及應(yīng)用 羅朝霞 高書(shū)莉著 人民郵電出版社</p><p> 液晶LCD1602中文資料 </p><p
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于cpld的字符液晶顯示課程設(shè)計(jì)
- 新手必看1602字符液晶顯示原理+實(shí)例詳解
- 基于lcd1602液晶顯示系統(tǒng)課程設(shè)計(jì)
- 液晶顯示課程設(shè)計(jì)報(bào)告
- 1602液晶顯示仿真設(shè)計(jì)
- 1602液晶顯示仿真設(shè)計(jì)
- 課程設(shè)計(jì)-- 基于fpga的液晶顯示控制器設(shè)計(jì)
- 課程設(shè)計(jì)--lcd1602液晶字符串循環(huán)顯示
- 課程設(shè)計(jì)--12864字符圖形lcd顯示
- 單片機(jī)課程設(shè)計(jì)-字符液晶顯示器設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---字符液晶顯示
- 課程設(shè)計(jì)---液晶顯示器設(shè)計(jì)
- 基于液晶顯示cpld液晶cpld的dsp人機(jī)lcd接口圖形模塊設(shè)計(jì)
- 課程設(shè)計(jì)----液晶顯示設(shè)計(jì)與實(shí)現(xiàn)
- 液晶課程設(shè)計(jì)--單片機(jī)液晶顯示器系統(tǒng)設(shè)計(jì)
- dsp課程設(shè)計(jì)---液晶顯示器控制顯示
- dsp課程設(shè)計(jì)---液晶顯示器控制顯示
- 液晶顯示屏lcd顯示接口設(shè)計(jì)課程設(shè)計(jì)
- 液晶顯示廣告牌的設(shè)計(jì)-課程設(shè)計(jì)
- 諾基亞5110液晶顯示器應(yīng)用課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論