久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3893|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

VHDL-lcd1602液晶程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51269 發(fā)表于 2014-11-10 15:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
lcd1602液晶的詳細(xì)資料請(qǐng)看:http://www.zg4o1577.cn/mcu/827.html

library ieee;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity lcd1602 is
port(clk, reset: in std_logic;
LCD_Data: out std_logic_vector(8 downto 0);
en: out std_logic;
rw: out std_logic);
end lcd1602;
architecture gongneng of  lcd1602 is
signal LCD_Clk: std_logic;
signal s : integer range 0 to 10000000;
begin
--50MHz to 5Hz
process(clk, reset)
begin
if reset = '0' then
LCD_Clk <= '0';
s <= 0;
elsif clk'event and clk = '1' then
if s = 10000000 then
  s <= 0;
  LCD_Clk <= not LCD_Clk;
else
  s <= s + 1;
   end if;
end if;
end process;
-------------------
rw <='0';
en <= LCD_Clk;
process(LCD_Clk)
variable cnt: std_logic_vector(5 downto 0):="000000";
begin
   if Reset='0'then
      LCD_Data<="000000001";        -- Reset清屏
--LCD_Data[8..0], 其中LCD_Data[8]對(duì)應(yīng)1602的RS,--LCD_Data[7..0]對(duì)應(yīng)1602的八根數(shù)據(jù)線(xiàn)
      cnt:="000000";      --計(jì)數(shù)器清零
    elsif rising_edge(LCD_Clk) then
      if cnt<"100101" then cnt:=cnt+1;
        else cnt:="000000";
        end if;
--設(shè)計(jì)計(jì)數(shù)器,每次計(jì)數(shù)間隔LCD_CLK定義的一個(gè)周期
   case cnt is
           --------------寫(xiě)指令--------------   
     when "000000"=>LCD_Data<="000111000";--/*設(shè)置8位格式,2行,5*7*/  ,順序2,3的要求   
     when "000001"=>LCD_Data<="000001100";   --/*整體顯示,關(guān)光標(biāo),光標(biāo)閃爍/  ,順序4的要求   
     when "000010"=>LCD_Data<="000000001";--清屏,順序5的要求   
     when "000011"=>LCD_Data<="000000110";  --/*顯示移動(dòng)格式,看最后兩位,10表示光標(biāo)右移,順序6的要求   
     when "000100"=>LCD_Data<="010000000";--設(shè)定顯示的位置在00H+80H,即顯示屏第一行第一個(gè)位置,順序7的要求
     --------------寫(xiě)數(shù)據(jù)---------------
     when "000101"=>LCD_Data<="110100000";--空格   
     when "000110"=>LCD_Data<="110100000";--空格   
     when "000111"=>LCD_Data<="110100000";--空格
     when "001000"=>LCD_Data<="101011001"; --Y   
     when "001001"=>LCD_Data<="101110101";--u   
     when "001010"=>LCD_Data<="101101010";--j   
     when "001011"=>LCD_Data<="101101001";--i   
     when "001100"=>LCD_Data<="101100001";--a   
     when "001101"=>LCD_Data<="101101110";--n   
     when "001110"=>LCD_Data<="101110001";--q      
     when "001111"=>LCD_Data<="101110101";--u   
     when "010000"=>LCD_Data<="101100001";--a   
     when "010001"=>LCD_Data<="101101110";--n   
     when "010010"=>LCD_Data<="110100000";---空格   
     when "010011"=>LCD_Data<="110100000";---空格   
     when "010100"=>LCD_Data<="110100000";---空格
     
     when "010101"=>LCD_Data<="011000000";--設(shè)定顯示的位置在10H+80H,
   
     when "010110"=>LCD_Data<="101000100";---D diangong xueyuan   
     when "010111"=>LCD_Data<="101101001";---i   
     when "011000"=>LCD_Data<="101100001";---a
      when "011001"=>LCD_Data<="101101110";---n   
     when "011010"=>LCD_Data<="101100111";---g   
     when "011011"=>LCD_Data<="101101111";---o
     when "011100"=>LCD_Data<="101101110";--n   
     when "011101"=>LCD_Data<="101100111";---g   
     when "011110"=>LCD_Data<="110100000";--- 空格   
     when "011111"=>LCD_Data<="101011000";---X
     when "100000"=>LCD_Data<="101110101";---u   
     when "100001"=>LCD_Data<="101100101";---e   
     when "100010"=>LCD_Data<="101111001";---y
     when "100011"=>LCD_Data<="101110101";---u   
     when "100100"=>LCD_Data<="101100001";---a   
     when "100101"=>LCD_Data<="101101110";---n      
    when others =>LCD_Data<="101000100";
    --when "01100"=>LCD_Data<="011000000";--設(shè)定顯示的位置在10H+80H,即顯示屏第2行第一個(gè)位置  
    end case;
end if;
end process;
end gongneng;


-----------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fuck1 is
   Port ( Clk : in std_logic;   
          Reset:in std_logic;  
          LCD_RS : out std_logic;
          LCD_RW : out std_logic;
          LCD_EN : out std_logic;
          LED    : out std_logic;
          LCD_Data : out std_logic_vector(7 downto 0));  
end ;
architecture Behavioral of fuck1 is
   type state is (set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_ddram,write_LCD_Data);
   signal Current_State:state;
   type ram2 is array(0 to 7) of std_logic_vector(7 downto 0);
   constant cgram:ram2:=(
         ("00000100"),
         ("00011011"),
         ("00001110"),
         ("00011111"),
         ("00000100"),
         ("00011111"),
         ("00001110"),
         ("00010101"));                        
   signal Clkk     : std_logic;
   signal Count    : std_logic_vector(20 downto 0);
   signal Clk_Out  : std_logic;
   signal LCD_Clk  : std_logic;
begin
   LCD_EN <=   Clk_Out ;   
      LED <= Clk_Out;
   LCD_RW <= '0' ;   
clock :process(Clk,Reset)
   begin
    if(Reset = '0')then
     Count <= (others => '0');
    elsif(rising_edge(clk))then
     Count <= Count + 1;
     if(Count = 0)then
           Clk_Out <= not Clk_Out;--fenpin
     end if;
    end if;
          LCD_Clk <= Clk_Out;
end process;
control:process(LCD_Clk,Reset,Current_State)               
        variable cnt1: std_logic_vector(2 downto 0);
        begin
     if Reset='0'then
     Current_State<=set_dlnf;
     cnt1:=(others => '1');
     LCD_RS<='0';
     elsif rising_edge(LCD_Clk)then
     Current_State <= Current_State ;
     LCD_RS <= '0';
     case Current_State is
     when set_dlnf=>              
       LCD_Data<="00111100";
       Current_State<=set_cursor;
     when set_cursor=>
       LCD_Data<="00000110";
       Current_State<=set_dcb;
     when set_dcb=>
       LCD_Data<="00001111";
       Current_State<=set_cgram;
     when set_cgram=>
       LCD_Data<="01000000";
       Current_State<=write_cgram;
     when write_cgram=>         
       LCD_RS<='1';
       cnt1:=cnt1+1;
       LCD_Data<=cgram(conv_integer(cnt1));        
       if cnt1 = "111" then
       Current_State<=set_ddram;        
       end if;
     when set_ddram=>         
       LCD_Data<="10000000";
       Current_State<=write_LCD_Data;
     when write_LCD_Data=>  
       LCD_RS<='1';
       LCD_Data<="00000000";
     when others => null;
     end case;
   end if;
  end process;
end ;

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青草原精品99久久精品66 | 久久久久久亚洲精品 | 在线午夜 | 香蕉大人久久国产成人av | 中文字幕国产日韩 | 国产精品大片在线观看 | 成人啊啊啊 | 日韩一区二区在线视频 | 成人在线观看中文字幕 | 久久精品小视频 | 国产日韩亚洲欧美 | 国产在线观看不卡一区二区三区 | 91免费电影 | 视频在线观看亚洲 | 毛片一区二区三区 | 欧美天堂 | 亚洲欧美日韩在线不卡 | 亚洲视频在线观看一区二区三区 | 日本激情一区二区 | 亚洲精品一区二区三区在线观看 | 亚洲视频一区二区三区 | 最新国产精品 | 久久精品国产久精国产 | 日韩av中文| 成人在线视频免费看 | 亚洲最大的黄色网址 | 亚洲美女视频 | 精品婷婷| 九九成人 | 国产在线精品一区二区三区 | 三级视频在线观看 | 国产高清视频 | 欧美日韩中文字幕 | 亚洲精品国产综合区久久久久久久 | 日韩a v在线免费观看 | 日韩成人av在线 | 亚洲视频免费一区 | 国产1区2区在线观看 | www.v888av.com| 国产精品乱码一区二三区小蝌蚪 | 久久精品久久久久久 |