3318|2

221

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

运行显示乱码,希望高人指点,谢谢 [复制链接]

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity LCD1602A 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; --液晶时钟信号
         LCD_Data : out std_logic_vector(7 downto 0));  --液晶数据信号
end LCD1602A;
architecture Behavioral of LCD1602A is
component data1_rom
port( address:in std_logic_vector(4 downto 0);
      inclock:in std_logic;
            q:out std_logic_vector(7 downto 0));
end component;
component data2_rom
port( address:in std_logic_vector(4 downto 0);
      inclock:in std_logic;
            q:out std_logic_vector(7 downto 0));
end component;
component data3_rom
port( address:in std_logic_vector(4 downto 0);
      inclock:in std_logic;
            q:out std_logic_vector(7 downto 0));
end component;
signal  CLK1    : std_logic;
signal  Clk_Out : std_logic;
signal  LCD_Clk : std_logic;
signal  m       :std_logic_vector(1 downto 0);

signal cnt4:std_logic_vector(4 downto 0);
signal cnt_rst1:std_logic;
signal cnt2:std_logic_vector(4 downto 0);
signal cnt_rst2:std_logic;
signal cnt3:std_logic_vector(4 downto 0);
signal cnt_rst3:std_logic;
signal showdata1:std_logic_vector(7 downto 0);
signal showdata2:std_logic_vector(7 downto 0);
signal showdata3:std_logic_vector(7 downto 0);

type state is (set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_ddram,write_LCD_Data);
  signal Current_State:state;

begin
  LCD_EN <=  Clk_Out ;
  LCD_RW <= '0' ;  
process(CLK)
variable n1:integer range 0 to 19999;
begin
if rising_edge(CLK) then
   if n1<19999 then
      n1:=n1+1;
   else
      n1:=0;
     Clk_Out<=not Clk_Out;
    end if;
end if;
end process;
LCD_Clk <= Clk_Out;
process(Clk_Out)
variable n2:integer range 0 to 499;
begin
if rising_edge(Clk_Out) then
   if n2<499 then
      n2:=n2+1;
   else
      n2:=0;
     Clk1<=not Clk1;
    end if;
end if;
end process;
process(Clk1)
variable n3:integer range 0 to 14;
begin
if rising_edge(Clk1) then
n3:=n3+1;
   if n3<=4 then
     m<="00";
     if cnt_rst1='1' then
        cnt4<=(others=>'0');
     else cnt4<=cnt4+1;end if;
   elsif n3<=9 and n3>4 then
     m<="01";
     if cnt_rst2='1' then
      cnt2<=(others=>'0');
     else cnt2<=cnt2+1;end if;
   else
       m<="10";
      if cnt_rst3='1' then
        cnt3<=(others=>'0');
     else cnt3<=cnt3+1;end if;
   end if;
end if;
end process;
process(LCD_Clk,Reset,Current_State)            
  variable cnt1: std_logic_vector(4 downto 0);
  begin
    if Reset='0'then
      Current_State<=set_dlnf;
       cnt1:="11110";
      LCD_RS<='0';
    elsif rising_edge(LCD_Clk)then
      Current_State <= Current_State ;
      LCD_RS <='0';
    case Current_State is
      when set_dlnf=>cnt1:="00000";LCD_Data<="00000001";
        Current_State<=set_cursor;
      when set_cursor=>LCD_Data<="00111000";
        Current_State<=set_dcb;
      when set_dcb=>LCD_Data<="00001111";
        Current_State<=set_cgram;
      when set_cgram=>LCD_Data<="00000110";
        Current_State<=write_cgram;
      when write_cgram=>LCD_RS<='1';
     if m="00" then
        LCD_Data<=showdata1;
     elsif m="01"then
        LCD_Data<=showdata2;
     else
        LCD_Data<=showdata3;
     end if;
        Current_State<=set_ddram;
      when set_ddram=>  
    if cnt1<"11110" then
       cnt1:=cnt1+1;
    else
       cnt1:="00000";
    end if;
    if cnt1<="01111" then
       LCD_Data<="10000000"+cnt1;--80H
    else
       LCD_Data<="11000000"+cnt1-"10000";--80H
    end if;
       Current_State<=write_LCD_Data;
    when write_LCD_Data=>   
      LCD_Data<="00000000";
      Current_State<=set_cursor;
    when others => null;
    end case;
  end if;
end process;
rom1:data1_rom port map(address=>cnt4,inclock=>clk,q=>showdata1);
rom2:data2_rom port map(address=>cnt2,inclock=>clk,q=>showdata2);
rom3:data3_rom port map(address=>cnt3,inclock=>clk,q=>showdata3);
end;
此帖出自FPGA/CPLD论坛

最新回复

大哥,这样大家帮不了你,把你的液晶型号告诉大家或DATASHEET告诉大家  详情 回复 发表于 2010-5-17 08:39
点赞 关注
个人签名学习
 

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
大哥,这样大家帮不了你,把你的液晶型号告诉大家或DATASHEET告诉大家
此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 

回复

221

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复 楼主 emnqsu 的帖子

哦,不好意思,初来咋到,不懂规矩,我用的液晶是1602的,一般的普通液晶,然后想显示的数据我也是随便定制的,采用的是定制ROM方式,然后元件例化···
此帖出自FPGA/CPLD论坛
个人签名学习
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表