fpga課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  設(shè)計(jì)目的:</b></p><p>  熟練掌握和使用基于CPLD/FPGA的數(shù)字系統(tǒng)開(kāi)發(fā)工具、開(kāi)發(fā)流程,能</p><p>  夠自主進(jìn)行成熟的基于CPLD/FPGA的數(shù)字系統(tǒng)設(shè)計(jì),能夠發(fā)現(xiàn)和獨(dú)立解決</p><p>  開(kāi)發(fā)過(guò)程中遇到的問(wèn)題。 </p><p>  2、了解時(shí)序電路FPG

2、A的實(shí)現(xiàn)。</p><p>  3、學(xué)習(xí)用VHDL語(yǔ)言來(lái)描述時(shí)序電路的過(guò)程。</p><p>  4、了解LCD1602液晶顯示器的工作原理。</p><p><b>  二.設(shè)計(jì)環(huán)境:</b></p><p>  QUARTUSH 9.0 軟件 MARS-1270 CPLD實(shí)驗(yàn)版 1602液晶</p>

3、<p>  MARS-1270 CPLD實(shí)驗(yàn)版是針對(duì)CPLD/FPGA的初中級(jí)學(xué)者設(shè)計(jì),該板可 以配合其擴(kuò)展板進(jìn)行相應(yīng)的實(shí)驗(yàn),也可以作為相關(guān)CPLD/FPGA研發(fā)的原型。核心板簡(jiǎn)單實(shí)用擴(kuò)展性好,板上提供ISP接口,并將CPLD/FPGA的部分IO引腳引出,為用戶提供一個(gè)幫助用戶快速開(kāi)始可編程邏輯器件學(xué)習(xí)之旅的硬件平臺(tái)。</p><p><b>  設(shè)計(jì)要求:</b></p

4、><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>  擴(kuò)展部分:設(shè)計(jì)漢字字符及其他功能</p>&

5、lt;p>  四.設(shè)計(jì)思路及實(shí)現(xiàn)方法</p><p>  下圖所示1602字符液晶接口與實(shí)驗(yàn)板內(nèi)部相連之圖</p><p>  上圖所示是從MARS-1270 CPLD實(shí)驗(yàn)版 的手冊(cè)上截取的1602與實(shí)驗(yàn)板相連的圖,1,2,3,15,16均與實(shí)驗(yàn)板內(nèi)部電壓相連,顯示時(shí)只需注意給1602的</p><p><b>  4-14管腳賦值。</b&g

6、t;</p><p> ?。?)1602引腳定義</p><p>  1602采用標(biāo)準(zhǔn)的16腳接口,其中: </p><p>  第1腳:VSS為地電源</p><p>  第2腳:VDD接5V正電源</p><p>  第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)

7、生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度</p><p>  第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。</p><p>  第5腳:RW為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。</p>

8、;<p>  第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p>  第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p>  第15~16腳:空腳</p><p> ?。?) 1602實(shí)際寫(xiě)時(shí)每位的地址</p><p>  第一行:首地址為80H,”10000000”,最多能顯示27個(gè)

9、數(shù);尾地址為A7H,”10100111”</p><p>  第二行:首地址為 C0H,”11000000”, 最多能顯示27個(gè)數(shù);尾地址為</p><p>  E7H,”11100111”</p><p>  (3) 1602內(nèi)部</p><p>  1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如

10、表1所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用 的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地 址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”</p><p>  LCD1602的工作時(shí)序可查閱其他資料</p><p>  下圖為CGROM中字符碼與字符字模關(guān)系對(duì)照表</p>

11、<p>  從下圖可以看出,“A”字的對(duì)應(yīng)上面高位代碼為0100,對(duì)應(yīng)左邊低位代碼為0001,合起來(lái)就是01000001,也就是41H??梢?jiàn)它的代碼與我們PC中的字符代碼是基本一致的。因此我們?cè)谙駾DRAM 寫(xiě)C51字符代碼程序時(shí)甚至可以直接用P1='A'這樣的方法。PC在編譯時(shí)就把“A”先轉(zhuǎn)為41H代碼了。</p><p>  字符代碼0x00~0x0F為用戶自定義的字符圖形RAM(

12、對(duì)于5X8點(diǎn)陣的字符,可以存放8組,5X10點(diǎn)陣的字符,存放4組),就是CGRAM了。</p><p>  0x20~0x7F 為標(biāo)準(zhǔn)的ASCII 碼,0xA0~0xFF 為日文字符和希臘文字</p><p>  符,其余字符碼(0x10~0x1F及0x80~0x9F)沒(méi)有定義。</p><p> ?。?)對(duì)DDRAM的內(nèi)容和地址進(jìn)行操作的指令(只介紹本次設(shè)計(jì)中涉及

13、的一些)</p><p>  一.清屏指令:使液晶不顯示任何東西</p><p>  二.設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令</p><p>  三.顯示模式設(shè)置:寫(xiě)程序時(shí)從38H開(kāi)寫(xiě),是使液晶處于開(kāi)始狀態(tài)</p><p><b>  四.暫停及流動(dòng)</b></p><p>  注:上述四個(gè)功能均在RS

14、為0時(shí)方可寫(xiě)入;若RS為1,則可寫(xiě)入在1602上顯示字符的代碼;E一般選取系統(tǒng)時(shí)鐘分頻后的時(shí)鐘;</p><p>  設(shè)計(jì)思路及實(shí)現(xiàn)方法.</p><p>  根據(jù)寫(xiě)1602的一般順序:(1)開(kāi)始38H.(2)顯示模式設(shè)置.(3)顯示關(guān)閉08H.(4)顯示清屏01H.(5)顯示光標(biāo)移動(dòng)設(shè)置06H.(6)顯示開(kāi)及光標(biāo)移動(dòng)設(shè)置0CH</p><p>  根據(jù)這幾步?jīng)Q定用

15、VHDL語(yǔ)言中的狀態(tài)機(jī)描述方式進(jìn)行編寫(xiě)程序,與其他描述方式相比,狀態(tài)機(jī)的表述豐富多樣,程序?qū)哟畏置?,結(jié)構(gòu)清晰,易讀易懂;</p><p>  其中,在設(shè)計(jì)程序的過(guò)程中,由于程序包含地址和顯示內(nèi)容,考慮用到元件例化語(yǔ)句,將每個(gè)地址要顯示的內(nèi)容存到相應(yīng)的元件例化語(yǔ)句中去。元件例化就是將預(yù)先設(shè)計(jì)好的設(shè)計(jì)實(shí)體定義為一個(gè)元件,然后利用特定的語(yǔ)句將此元件與當(dāng)前的設(shè)計(jì)實(shí)體中的指定端口相連接。</p><p&

16、gt;  五.程序源文件與設(shè)計(jì)結(jié)果分析</p><p>  1.顯示內(nèi)容:學(xué)號(hào)+英文姓名</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;</p><p>  use IEEE.STD_LOGIC_ARITH.ALL;</p><p>  us

17、e IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  entity yejing2 is</p><p>  Port ( clk : in std_logic;--40MHZ</p><p>  Reset : in std_logic;--rst</p><p>  lcd_rs : out s

18、td_logic;--data/mingling(en0)</p><p>  lcd_rw : out std_logic;--read/write(en1)</p><p>  lcd_e : buffer std_logic;--enable(en2)</p><p>  data : out std_logic_vector(7 down

19、to 0);--//data shumaguan</p><p>  key:in std_logic; --撥碼開(kāi)關(guān)0</p><p>  key1:in std_logic; --撥碼開(kāi)關(guān)1</p><p>  key2:in std_logic --撥碼開(kāi)關(guān)2</p><p><b>  );</b><

20、;/p><p>  end yejing2 ;</p><p>  architecture Behavioral of yejing2 is</p><p>  constant IDLE : std_logic_vector(10 downto 0) :="00000000000";--//閑置</p><p>  con

21、stant CLEAR : std_logic_vector(10 downto 0) :="00000000001";--//清屏 </p><p>  constantRETURNCURSOR:std_logic_vector(10downto0) :="00000000010" ;--//

22、光標(biāo)返回</p><p>  constantSETMODE : std_logic_vector(10 downto 0) :="00000000100";--//輸入方式--//0x06--//顯示光標(biāo)移動(dòng)設(shè)置,當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加1,且光標(biāo)加1</p><p>  constantSWITCHMODE:std_logic_vector(10downto0)

23、 :="00000001000";-/顯示開(kāi)關(guān)--//0x0c--//開(kāi)顯示;不顯示光標(biāo);光標(biāo)不閃爍</p><p>  constant SHIFT : std_logic_vector(10 downto 0) :="00000011000";</p><p>  --//移位調(diào)整--//0x81--//顯示位移;左移</p>&l

24、t;p>  constantSETFUNCTION:std_logic_vector(10downto0) :="00000100000";--//功能設(shè)置--//0x3C--//8位;兩行顯示16*2 ; </p><p>  constantSETCGRAM:std_logic_vector(10downto 0) :="00001000000";--//字符發(fā)生

25、存儲(chǔ)器地址ACG</p><p>  constantSETDDRAM:std_logic_vector(10downto 0) :="00010000000";--//設(shè)置DDRAM(顯示數(shù)據(jù)RAM)的地址--//0x80 顯示數(shù)據(jù)儲(chǔ)存器地址ADD --//0xc0 顯示數(shù)據(jù)儲(chǔ)存器地址ADD 第二行開(kāi)頭</p><p>  constant READFLAG :

26、std_logic_vector(10 downto 0) :="00100000000";--//忙標(biāo)志</p><p>  constant WRITERAM: std_logic_vector(10 downto 0) :="01000000000"; -寫(xiě)數(shù)據(jù)到CGRAM或者DDRAM</p><p>  constantREADRAM:

27、std_logic_vector(10 downto 0) :="10000000000";--//從CGRAM或者DDRAM讀數(shù)</p><p>  signal state : std_logic_vector(10 downto 0);</p><p>  signal counter : integer range 0 to 127;</p>&l

28、t;p>  signal div_counter : integer range 0 to 15;</p><p>  signal flag : std_logic;</p><p>  constant DIVSS : integer :=15;</p><p>  signal char_addr: std_logic_vector(6 downto

29、0);</p><p>  signal data_in : std_logic_vector(7 downto 0);</p><p>  component char_ram2</p><p>  port( address : in std_logic_vector(6 downto 0) ;</p><p>  data :

30、 out std_logic_vector(7 downto 0)</p><p><b>  );</b></p><p>  end component;--元件例化語(yǔ)句</p><p>  signal clk_int: std_logic;</p><p>  signal clkcnt: std_logic_v

31、ector(18 downto 0);</p><p>  constant divcnt: std_logic_vector(18 downto 0):="1111001110001000000"; --//498752</p><p>  signal a:in

32、teger;</p><p>  signal clkdiv: std_logic;</p><p>  signal tc_clkcnt: std_logic; </p><p>  signal k: integer; --顯示步進(jìn)</p><p>  signal yi: std_logic; --顯示左移還是右移</p>

33、<p>  signal zanting: std_logic;--顯示暫停還是流動(dòng)</p><p><b>  begin</b></p><p>  process(key)--該部分控制分頻步進(jìn)是1還是5,即是控制字符流動(dòng)速度</p><p><b>  begin</b></p><

34、p>  case key is</p><p>  when '0'=>k<=1;</p><p>  when '1'=>k<=5;</p><p>  when others=>null; </p><p>  end case;</p><p>

35、;  end process;</p><p>  process(key1)—該部分控制液晶整屏左移還是右移1是左移, 0右移</p><p><b>  begin</b></p><p>  case key1 is</p><p>  when '1'=>yi<='1'

36、;</p><p>  when '0'=>yi<='0';</p><p>  when others=>null;</p><p><b>  end case;</b></p><p>  end process;</p><p>  pro

37、cess(key2)—該部分控制整屏?xí)和_€是流動(dòng)1暫停,0流動(dòng)</p><p><b>  begin</b></p><p>  case key2 is</p><p>  when '1'=>zanting<='1';</p><p>  when '0'

38、=>zanting<='0';</p><p>  when others=>null;</p><p><b>  end case;</b></p><p>  end process;</p><p>  process(clk,reset)</p><p>

39、;<b>  begin</b></p><p>  if(reset='0')then</p><p>  clkcnt<="0000000000000000000";</p><p>  elsif(clk'event and clk='1')then</p>

40、<p>  if(clkcnt=divcnt)then----// t=498752*25ns=12.5ms</p><p>  clkcnt<="0000000000000000000";</p><p><b>  else</b></p><p>  clkcnt<=clkcnt+k;<

41、/p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  tc_clkcnt<='1' when clkcnt=divcnt else --//12.5ms產(chǎn)生計(jì)數(shù)溢出脈沖

42、</p><p><b>  '0';</b></p><p>  process(tc_clkcnt,reset)</p><p><b>  begin</b></p><p>  if(reset='0')then</p><p>  c

43、lkdiv<='0';</p><p>  elsif(tc_clkcnt'event and tc_clkcnt='1')then</p><p>  clkdiv<=not clkdiv; --//翻轉(zhuǎn)時(shí)鐘 t=25ms f=40hz</p><p><b>  end if;</b>&

44、lt;/p><p>  end process;</p><p>  process(clkdiv,reset)</p><p><b>  begin</b></p><p>  if(reset='0')then</p><p>  clk_int<='0';

45、</p><p>  elsif(clkdiv'event and clkdiv='1')then</p><p>  clk_int<= not clk_int; --//分頻 t=50ms f=20hz</p><p><b>  end if;</b></p><p>  end pr

46、ocess;</p><p>  process(clkdiv,reset)</p><p><b>  begin</b></p><p>  if(reset='0')then</p><p>  lcd_e<='0';</p><p>  elsif(c

47、lkdiv'event and clkdiv='0')then</p><p>  lcd_e<= not lcd_e; --//使能信號(hào)翻轉(zhuǎn) t=100ms f=10hz</p><p><b>  end if;</b></p><p>  end process;</p><p>  

48、aa:char_ram2—例化程序</p><p>  port map( address=>char_addr,data=>data_in);</p><p>  lcd_rs <= '1' when state =WRITERAM or state = READRAM else '0'; --//當(dāng)lcd_rs=1時(shí),為數(shù)據(jù);=0時(shí),

49、為命令</p><p>  lcd_rw <= '0' when state =CLEAR or state = RETURNCURSOR or state=SETMODE or state=SWITCHMODE or state=SHIFT or state= SETFUNCTION or state=SETCGRAM or state =SETDDRAM or state =

50、WRITERAM else</p><p>  '1'; --//=0,寫(xiě);=1,讀</p><p>  data <="00000001" when state =CLEAR else --//0x01--清屏</p><p>  "00000010" when state =RETURNCU

51、RSOR else --//0x02--光標(biāo)返回</p><p>  "00000110" when state = SETMODE else --//0x06--//顯示光標(biāo)移動(dòng)設(shè)置,當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加1,且光標(biāo)加1</p><p>  "00001100" when state =SWITCHMODE else --//0x0c--/

52、/開(kāi)顯示;不顯示光標(biāo);光標(biāo)不閃爍</p><p>  "0001" & zanting & yi &"00" when state = SHIFT else --//0x81--//顯示位移;左移</p><p>  "00111100" when state=SETFUNCTION else--//0x3

53、C--//8位;兩行顯示16*2 ; 字體5*10</p><p>  "01000000" when state =SETCGRAM else --//0x40 字符發(fā)生器儲(chǔ)存器地址ACG</p><p>  "10000000" when state =SETDDRAM and counter =0 else --//0x80 顯示數(shù)據(jù)儲(chǔ)存器地址

54、ADD</p><p>  "11000000" when state =SETDDRAM and counter /=0 else --//0xc0 顯示數(shù)據(jù)儲(chǔ)存器地址ADD 第二行開(kāi)頭</p><p>  data_in when state = WRITERAM else --//寫(xiě)入數(shù)據(jù)</p><p>  "ZZZZZZZ

55、Z";</p><p>  char_addr <=conv_std_logic_vector( counter,7) when state =WRITERAM and counter<40 else --//默認(rèn)第一個(gè)字符地址為0x80 --// 0--39</p><p>  conv_std_logic_vector( counter,7) when

56、state= WRITERAM and counter>40 and counter<88 else --//counter>40 and counter<73 相當(dāng)于在第二行中后移8個(gè)字符顯示以區(qū)分第一行8--39</p><p>  conv_std_logic_vector( counter,7) when state= WRITER

57、AM and counter>88 and counter<89 else --//counter>73 and counter<81 1--7</p><p>  "0000001"; </p><p>  process(clk_int,Reset)</p><p><b>  begin<

58、;/b></p><p>  if(Reset='0')then </p><p>  state<=IDLE;</p><p>  counter<=0;</p><p>  flag<='0';</p><p>  div_counter<=0;<

59、/p><p>  elsif(clk_int'event and clk_int='1')then --//分頻 t=50ms f=20hz</p><p>  case state is</p><p>  when IDLE => --//(1)</p><p>  if(flag='0

60、')then </p><p>  state<=SETFUNCTION; --//--//0x3C--//8位;兩行顯示16*2 ; flag<='1';</p><p>  counter<=0; --//初始地址</p><p>  div_counter<=0;</p><

61、;p><b>  else</b></p><p>  if(div_counter<DIVSS )then --//constant DIVSS : integer :=15;</p><p>  div_counter<=div_counter +1;</p><p>  state<=IDLE;</p>

62、<p><b>  else</b></p><p>  div_counter<=0;</p><p>  state <=SHIFT; --//0x81--//顯示位移;左移 --最后一直在這里 移動(dòng):t=50ms*15=750ms=0.75s</p><p><b>  end if;</b&

63、gt;</p><p><b>  end if;</b></p><p>  when SETFUNCTION => --//(2)--//--//0x3C--//8位;兩行顯示16*2 ; state<=SWITCHMODE;</p><p>  when SWITCHMODE =>--//(3

64、)--//0x0c--//開(kāi)顯示;不顯示光標(biāo);光標(biāo)不閃爍</p><p>  state<=CLEAR; </p><p>  when CLEAR =>--//(4) --//0x01--清屏</p><p>  state<=SETMODE;</p><p>  when SETMODE =>--/

65、/(5)--//0x06--//顯示光標(biāo)移動(dòng)設(shè)置,當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加1,且光標(biāo)加1</p><p>  state<=WRITERAM; </p><p>  when WRITERAM =>--//(6)</p><p>  if(counter =40)then </p><p>  state<=S

66、ETDDRAM;</p><p>  counter<=counter+1;</p><p>  elsif(counter/=40 and counter<81)then</p><p>  state<=WRITERAM;</p><p>  counter<=counter+1;</p><p

67、><b>  else</b></p><p>  state<=SHIFT; --//開(kāi)始位移</p><p><b>  end if;</b></p><p>  when SETDDRAM => --//(7)</p><p>  state<=WRITERAM

68、;</p><p>  when SHIFT => --//(7)</p><p>  state<=IDLE; </p><p>  when SETCGRAM =></p><p>  state<=IDLE;</p><p>  when RETURNCURSOR

69、 =></p><p>  state<=WRITERAM;</p><p>  when READFLAG =></p><p>  state<=IDLE;</p><p>  when READRAM =></p><p>  state<=IDLE;</p>

70、;<p>  when others =></p><p>  state<=IDLE;</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><

71、;p>  end Behavioral;</p><p><b>  元件例化的程序:</b></p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;</p><p>  use IEEE.STD_LOGIC_ARITH.ALL;</p&g

72、t;<p>  entity char_ram2 is</p><p>  port( address : in std_logic_vector(6 downto 0) ;</p><p>  data : out std_logic_vector(7 downto 0)</p><p><b>  );</b></

73、p><p>  end char_ram2;</p><p>  architecture fun of char_ram2 is</p><p>  function char_to_integer ( indata :character) return integer is</p><p>  variable result : intege

74、r range 0 to 16#7F#;</p><p><b>  begin</b></p><p>  case indata is</p><p>  when ' ' =>result := 32;</p><p>  when '!' =>result :

75、= 33;</p><p>  when '"' =>result := 34;</p><p>  when '#' =>result := 35;</p><p>  when '$' =>result := 36;</p><p>  when &#

76、39;%' =>result := 37;</p><p>  when '&' =>result := 38;</p><p>  when ''' =>result := 39;</p><p>  when '(' =>result := 40;&l

77、t;/p><p>  when ')' =>result := 41;</p><p>  when '*' =>result := 42;</p><p>  when '+' =>result := 43;</p><p>  when ',' =&

78、gt;result := 44;</p><p>  when '-' =>result := 45;</p><p>  when '.' =>result := 46;</p><p>  when '/' =>result := 47;</p><p> 

79、 when '0' =>result := 48;</p><p>  when '1' =>result := 49;</p><p>  when '2' =>result := 50;</p><p>  when '3' =>result := 51;&l

80、t;/p><p>  when '4' =>result := 52;</p><p>  when '5' =>result := 53;</p><p>  when '6' =>result := 54;</p><p>  when '7' =&

81、gt;result := 55;</p><p>  when '8' =>result := 56;</p><p>  when '9' =>result := 57;</p><p>  when ':' =>result := 58;</p><p> 

82、 when ';' =>result := 59;</p><p>  when '<' =>result := 60;</p><p>  when '=' =>result := 61;</p><p>  when '>' =>result :=

83、 62;</p><p>  when '?' =>result := 63;</p><p>  when '@' =>result := 64;</p><p>  when 'A' =>result := 65;</p><p>  when 'B

84、9; =>result := 66;</p><p>  when 'C' =>result := 67;</p><p>  when 'D' =>result := 68;</p><p>  when 'E' =>result := 69;</p><p

85、>  when 'F' =>result := 70;</p><p>  when 'G' =>result := 71;</p><p>  when 'H' =>result := 72;</p><p>  when 'I' =>result := 73

86、;</p><p>  when 'J' =>result := 74;</p><p>  when 'K' =>result := 75;</p><p>  when 'L' =>result := 76;</p><p>  when 'M'

87、=>result := 77;</p><p>  when 'N' =>result := 78;</p><p>  when 'O' =>result := 79;</p><p>  when 'P' =>result := 80;</p><p> 

88、 when 'Q' =>result := 81;</p><p>  when 'R' =>result := 82;</p><p>  when 'S' =>result := 83;</p><p>  when 'T' =>result := 84;<

89、;/p><p>  when 'U' =>result := 85;</p><p>  when 'V' =>result := 86;</p><p>  when 'W' =>result := 87;</p><p>  when 'X' =>

90、;result := 88;</p><p>  when 'Y' =>result := 89;</p><p>  when 'Z' =>result := 90;</p><p>  when '[' =>result := 91;</p><p>  w

91、hen '\' =>result := 92;</p><p>  when ']' =>result := 93;</p><p>  when '^' =>result := 94;</p><p>  when '_' =>result := 95;<

92、/p><p>  when '`' =>result := 96;</p><p>  when 'a' =>result := 97;</p><p>  when 'b' =>result := 98;</p><p>  when 'c' =>

93、;result := 99;</p><p>  when 'd' =>result := 100;</p><p>  when 'e' =>result := 101;</p><p>  when 'f' =>result := 102;</p><p>

94、  when 'g' =>result := 103;</p><p>  when 'h' =>result := 104;</p><p>  when 'i' =>result := 105;</p><p>  when 'j' =>result := 1

95、06;</p><p>  when 'k' =>result := 107;</p><p>  when 'l' =>result := 108;</p><p>  when 'm' =>result := 109;</p><p>  when 'n&

96、#39; =>result := 110;</p><p>  when 'o' =>result := 111;</p><p>  when 'p' =>result := 112;</p><p>  when 'q' =>result := 113;</p>

97、<p>  when 'r' =>result := 114;</p><p>  when 's' =>result := 115;</p><p>  when 't' =>result := 116;</p><p>  when 'u' =>r

98、esult := 117;</p><p>  when 'v' =>result := 118;</p><p>  when 'w' =>result := 119;</p><p>  when 'x' =>result := 120;</p><p>  w

99、hen 'y' =>result := 121;</p><p>  when 'z' =>result := 122;</p><p>  when '{' =>result := 123;</p><p>  when '|' =>result := 124;

100、</p><p>  when '}' =>result := 125;</p><p>  when '~' =>result := 126;</p><p>  whenothers => result :=32;</p><p><b>  end case;<

101、/b></p><p>  return result;</p><p>  end function;</p><p><b>  begin </b></p><p>  process (address)</p><p><b>  begin</b></

102、p><p>  case address is</p><p>  when "0000000" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0000001" =>data<=conv_st

103、d_logic_vector(char_to_integer ('1') ,8);</p><p>  when "0000010" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0000011" =>

104、data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when "0000100" =>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when "000

105、0101" =>data<=conv_std_logic_vector(char_to_integer ('4') ,8);</p><p>  when "0000110" =>data<=conv_std_logic_vector(char_to_integer ('0') ,8);</p><p>

106、  when "0000111" =>data<=conv_std_logic_vector(char_to_integer ('0') ,8);</p><p>  when "0001000" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</

107、p><p>  when "0001001" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0001010" =>data<=conv_std_logic_vector(char_to_integer ('Y

108、') ,8);</p><p>  when "0001011" =>data<=conv_std_logic_vector(char_to_integer ('Q') ,8);</p><p>  when "0001100" =>data<=conv_std_logic_vector(char_to

109、_integer ('Q') ,8);</p><p>  when "0001101" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0001110" =>data<=conv_std_logi

110、c_vector(char_to_integer (' ') ,8);</p><p>  when "0001111" =>data<=conv_std_logic_vector(char_to_integer (' 1') ,8);</p><p>  when "0010000" =>data&

111、lt;=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0010001" =>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when "0010010&

112、quot; =>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when "0010011" =>data<=conv_std_logic_vector(char_to_integer (' 4') ,8);</p><p>  wh

113、en "0010100" =>data<=conv_std_logic_vector(char_to_integer (' 0') ,8);</p><p>  when "0010101" =>data<=conv_std_logic_vector(char_to_integer ('0') ,8);</p&g

114、t;<p>  when "0010110" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0010111" =>data<=conv_std_logic_vector(char_to_integer (' 

115、9;) ,8);</p><p>  when "0011000" =>data<=conv_std_logic_vector(char_to_integer ('Y ') ,8);</p><p>  when "0011001" =>data<=conv_std_logic_vector(char_to_i

116、nteger ('Q') ,8);</p><p>  when "0011010" =>data<=conv_std_logic_vector(char_to_integer ('Q') ,8);</p><p>  when "0011011" =>data<=conv_std_logic_

117、vector(char_to_integer (' ') ,8);</p><p>  when "0011100" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0011101" =>data<

118、=conv_std_logic_vector(char_to_integer ('1 ') ,8);</p><p>  when "0011110" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0011111&qu

119、ot; =>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when "0100000" =>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when

120、"0100001" =>data<=conv_std_logic_vector(char_to_integer ('4') ,8);</p><p>  when "0100010" =>data<=conv_std_logic_vector(char_to_integer ('0') ,8);</p>

121、<p>  when "0100011" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0100100" =>data<=conv_std_logic_vector(char_to_integer ('3')

122、,8);</p><p>  when "0100101" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0100110" =>data<=conv_std_logic_vector(char_to_intege

123、r (' S') ,8);</p><p>  when "0100111" =>data<=conv_std_logic_vector(char_to_integer (' N') ,8);</p><p>  when "0101001" =>data<=conv_std_logic_vec

124、tor(char_to_integer (' ') ,8);</p><p>  when "0101010" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0101011" =>data<=co

125、nv_std_logic_vector(char_to_integer ('1') ,8);</p><p>  when "0101100" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0101101"

126、=>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when "0101110" =>data<=conv_std_logic_vector(char_to_integer ('8') ,8);</p><p>  when &quo

127、t;0101111" =>data<=conv_std_logic_vector(char_to_integer ('4') ,8);</p><p>  when "0110000" =>data<=conv_std_logic_vector(char_to_integer ('0') ,8);</p><

128、p>  when "0110001" =>data<=conv_std_logic_vector(char_to_integer ('2') ,8);</p><p>  when "0110010" =>data<=conv_std_logic_vector(char_to_integer ('3') ,8);

129、</p><p>  when "0110011" =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);</p><p>  when "0110100" =>data<=conv_std_logic_vector(char_to_integer (&

130、#39;S') ,8);</p><p>  when "0110101" =>data<=conv_std_logic_vector(char_to_integer ('N') ,8);</p><p>  when "0110110" =>data<=conv_std_logic_vector(ch

131、ar_to_integer (' ') ,8);</p><p>  when others =>data<=conv_std_logic_vector(char_to_integer (' ') ,8);--//顯示空格</p><p><b>  end case;</b></p><p>  e

132、nd process;</p><p><b>  end fun;</b></p><p><b>  顯示結(jié)果:</b></p><p>  結(jié)果分析:當(dāng)實(shí)驗(yàn)板上電后,液晶屏幕會(huì)顯示如圖(1).</p><p>  當(dāng)撥碼開(kāi)關(guān)2處于“off”時(shí),液晶屏幕會(huì)整體移動(dòng);</p>&l

133、t;p>  當(dāng)撥碼開(kāi)關(guān)1處于“on”時(shí),液晶屏幕會(huì)整體右移,處于“off” 時(shí),液晶屏幕會(huì)整體左移;</p><p>  當(dāng)撥碼開(kāi)關(guān)1處于“on”時(shí),液晶屏幕移動(dòng)速度相對(duì)較慢,處于 </p><p>  “off”時(shí),液晶屏幕移動(dòng)速度相對(duì)較快</p><p><b>  六.心得體會(huì):</b></p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論