cursofpgavhdl

LCD TEST

Dec 17th, 2019
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  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_example 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_example;
  35.  
  36. ARCHITECTURE behavior OF lcd_example 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;
Advertisement
Add Comment
Please, Sign In to add comment