⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 有限状态机-0809ad转换.txt

📁 模拟产生ADC0809时序
💻 TXT
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity LCD1602 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_ON : out std_logic;
          LCD_BLON : out std_logic;
          LCD_Data : out std_logic_vector(7 downto 0));   --液晶数据信号
end LCD1602;
architecture Behavioral of LCD1602 is
   type state is (set_clc,set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_ddram,write_LCD_Data,set_ddram2,write_LCD_Data2);
   signal Current_State:state;             
   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' ;    --写数据
   LCD_ON <= '1';
   LCD_BLON <= '1';
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;
       end if;
     end if;
     LCD_Clk <= Clk_Out;
end process;
control:
process(LCD_Clk,Reset,Current_State)                --液晶驱动控制器
   begin
     if Reset='0'then
       Current_State<=set_clc;
       LCD_RS<='0';
     elsif rising_edge(LCD_Clk)then
       Current_State <= Current_State ;
       LCD_RS <= '0';
     case Current_State is
       when set_clc =>
    LCD_Data<="00000001";--01H
    Current_State<=set_dlnf;
       when set_dlnf=>              
    LCD_Data<="00111100";--3CH
    Current_State<=set_cursor;
       when set_cursor=>
    LCD_Data<="00000110";--06H
    Current_State<=set_dcb;
       when set_dcb=>
    LCD_Data<="00001100";--0cH
    Current_State<=set_cgram;
       when set_cgram=>
    LCD_Data<="01000000";--40H
    Current_State<=write_cgram;
       when write_cgram=>         --向CGRAM中写入"年"
    LCD_RS<='1';
    Current_State<=set_ddram;        
       when set_ddram=>          --从第一行的起始地址开始显示
    LCD_Data<="10000000";--80H
    Current_State<=write_LCD_Data;
       when write_LCD_Data=>  
    LCD_RS<='1';
    LCD_Data<="01001101"; --写入字符"m"
    Current_State<=set_ddram2;
       when set_ddram2=>
    LCD_RS<='0';
    LCD_Data<="10000001";--81H
    Current_State<=write_LCD_Data2;
       when write_LCD_Data2=>
    LCD_RS<='1';
    LCD_Data<="01000100"; --写入字符"d"
     
       when others => null;
     end case;
   end if;
end process;
end Behavioral;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -