fpga課程設(shè)計報告---基于cpld的1602字符液晶顯示系統(tǒng)設(shè)計_第1頁
已閱讀1頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  FPGA課程設(shè)計報告</p><p>  題 目:基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計 </p><p>  院 系: 信息與電氣工程學(xué)院 </p><p>  班 級: 電子信息工程 </p><p>  學(xué) 號:

2、 </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: </p><p>  成 績:

3、 </p><p><b>  2011年7月</b></p><p>  基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計</p><p><b>  設(shè)計題目:</b></p><p>  基于CPLD的1602字符液晶顯示系統(tǒng)設(shè)計</p><p><b

4、>  設(shè)計要求技術(shù)指標:</b></p><p>  要求用1602液晶顯示字符;</p><p>  顯示內(nèi)容:學(xué)號+英文姓名;</p><p>  顯示方式:流動顯示,開關(guān)控制字符流動速度及方向;具有暫停和清 </p><p><b>  屏的功能;</b></p><p>

5、<b>  設(shè)計平臺:</b></p><p>  QUARTUSII 6.0軟件 MARS-1270 CPLD 1602液晶</p><p>  設(shè)計思路與設(shè)計步驟:</p><p>  1.1602液晶指令介紹:</p><p>  要想控制1602液晶顯示字符,首先需要弄清楚1602有那些可控管腳,

6、 </p><p>  有哪些控制命令,如何控制其顯示,如何控制其移動及如何控制其移動速度及方向等,下面首先介紹一下我所要用的指令及管腳等。</p><p><b> ?。?)接口說明:</b></p><p>  (2)基本操作時序:</p><p>  A.讀狀態(tài):輸入:RS=L,RW=H,E=H, 輸出:DB

7、0--DB7=狀態(tài)字</p><p>  B.寫指令:輸入:RS=L,RW=L,E=下降沿脈沖,DBO--DB7=指令碼, 輸出:無</p><p>  C.讀數(shù)據(jù):輸入:RS=H,RW=H,E=H,輸出:DB0--DB7=數(shù)據(jù)</p><p>  D.寫數(shù)據(jù):輸入:RS=H,RW=L,E=下降沿脈沖,DBO--DB7=數(shù)據(jù), 輸出:無</p><

8、;p> ?。?)指令集及其設(shè)置說明:</p><p><b>  清屏指令:</b></p><p>  功能:<1> 清除液晶顯示器即將DDRAM 的內(nèi)容全部填入"空白"的ASCII碼20H;</p><p>  <2> 光標歸位,即將光標撤回液晶顯示屏的左上方;</p><

9、;p>  <3> 將地址計數(shù)器(AC)的值設(shè)為0。</p><p><b>  進入設(shè)置模式指令:</b></p><p>  功能:設(shè)定每次定入1位數(shù)據(jù)后光標的移位方向,并且設(shè)定每次寫入的一個</p><p>  字符是否移動。參數(shù)設(shè)定的情況如下所示:</p><p><b>  位名設(shè)置&

10、lt;/b></p><p>  I/D 0=寫入新數(shù)據(jù)后光標左移 1=寫入新數(shù)據(jù)后光標右移</p><p>  S 0=寫入新數(shù)據(jù)后顯示屏不移 1=寫入新數(shù)據(jù)后顯示屏整體右移1字符</p><p><b>  顯示開關(guān)控制指令:</b></p><p>  功能:控制顯示器

11、開/關(guān)、光標顯示/關(guān)閉以及光標是否閃爍。參數(shù)設(shè)定的情</p><p><b>  況如下:</b></p><p><b>  位名設(shè)置</b></p><p>  D 0=顯示功能關(guān) 1=顯示功能開</p><p>  C 0=無光標 1=有光標</p&

12、gt;<p>  B 0=光標閃爍 1=光標不閃爍</p><p>  設(shè)定顯示屏或光標移動方向指令:</p><p>  功能:使光標移位或使整個顯示屏幕移位。參數(shù)設(shè)定的情況如下:</p><p>  S/C R/L 設(shè)定情況</p><p>  0 0 光標左移1格,且AC值減1</p

13、><p>  0 1 光標右移1格,且AC值加1</p><p>  1 0 顯示器上字符全部左移一格,但光標不動</p><p>  1 1 顯示器上字符全部右移一格,但光標不動</p><p><b>  功能設(shè)定指令:</b></p><p>  功能:設(shè)定數(shù)

14、據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:</p><p><b>  位名設(shè)置</b></p><p>  DL 0=數(shù)據(jù)總線為4位 1=數(shù)據(jù)總線為8位</p><p>  N 0=顯示1行 1=顯示2行</p><p>  F 0=5×7點陣/每字

15、符 1=5×10點陣/每字符</p><p>  設(shè)定CGRAM地址指令:</p><p>  功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址。</p><p>  DB5DB4DB3 為字符號,也就是你將來要顯示該字符時要用到的字符</p><p>  地址。(000~111)(能定義八個字符)</p><

