📄 lcdelectronicclock.txt
字号:
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 : out std_logic ;
psb : out std_logic ;
rw : out std_logic ;
rscs : out std_logic ;
lcde : out std_logic ;
data : buffer std_logic_vector ( 7 downto 0) ;
mia1 : in std_logic_vector( 3 downto 0) ;
mia2 : in std_logic_vector( 3 downto 0) ;
fe1 : in std_logic_vector( 3 downto 0) ;
fe2 : in std_logic_vector( 3 downto 0);
sh1 : in std_logic_vector( 3 downto 0) ;
sh2 : in std_logic_vector( 3 downto 0) );
end lcd_driver ;
architecture behav of lcd_driver is
type states is ( set ,clr ,set_d ,open1,set_addr,set_ddrom1,
set_ddrom2,set_ddrom3,set_ddrom4,set_ddrom5,set_1,
set_ddrom6,set_ddrom7,set_ddrom8,set_ddrom9,set_ddrom10,
set_ddrom11,set_ddrom12,set_ddrom13,set_ddrom14,s1,s2);
signal current_state : states :=set ;
signal miao1 : std_logic_vector ( 7 downto 0) ;
signal miao2 : std_logic_vector ( 7 downto 0) ;
signal fen1 : std_logic_vector ( 7 downto 0) ;
signal fen2 : std_logic_vector ( 7 downto 0) ;
signal shi1 : std_logic_vector ( 7 downto 0) ;
signal shi2 : std_logic_vector ( 7 downto 0) ;
begin
miao1<="0011"&mia1;
miao2<="0011"&mia2;
fen1 <="0011"&fe1 ;
fen2 <="0011"&fe2 ;
shi1 <="0011"&sh1 ;
shi2 <="0011"&sh2 ;
psb <='1' ;
reset <='1';
rw <= '0' ;
control: process ( clk,current_state )
variable fanwei:integer:=2500;
variable cnt : integer:=0 ;
begin
if clk'event and clk='1' then
case current_state is
when set => rscs<='0'; --功能设定
data<="00110000" ; ----30h
lcde<='0';
if cnt=2 then lcde<='1' ;cnt:=cnt+1 ;
else lcde<='0' ; cnt:=cnt+1 ;
end if ;
if cnt=fanwei*2 then
current_state<=clr ;cnt:=0 ;else current_state<=set ;
end if ;
when clr => lcde<='0' ;
rscs<='0' ;
data<="00000001"; ---清除显示 ,01H
if cnt=2 then lcde<='1'; cnt:=cnt+1 ;
else lcde<='0'; cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_d ;cnt:=0 ; else current_state<=clr ;
end if ;
when set_d => lcde<= '0' ; -----设定显示的移动方向,06H
rscs<= '0' ;
data<="00000110";
if cnt=2 then lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state <=open1; cnt :=0 ; else current_state<=set_d;
end if ;
when open1=> lcde<='0' ; -----显示状态开或关 0FH
rscs<='0' ;
data<="00001111";
if cnt=2 then lcde<= '1'; cnt:=cnt+1 ;
else lcde<='0'; cnt:=cnt+1 ;
end if ;
if cnt=fanwei*2 then
current_state<=set_addr ;cnt:=0 ; else current_state<=open1;
end if ;
when set_addr=>lcde<='0' ;
rscs<='0' ;
data<="10000000"; --------设定地址 80H
if cnt=2 then lcde<='1'; cnt:=cnt+1 ;
else lcde<='0'; cnt :=cnt+1 ;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom1 ;cnt:=0; else current_state<=set_addr;
end if ;
when set_ddrom1=>lcde<='0' ;
rscs<='1' ;
data<="11001010"; ----送字‘时’
if cnt=2 then lcde<='1'; cnt:=cnt+1 ;
else lcde<='0'; cnt :=cnt+1 ;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom2 ;cnt:=0; else current_state<=set_ddrom1;
end if ;
when set_ddrom2=> lcde<='0';
rscs<='1';
data<="10110001"; -----送字 ‘时’
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if;
if cnt=fanwei*2 then
current_state<=set_ddrom3;cnt:=0; else current_state<=set_ddrom2;
end if;
when set_ddrom3=> lcde<='0'; -----送字 ‘间’
rscs<='1';
data<="10111100";
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom4;cnt:=0;else current_state<=set_ddrom3;
end if;
when set_ddrom4=> lcde<='0'; -----送字 ‘间’
rscs<='1';
data<="11100100";
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom5;cnt:=0;else current_state<=set_ddrom4;
end if;
when set_ddrom5=> lcde<='0'; -----送小时的数据
rscs<='1';
data<=shi2;
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom6;cnt:=0;else current_state<=set_ddrom5;
end if;
when set_ddrom6=> lcde<='0'; -----送小时的数据
rscs<='1';
data<=shi1;
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom7;cnt:=0;else current_state<=set_ddrom6;
end if;
when set_ddrom7=> lcde<='0'; -------送 :
rscs<='1';
data<="10100011";
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom8;cnt:=0;else current_state<=set_ddrom7;
end if;
when set_ddrom8=> lcde<='0'; -------送 :
rscs<='1';
data<="10111010";
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom9;cnt:=0;else current_state<=set_ddrom8;
end if;
when set_ddrom9=> lcde<='0'; -----送分
rscs<='1';
data<=fen2;
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom10;cnt:=0;else current_state<=set_ddrom9;
end if;
when set_ddrom10=> lcde<='0'; -----送分
rscs<='1';
data<=fen1;
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom11;cnt:=0;else current_state<=set_ddrom10;
end if;
when set_ddrom11=> lcde<='0';
rscs<='1'; -------送 :
data<="10100011";
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom12;cnt:=0;else current_state<=set_ddrom11;
end if;
when set_ddrom12=> lcde<='0';
rscs<='1'; -------送 :
data<="10111010";
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom13;cnt:=0;else current_state<=set_ddrom12;
end if;
when set_ddrom13=> lcde<='0'; ----送秒
rscs<='1';
data<=miao2;
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=set_ddrom14;cnt:=0;else current_state<=set_ddrom13;
end if;
when set_ddrom14=> lcde<='0';
rscs<='1'; -----送秒
data<=miao1;
if cnt=2 then
lcde<='1';cnt:=cnt+1;
else lcde<='0';cnt:=cnt+1;
end if ;
if cnt=fanwei*2 then
current_state<=open1;cnt:=0;else current_state<=set_ddrom14;
end if;
when others=>current_state<=open1;
end case;
end if;
end process control;
end behav;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -