龙芯

龙芯

0个粉丝

18

问答

0

专栏

1

资料

龙芯  发布于  2008-10-02 20:15:51
采纳率 0%
18个问答
3419

利用FPGA驱动LCD显示中文字符的VHDL程序

 
--文件名:lcd_driver.vhd。
--功能:FGAD驱动LCD显示中文字符“年”。
--最后修改日期:2004.3.24。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity lcd_driver is
  Port ( clk : in std_logic;        --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间
           reset:in std_logic;
       lcdda : out std_logic;                                            --寄存器选择信号
       lcdrw : out std_logic;                                                --液晶读写信号
       lcden : out std_logic;                                                --液晶时钟信号
       data : out std_logic_vector(7 downto 0));                --液晶数据信号
end lcd_driver;

architecture Behavioral of lcd_driver is
type state is (set_dlnf,set_cursor,set_dcb,set _cgram,write _cgram,set_ddram,write_data);
  signal current_state:state;
  type ram2 is array(0 to 7) of std_logic_vector(7 downto 0);
constant cgram:ram2:=(("00001000"),("00001111"),("00010010"),
("00001111"),("00001010"),("00011111"),("00000010"),("00000010"));--年字符数据存储器                           
  signal clkk : std_logic;
begin
  lcden <=  clk ; --液晶时钟信号
lcdrw <= '0' ;  --写数据

control:process(clk,reset,current_state)               --液晶驱动控制器
  variable cnt1: std_logic_vector(2 downto 0);
begin
if reset='0'then
    current_state<=set_dlnf;
cnt1:=(others => '1');
        lcdda<='0';
elsif rising_edge(clk)then
current_state <= current_state ;
lcdda <= '0';
        case current_state is
          when set_dlnf=>                                           
                 data<="00111100";--3cH
                 current_state<=set_cursor;
      when set_cursor=>
                 data<="00000110";--06H
                 current_state<=set_dcb;
      when set_dcb=>
                 data<="00001111";--0fH
                 current_state<=set_ cgram;
          when set_ cgram=>
                 data<="01000000";--40H
                 current_state<=write_ cgram;
          when write_ cgram=>                      --向CGRAM中写入“年”
                 lcdda<='1';
                 cnt1:=cnt1+1;
                 data<=cgram(conv_integer(cnt1));                                          
                   if cnt1 = "111" then
                         current_state<=set_ddram;                                                        
                   end if;
          when set_ddram=>                           --从第一行的起始地址开始显示
                 data<="10000000";--80H
                 current_state<=write_data;
      when write_data=>                       
                 lcdda<='1';
                 data<="00000000"; --写入字符“年”
          when others => null;
end case;
end if;
end process;
end Behavioral;
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区