lcd_schnittstelle.vhd


1
--------------------------------------------------------------------------------
2
--
3
--   FileName:         lcd_example.vhd
4
--   Dependencies:     none
5
--   Design Software:  Quartus II 32-bit Version 11.1 Build 173 SJ Full Version
6
--
7
--   HDL CODE IS PROVIDED "AS IS."  DIGI-KEY EXPRESSLY DISCLAIMS ANY
8
--   WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
9
--   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
10
--   PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL DIGI-KEY
11
--   BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
12
--   DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
13
--   PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
14
--   BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
15
--   ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
16
--
17
--   Version History
18
--   Version 1.0 6/13/2012 Scott Larson
19
--     Initial Public Release
20
--
21
--   Prints "123456789" on a HD44780 compatible 8-bit interface character LCD 
22
--   module using the lcd_controller.vhd component.
23
--
24
--------------------------------------------------------------------------------
25
26
LIBRARY ieee;
27
USE ieee.std_logic_1164.all;
28
29
ENTITY lcd_schnittstelle IS
30
  PORT(
31
      clk       : IN  STD_LOGIC;  --system clock
32
      rw, rs, e : OUT STD_LOGIC;  --read/write, setup/data, and enable for lcd
33
      lcd_data  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --data signals for lcd
34
END lcd_schnittstelle;
35
36
ARCHITECTURE behavior OF lcd_schnittstelle IS
37
  SIGNAL   lcd_enable : STD_LOGIC;
38
  SIGNAL   lcd_bus    : STD_LOGIC_VECTOR(9 DOWNTO 0);
39
  SIGNAL   lcd_busy   : STD_LOGIC;
40
  COMPONENT lcd_controller IS
41
    PORT(
42
       clk        : IN  STD_LOGIC; --system clock
43
       reset_n    : IN  STD_LOGIC; --active low reinitializes lcd
44
       lcd_enable : IN  STD_LOGIC; --latches data into lcd controller
45
       lcd_bus    : IN  STD_LOGIC_VECTOR(9 DOWNTO 0); --data and control signals
46
       busy       : OUT STD_LOGIC; --lcd controller busy/idle feedback
47
       rw, rs, e  : OUT STD_LOGIC; --read/write, setup/data, and enable for lcd
48
       lcd_data   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --data signals for lcd
49
  END COMPONENT;
50
BEGIN
51
52
  --instantiate the lcd controller
53
  dut: lcd_controller
54
    PORT MAP(clk => clk, reset_n => '1', lcd_enable => lcd_enable, lcd_bus => lcd_bus, 
55
             busy => lcd_busy, rw => rw, rs => rs, e => e, lcd_data => lcd_data);
56
  
57
  PROCESS(clk)
58
    VARIABLE char  :  INTEGER RANGE 0 TO 10 := 0;
59
  BEGIN
60
    IF(clk'EVENT AND clk = '1') THEN
61
      IF(lcd_busy = '0' AND lcd_enable = '0') THEN
62
        lcd_enable <= '1';
63
        IF(char < 10) THEN
64
          char := char + 1;
65
        END IF;
66
        CASE char IS
67
          WHEN 1 => lcd_bus <= "1000110001";
68
          WHEN 2 => lcd_bus <= "1000110010";
69
          WHEN 3 => lcd_bus <= "1000110011";
70
          WHEN 4 => lcd_bus <= "1000110100";
71
          WHEN 5 => lcd_bus <= "1000110101";
72
          WHEN 6 => lcd_bus <= "1000110110";
73
          WHEN 7 => lcd_bus <= "1000110111";
74
          WHEN 8 => lcd_bus <= "1000111000";
75
          WHEN 9 => lcd_bus <= "1000111001";
76
          WHEN OTHERS => lcd_enable <= '0';
77
        END CASE;
78
      ELSE
79
        lcd_enable <= '0';
80
      END IF;
81
    END IF;
82
  END PROCESS;
83
  
84
END behavior;