
2×16 character based LCD Interface
Call for Price
2×16 character based LCD Interface
Description
2×16 Character LCD Interface Card
Experiments Coverd
- Display Message “PANTECH SOLUTIONS” – 1st Line
- Display Message ” PANTECH SOLUTIONS ” – 2nd Line
Hardware Description
The 2×16 character LCD interface card with supports both modes 4-bit and 8-bit interface, and also facility to adjust contrast through trim pot. In 8-bit interface 11 lines needed to create 8-bit interface; 8 data bits (D0 – D7), three control lines, address bit (RS), read/write bit (R/W) and control signal (E). The LCD controller is a standard KS0070B or equivalent, which is a very well-known interface for smaller character based LCDs.
- LCD’s Control Lines and Data lines are terminated with 20pin box connector.
|
20PIN CONNECTOR |
LCD MODULES |
LED & Switch Card Pin Details |
CONTROL LINES |
1 |
RS |
|
2 |
RW |
||
3 |
E |
||
4-8 |
NC |
||
LCD – DATA LINES |
9 |
D0 |
|
10 |
D1 |
||
11 |
D2 |
||
12 |
D3 |
||
13 |
D4 |
||
14 |
D5 |
||
15 |
D6 |
||
16 |
D7 |
||
PWR |
17,19 |
Vcc |
Supply form FPGASP3 Kit |
18,20 |
Gnd |
2 X 16 LCD interface (program to display message “PANTECH SOLUTIONS “ in 2 x 16 LCD)
Description
In this example to display message “PANTECH SOLUTIONS” in 2 X 16 LCD first line. In Spartan3 FPGA lines (P60, P63 and P68) are configured for LCD control lines like (RS, RW & E). Pins (P77 to P80 and P82 to P85) are configured for LCD data lines. User could verify the result by “2 X 16 LCD Interface Card” connected to the FPGASP3 KIT at connector J6. User can modify the LCD display message by changing the data in VHDL code.
Flow Chart
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity lcd is
port ( clk : in std_logic; —-clock i/p
lcd_rw : out std_logic; —read&write control
lcd_e : out std_logic; —-enable control
lcd_rs : out std_logic; —-data or command control
data : out std_logic_vector(7 downto 0)); —data line
end lcd;
architecture Behavioral of lcd is
constant N: integer :=22;
type arr is array (1 to N) of std_logic_vector(7 downto 0);
constant datas : arr := (X”38″,X”0c”,X”06″,X”01″,X”C0″,X”50″,x”41″,x”4e”,x”54″,x”45″,x”43″,x”48″,x”20″,x”53″,x”4f”,x”4c”,x”55″,
x”54″,x”49″,x”4f”,x”4e”,X”53″); –command and data to display
begin
lcd_rw <= '0'; ----lcd write
process(clk)
variable i : integer := 0;
variable j : integer := 1;
begin
if clk’event and clk = ‘1’ then
if i <= 1000000 then
i := i + 1;
lcd_e <= '1';
data <= datas(j)(7 downto 0);
elsif i > 1000000 and i < 2000000 then
i := i + 1;
lcd_e <= '0';
elsif i = 2000000 then
j := j + 1;
i := 0;
end if;
if j <= 5 then
lcd_rs <= '0'; ---command signal
elsif j > 5 then
lcd_rs <= '1'; ----data signal
end if;
if j = 22 then —repeated display of data
j := 5;
end if;
end if;
end process;
end Behavioral;
2 X 16 LCD interface (program to display message “SPARTAN 3 EVK “ in second line of 2 x 16 LCD)
Description
In this example to display message “PANTECH SOLUTIONS” in 2 X 16 LCD second line. In Spartan3 FPGA lines (P60, P63 and P68) are configured for LCD control lines like (RS, RW & E). Pins (P77 to P80 and P82 to P85) are configured for LCD data lines. User could verify the result by “2 X 16 LCD Interface Card” connected to the FPGASP3 KIT at connector J6. User can modify the LCD display message by changing the data in VHDL code.
Flow Chart
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
se ieee.std_logic_unsigned.all;
entity lcd is
port(clock:in std_logic;
led:out std_logic;
rw: out std_logic;
rs:out std_logic;
en:out std_logic;
data:out std_logic_vector(7 downto 0));
end lcd;
architecture arch of lcd is
signal clkout:std_logic:=’0′;
type state is( state1,state2,state3,state4,state5,state6,state7,state8, state9, state10,state111,state22,state23,state24,state25,state26,state27,state28,state29,state30,state31,state32,state11,state12,state13,state14,state15,state16,state17, state18,state19,state110,state121,state212,state213,state214,state215,state216,
state217,state218,state219,state300,state310,state320);
signal current_state,next_state:state;
signal count:integer:=0;
begin
process(clock)
begin
if clock’event and clock=’1′ then
count<=count + 1; -- count for delay
if count =500000 then
clkout<= not clkout;
count<=0;
end if;
end if;
end process;
led<=clkout;
process(clkout)
begin
if clkout’event and clkout=’1′ then
current_state<=next_state;
end if;
end process;
process(current_state,next_state)
en<='1';
rw<='0'; case current_state is
when state1=>
data<="00111000";
en<='1';
rs<='0';
rw<='0';
next_state<=state11;
when state11=>
data<="00111000"; rs<='0';
rw<='0';
en<='0';
next_state<=state2;
when state2=>
data<="00001110";
en<='1';
rs<='0';
rw<='0';
next_state<=state12;
when state12=>
data<="00001110";
rs<='0';
rw<='0';
en<='0';
next_state<=state3;
when state3=>
data<="00000001";
en<='1';
rs<='0';
rw<='0';
next_state<=state13;
when state13=>
data<="00000001";
rs<='0';
rw<='0';
en<='0';
next_state<=state4;
when state4=>
data<="00000110";
en<='1';
rs<='0';
rw<='0';
next_state<=state14;
when state14=>
data<="00000110";
rs<='0';
rw<='0';
en<='0';
next_state<=state5;
when state5=>
data<="10000000";
en<='1';
rs<='0';
rw<='0';
next_state<=state15;
when state15=>
data<="10000000";
rs<='0';
rw<='0';
en<='0';
next_state<=state6;
when state6=>
data<="01010000"; -- ascii code for "P"
en<='1';
rs<='1';
rw<='0';
next_state<=state16;
when state16=>
data<="01010000"; -- ascii code for "P"
rs<='1';
rw<='0';
en<='0';
next_state<=state7;
when state7=>
data<="01000001"; -- ascii code for "A"
en<='1';
rs<='1';
rw<='0';
next_state<=state17;
when state17=>
data<="01000001"; -- -- ascii code for "A"
rs<='1';
rw<='0';
en<='0';
next_state<=state9;
when state9=>
data<="01001110"; -- ascii code for "N"
en<='1';
rs<='1';
rw<='0';
next_state<=state19;
when state19=>
data<="01001110"; -- ascii code for "N"
rs<='1';
rw<='0';
en<='0';
next_state<=state10;
when state10=>
data<="01010100"; -- ascii code for "T"
en<='1';
rs<='1';
rw<='0';
next_state<=state110;
when state110=>
data<="01010100"; -- ascii code for "T"
rs<='1';
rw<='0';
en<='0';
next_state<=state111;
when state111=>
data<="01000101"; -- ascii code for "E"
en<='1';
rs<='1';
rw<='0';
next_state<=state121;
when state121=>
data<="01000101"; -- ascii code for "E"
rs<='1';
rw<='0';
en<='0';
next_state<=state22;
when state22=>
data<="01000011"; -- ascii code for "C"
en<='1';
rs<='1';
rw<='0';
next_state<=state212;
when state212=>
data<="01000011"; -- ascii code for "C"
rs<='1';
rw<='0';
en<='0';
next_state<=state23;
when state23=>
data<="01001000"; -- ascii code for "H"
en<='1';
rs<='1';
rw<='0';
next_state<=state213;
when state213=>
data<="01001000"; -- ascii code for "H"
rs<='1';
rw<='0';
en<='0';
next_state<=state32;
when state32=>
data<="00100000"; -- ascii code for " "
en<='1';
rs<='1';
rw<='0';
next_state<=state320;
when state320=>
data<="00100000"; -- ascii code for " "
rs<='1';
rw<='0';
en<='0';
next_state<=state24;
when state24=>
data<="01010011"; -- ascii code for "S"
en<='1';
rs<='1';
rw<='0';
next_state<=state214;
when state214=>
data<="01010011"; -- ascii code for "S"
rs<='1';
rw<='0';
en<='0';
next_state<=state25;
when state25=>
data<="01001111"; -- ascii code for "O"
en<='1';
rs<='1';
rw<='0';
next_state<=state215;
when state215=>
data<="01001111"; -- ascii code for "O"
rs<='1';
rw<='0';
en<='0';
next_state<=state26;
when state26=>
data<="01001100"; -- ascii code for "L"
en<='1';
rs<='1';
rw<='0';
next_state<=state216;
when state216=>
data<="01001100"; -- ascii code for "L"
rs<='1';
rw<='0';
en<='0';
next_state<=state27;
when state27=>
data<="01010101"; -- ascii code for "U"
en<='1';
rs<='1';
rw<='0';
next_state<=state217;
when state217=>
data<="01010101"; -- ascii code for "U"
rs<='1';
rw<='0';
en<='0';
next_state<=state28;
when state28=>
data<="01010100"; -- ascii code for "T"
en<='1';
rs<='1';
rw<='0';
next_state<=state218;
when state218=>
data<="01010100"; -- ascii code for "T"
rs<='1';
rw<='0';
en<='0';
next_state<=state29;
when state29=>
data<="01001001"; -- ascii code for "I"
en<='1';
rs<='1';
rw<='0';
next_state<=state219;
when state219=>
data<="01001001"; -- ascii code for "I"
rs<='1';
rw<='0';
en<='0';
next_state<=state30;
when state30=>
data<="01001111"; -- ascii code for "O"
en<='1';
rs<='1';
rw<='0';
next_state<=state300;
when state300=>
data<="01001111"; -- ascii code for "O"
rs<='1';
rw<='0';
en<='0';
next_state<=state31;
when state31=>
data<="01001110"; -- ascii code for "n"
en<='1';
rs<='1';
rw<='0';
next_state<=state310;
when state310=>
data<="01001110"; -- ascii code for "N"
rs<='1';
rw<='0';
en<='0';
next_state<=state8;
when state8=>
next_state<=state8;
when others=>
next_state<=state8;
end case;
end process;
end arch;
when state212=>
data<="01000011"; -- ascii code for "C"
rs<='1';rw<='0';
en<='0';
next_state<=state23;
when state23=>
data<="01001000"; -- ascii code for "H"
en<='1';
rs<='1';
rw<='0';
next_state<=state213;
when state213=>
data<="01001000"; -- ascii code for "H"
rs<='1';
rw<='0';
en<='0';
next_state<=state32;
when state32=>
data<="00100000"; -- ascii code for " "
en<='1';
rs<='1';
rw<='0';
next_state<=state320;
when state320=>
data<="00100000"; -- ascii code for " "
rs<='1';
rw<='0';
en<='0';
next_state<=state24;
when state24=>
data<="01010011"; -- ascii code for "S"
en<='1';
rs<='1';
rw<='0';
next_state<=state214;
when state214=>
data<="01010011"; -- ascii code for "S"
rs<='1';
rw<='0';
en<='0';
next_state<=state25;
when state25=>
data<="01001111"; -- ascii code for "O"
en<='1';
rs<='1';
rw<='0';
next_state<=state215;
when state215=>
data<="01001111"; -- ascii code for "O"
rs<='1';
rw<='0';
en<='0';
next_state<=state26;
when state26=>
data<="01001100"; -- ascii code for "L"
en<='1';
rs<='1';
rw<='0';
next_state<=state216;
when state216=>
data<="01001100"; -- ascii code for "L"
rs<='1';
rw<='0';
en<='0';
next_state<=state27;
when state27=>
data<="01010101"; -- ascii code for "U"
en<='1';
rs<='1';
rw<='0';
next_state<=state217;
when state217=>
data<="01010101"; -- ascii code for "U"
rs<='1';
rw<='0';
en<='0';
next_state<=state28;
when state28=>
data<="01010100"; -- ascii code for "T"
en<='1';
rs<='1';
rw<='0';
next_state<=state218;
when state218=>
data<="01010100"; -- ascii code for "T"
rs<='1';
rw<='0';
en<='0';
next_state<=state29;
when state29=>
data<="01001001"; -- ascii code for "I"
en<='1';
rs<='1';
rw<='0';
next_state<=state219;
when state219=>
data<="01001001"; -- ascii code for "I"
rs<='1';
rw<='0';
en<='0';
next_state<=state30;
when state30=>
data<="01001111"; -- ascii code for "O"
en<='1';
rs<='1';
rw<='0';
next_state<=state300;
when state300=>
data<="01001111"; -- ascii code for "O"
rs<='1';
rw<='0';
en<='0';
next_state<=state31;
when state31=>
data<="01001110"; -- ascii code for "n"
en<='1';
rs<='1';
rw<='0';
next_state<=state310;
when state310=>
data<="01001110"; -- ascii code for "N"
rs<='1';
rw<='0';
en=’0′;
next_state<=state8;
when state8=>
next_state<=state8;
when others=>
next_state<=state8;
end case;
end process;
end arch;
data<="01001100"; -- ascii code for "L"
rs<='1'; rw<='0';
en<='0';
next_state<=state27;
when state27=>
data<="01010101"; -- ascii code for "U"
en<='1';
rs<='1';
rw<='0';
next_state<=state217;
when state217=>
data<="01010101"; -- ascii code for "U"
rs<='1';
rw<='0';
en<='0';
next_state<=state28;when state28=>
data<="01010100"; -- ascii code for "T"
en<='1';
rs<='1';
rw<='0';
next_state<=state218;
when state218=>
data<="01010100"; -- ascii code for "T"
rs<='1';
rw<='0';
en<='0';
next_state<=state29;
when state29=>
data<="01001001"; -- ascii code for "I"
en<='1';
rs<='1';
rw<='0';
next_state<=state219;
when state219=>
data<="01001001"; -- ascii code for "I"
rs<='1';rw<='0';
en<='0';
next_state<=state30;
when state30=>
data<="01001111"; -- ascii code for "O"
en<='1';
rs<='1';
rw<='0';
next_state<=state300;
when state300=>
data<="01001111"; -- ascii code for "O"
rs<='1';
rw<='0';
en<='0';
next_state<=state31;
when state31=>
data<="01001110"; -- ascii code for "n"
en<='1';
rs<='1';
rw<='0';
next_state<=state310;
when state310=>
data<="01001110"; -- ascii code for "N"
rs<='1';
rw<='0';
en<='0';
next_state<=state8;
when state8=>
next_state<=state8;
when others=>
next_state<=state8;
end case;
end process;
end arch;
rs<='1';
rw<='0';
en<='0';
next_state<=state8;
when state8=>
next_state<=state8;
when others=>
next_state<=state8;
end case;
end process;
end arch;
Additional information
Weight | 1.000000 kg |
---|
Reviews
There are no reviews yet.