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;
|