16、;p>  DB2DB1DB0為行號。(000~111)(八行)</p><p>  設(shè)定DDRAM地址指令;</p><p>  功能:設(shè)定下一個要存入數(shù)據(jù)的DDRAM的地址。</p><p>  數(shù)據(jù)寫入DDRAM或CGRAM指令:</p><p>  功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符

17、;</p><p>  <2> 將使用者自己設(shè)計的圖形存入CGRAM。</p><p>  DB7DB6DB5可為任何數(shù)據(jù),一般取“000”。</p><p>  DB4DB3DB2DB1DB0對應(yīng)于每行5點的字模數(shù)據(jù)。</p><p><b>  設(shè)計流程:</b></p><p>

18、  弄懂1602中各種管腳及其控制方法以及各種指令的指令碼后,就可以進 行程序的編寫了,首先整理一下編寫流程:</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è)計源程序:</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;--讀|寫控制端</p><p>  lcden : buffer std_logic; --使能端</p><p>  data : out std_logic_vector(7 downto 0);</p><p>  key1: in std_logic; --撥碼開關(guān)控制移動與不動;</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>  --把“王”字字模寫入數(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' ; --讀寫控制端設(shè)為寫有效</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; --對系統(tǒng)時鐘進行分頻使其工作周期為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; --進一步分頻使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; --再進一步分頻使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'; --再進一步分頻使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'; --再進一步分頻使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'; --還是進一步分頻使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è)置使能信號頻率</p><p><b>  end if;</b></p><p>  end process; </p><p>  附注:進行多次分頻的目地是為了使字符顯示速度及移動速度等合適,便于觀察。</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吻合,達到使能

47、目地</p><p>  current_state <= current_state ;</p><p>  lcdrs <= '0';</p><p>  case current_state is</p><p>  when set_nobusy=> --測試空閑狀態(tài) <

48、;/p><p>  data<="00111000";--38H</p><p>  current_state<=set_cursor;</p><p>  when set_cursor=></p><p>  data<="00000110"; --進入模式設(shè)置狀態(tài)寫入新數(shù)

49、據(jù)后光標右移</p><p>  current_state<=set_switch;</p><p>  when set_switch=></p><p>  data<="00001100"; --顯示開關(guān)控制狀態(tà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中寫入“王”字;</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è)計結(jié)果:</b></p><p>  顯示12884015-ZGL王</p><p>  12884028-XHY 王&

108、lt;/p><p><b>  自定義漢字顯示:</b></p><p><b>  步驟如下:</b></p><p>  先將自定義字符或漢字寫入CGRAM,如下圖定義A的字模一樣所示:如果想自定義一個"十",則八行的字符串構(gòu)成一個數(shù)組,每個元素是一個八位的二進制字符串,則十所構(gòu)成的字模為(不夠八位的前

109、三位補零):</p><p>  data[8]=(“00000100”,“00000100”,“00000100”,“00011111”,“00000100”,</p><p>  “00000100”,“00000100”,“00000100”,)</p><p>  把這個數(shù)組寫到CGRAM中某一個位置中,比如第一個留下來的位置中,則這個“十”字就可以和CGR

110、OM中已有的字符一樣的顯示到液晶中了。</p><p>  共七行(剩余略去) </p><p><b>  設(shè)計總結(jié):</b></p><p>  要想控制1602液晶顯示,首先需要了解1602的各種參數(shù)指令及控制,其次就是需要熟悉 QUARTUSII 6.0軟件的用法,會使用VHDL語言來編寫程序控制,</p><

111、p>  在寫程序時還需注意各種狀態(tài)之間的轉(zhuǎn)換,特別注意時鐘的協(xié)調(diào)設(shè)置,程序比較長,比較繁瑣,要注意有耐心且一定要細心認真。</p><p><b>  六.設(shè)計體會:</b></p><p>  通過這一周的忙碌,終于把我和組員的學(xué)號及姓名的首字母成功的顯示到了</p><p>  1602液晶上,通過這次課程設(shè)計,我們組再一次鞏固了FP

112、GA的有關(guān)知識,更深入的掌握了VHDL語言的用法,更重要的是我們學(xué)會了利用mars-1270編寫程序去控制1602液晶顯示,掌握了1602的各種指令及控制方法,雖然很累,中間遇到了很多困難,但在老師和同學(xué)的幫助下,最終還是完成了,我們很滿意。過程很累,程序很繁瑣,讓人看著頭疼,但在老師和同學(xué)的鼓勵和幫助下,最終勝利完成任務(wù)的感覺還是非常好的,再次感謝鄭老師和田同學(xué)的耐心幫助。</p><p><b> 

113、 附:</b></p><p>  CGROM中部分字符碼與部分字符字模關(guān)系對照表:</p><p><b>  參考文獻:</b></p><p>  CPLD/FPGA設(shè)計及應(yīng)用 羅朝霞 高書莉著 人民郵電出版社</p><p>  液晶LCD1602中文資料 </p><p

溫馨提示

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

評論

0/150

提交評論