2.2系统的输入、输出端口以及寄存器清单及说明:
CLK 输入时钟方波信号端口
KIN 键盘按键输入端口
KOUT 键盘完整编码码值输出端口(七位二进制数)
KOUT1 扫描信号输出端口(三位二进制数)
SIN 键盘消抖输入端口(七位二进制数)
SOUT 键盘消抖输出端口(七位二进制数)
LIN 键盘按键编码模块输入端口(七位二进制数)
DF 数字按键标志寄存器
FF 功能按键标志寄存器
ND 数字按键识别编码寄存器
NF 功能按键识别编码寄存器
LOCK 电子密码锁上锁状态标志寄存器
LOCK1 电子密码锁报警状态标志寄存器
UNLOCK 电子密码锁开锁状态标志寄存器
NULL1 电子密码锁无密码状态标志寄存器
DATA 电子密码锁数码显示数据寄存器
CAT 电子密码锁数码显示位选寄存器
DISPLAY 电子密码锁数码显示段选寄存器(十七位二进制数)
NUM0、NUM1、NUM2、NUM3数码显示中分位显示数据寄存器
DISNUM 数码显示段选数据寄存器
I1 数码显示计数器
SCANS 键盘扫描中按键完整编码寄存器
SCAN 键盘扫描寄存器
CNT 键盘消抖计数器
SIN1 键盘按键键值寄存器
I 键盘扫描计数器
DF1 数字按键状态标志寄存器
ACC 键盘数字输入暂存器
T 报警计数器
REG 电子密码锁密码存储器
NC 计数器
1键盘输入扫描部分源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY kbscan1 is
PORT(clk:in STD_LOGIC;
kin:in STD_LOGIC_VECTOR(3 DOWNTO 0);---PC7-PC4
kout:out STD_LOGIC_VECTOR(7 downto 0);--PC3--PC
kout1: out STD_LOGIC_VECTOR(3 downto 0));
end kbscan1;
architecture a of kbscan1 is
signal scans: std_logic_vector(7 downto 0);--PC7--PC0
signal scan : std_logic_vector(3 downto 0);--PC3--PC0
signal cnt :integer range 0 to 140;
signal sin1:std_logic_vector(3 downto 0);
signal i:integer range 0 to 3;
begin
scans<=scan& kin;
kout<=scans;
kout1<=scan;
process(clk)
begin
if(falling_edge(clk))then
if(i=3)then
i<=0;
else
i<=i+1;
end if;
case i is
when 0=>scan<="0001";
when 1=>scan<="0010";
when 2=>scan<="0100";
when 3=>scan<="1000";
end case;
end if;
end process;
End a;
2键盘输入消抖部分源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY xiaodou is
Port(clk :in STD_LOGIC;
sin:in std_logic_vector(7 downto 0);
sout:out std_logic_vector(7 downto 0));
end xiaodou;
architecture behavioral of xiaodou is
signal cnt :integer range 0 to 120;
signal sin1:std_logic_vector(7 downto 0);
begin
process(clk)
begin
sin1<=sin;
if (rising_edge(clk))then
if(sin1=sin)then
cnt<=cnt+1;
else
sin1<=sin;
cnt<=0;
end if;
if(cnt=120)then
sout<=sin;
cnt<=0;
end if;
end if;
end process;
end behavioral;
3键盘输入编码部分源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY bianma is
PORT(clk:in STD_LOGIC;
lin:in STD_LOGIC_VECTOR(7 DOWNTO 0);---PC7-PC4
DF,FF: out std_logic;
nd,nf:BUFFER std_logic_vector(3 downto 0));
end bianma;
architecture b of bianma is
begin
process(clk)
begin
if clk'event and clk='1' then
case lin is
when"10000001"=>ND<="0000";--0
when"00010001"=>ND<="0001";--1
when"00010010"=>ND<="0010";--2
when"00010100"=>ND<="0011";--3
when"00100001"=>ND<="0100";--4
when"00100010"=>ND<="0101";--5
when"00100100"=>ND<="0110";--6
when"01000001"=>ND<="0111";--7
when"01000010"=>ND<="1000";--8
when"01000100"=>ND<="1001";--9
when others =>ND<="1111";
END CASE;
END IF;
IF CLK'EVENT AND CLK='1' THEN
CASE LIN IS
when"00011000"=>NF<="0001";--qingchu
when"00101000"=>NF<="0010";--queren
when"01001000"=>NF<="0011";--shangsuo
when"10001000"=>NF<="0100";--kaisuo
when"10000100"=>NF<="0101";--wangjimima
when"10000010"=>NF<="0111";--genggaimima
When others =>NF<="1000";
END CASE;
END IF;
END PROCESS;
DF<=NOT(ND(3) AND ND(2) AND ND(1) AND ND(0));
FF<=NF(2) OR NF(1) OR NF(0);
end b;
4 电子密码锁的控制部分程序
DF 数字按键标志寄存器
FF 功能按键标志寄存器
ND 数字按键识别编码寄存器
NF 功能按键识别编码寄存器
LOCK 电子密码锁上锁状态标志寄存器
LOCK1 电子密码锁报警状态标志寄存器
UNLOCK 电子密码锁开锁状态标志寄存器
NULL1 电子密码锁无密码状态标志寄存器
DATA 电子密码锁数码显示数据寄存器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY kongzhi IS
PORT(CLK: IN STD_LOGIC;
DF,FF: in STD_LOGIC;
ND,NF:in STD_LOGIC_VECTOR(3 downTO 0);
LOCK,LOCK1,UNLOCK:buffer STD_LOGIC;
NULL1: buffer STD_LOGIC;
DATA: out STD_LOGIC_VECTOR(15 downTO 0) );
END kongzhi;
ARCHITECTURE V1 OF kongzhi IS
signal i1:integer range 0 to 3;
signal df1:std_logic;
signal ACC: STD_LOGIC_VECTOR(15 DOWNTO 0);
signal t: INTEGER RANGE 0 TO 2;
signal REG:STD_LOGIC_VECTOR(15 downTO 0);
signal NC,A:INTEGER RANGE 0 TO 3;
begin
PROCESS(FF,DF)IS
BEGIN
if rising_edge(clk) then
IF FF='1'THEN
IF NF="0001"THEN
ACC<="0000000000000000";
NC<=0;
END IF;
ELSE
df1<=df;
IF df1='0'and DF='1' THEN
IF NC<4 THEN
ACC<=ACC(11 DOWNTO 0)&ND;
NC<=NC+1;
END IF;
END IF;
END IF;
IF FF='1' THEN
IF NF="0011" THEN
REG<=ACC;
LOCK<='0';
UNLOCK<='1';
LOCK1<='1';
NULL1<='1';
else
IF NF="0100" THEN
IF REG=ACC THEN
LOCK<='1';
UNLOCK<='0';
LOCK1<='1';
NULL1<='1';
ELSE
LOCK<='0';
UNLOCK<='1';
IF t=2 THEN
REG<="1000100010001000";
LOCK1<='0';
lock<='1';
unlock<='1';
null1<='1';
t<=0;
ELSE
t<=t+1;
END IF;
END IF;
else
IF NF="0101" THEN
REG<="1000100010001000";
LOCK<='0';
UNLOCK<='1';
LOCK1<='1';
NULL1<='1';
else
IF NF="0111" THEN
IF UNLOCK='1' THEN
IF REG=ACC THEN
REG<="0000000000000000";
NULL1<='0';
LOCK<='1';
LOCK1<='1';
UNLOCK<='1';
END IF;
END IF;
else
IF NF="0010" THEN
REG<=ACC;
NULL1<='1';
LOCK<='0';
LOCK1<='1';
UNLOCK<='1';
END IF;
end if;
end if;
end if;
end if;
end if;
end if;
END PROCESS;
DATA<=ACC;
END ARCHITECTURE V1;
CAT 电子密码锁数码显示位选寄存器
DISPLAY 电子密码锁数码显示段选寄存器(十七位二进制数)
DISPLAY 电子密码锁数码显示段选寄存器(十七位二进制数)
NUM0、NUM1、NUM2、NUM3数码显示中分位显示数据寄存器
DISNUM 数码显示段选数据寄存器
I1 数码显示计数器
5电子密码锁的数码显示模块源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY LEDXIANSHI IS
PORT(CLK :IN STD_LOGIC;
DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0);
CAT:OUT STD_LOGIC_VECTOR(0 TO 3);
DISPLAY:OUT STD_LOGIC_VECTOR(16 DOWNTO 0));
END LEDXIANSHI;
ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS
Signal NUM0,NUM1,NUM2,NUM3: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DISNUM:STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL I1:INTEGER RANGE 0 TO 3;
BEGIN
NUM0<=DATA(3 DOWNTO 0);NUM1<=DATA(7 DOWNTO 4);NUM2<=DATA(11 DOWNTO 8);NUM3<=DATA(15 DOWNTO 12);
DISPLAY<=DISNUM;
PROCESS(CLK)
BEGIN
IF(RISING_EDGE(CLK))THEN
IF(I1=3)THEN
I1<=0;
ELSE
I1<=I1+1;
END IF;
END IF;
END PROCESS;
PROCESS(I1)
BEGIN
CASE I1 IS
WHEN 0=>CAT<="1110";
CASE NUM0 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN "0001"=>DISNUM<="00000000000001100";
WHEN "0010"=>DISNUM<="00001000101110111";
WHEN "0011"=>DISNUM<="00001000100111111";
WHEN "0100"=>DISNUM<="01001010110000000";
WHEN "0101"=>DISNUM<="00001100110111011";
WHEN "0110"=>DISNUM<="00001000111111011";
WHEN "0111"=>DISNUM<="00000000000001111";
WHEN "1000"=>DISNUM<="00001000111111111";
WHEN "1001"=>DISNUM<="00001000110111111";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
WHEN 1 => CAT<="1101";
CASE NUM1 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN "0001"=>DISNUM<="00000000000001100";
WHEN "0010"=>DISNUM<="00001000101110111";
WHEN "0011"=>DISNUM<="00001000100111111";
WHEN "0100"=>DISNUM<="01001010110000000";
WHEN "0101"=>DISNUM<="00001100110111011";
WHEN "0110"=>DISNUM<="00001000111111011";
WHEN "0111"=>DISNUM<="00000000000001111";
WHEN "1000"=>DISNUM<="00001000111111111";
WHEN "1001"=>DISNUM<="00001000110111111";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
WHEN 2=>
CAT<="1011";
CASE NUM2 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN "0001"=>DISNUM<="00000000000001100";
WHEN "0010"=>DISNUM<="00001000101110111";
WHEN "0011"=>DISNUM<="00001000100111111";
WHEN "0100"=>DISNUM<="01001010110000000";
WHEN "0101"=>DISNUM<="00001100110111011";
WHEN "0110"=>DISNUM<="00001000111111011";
WHEN "0111"=>DISNUM<="00000000000001111";
WHEN "1000"=>DISNUM<="00001000111111111";
WHEN "1001"=>DISNUM<="00001000110111111";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
WHEN 3=>
CAT<="0111";
CASE NUM3 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN "0001"=>DISNUM<="00000000000001100";
WHEN "0010"=>DISNUM<="00001000101110111";
WHEN "0011"=>DISNUM<="00001000100111111";
WHEN "0100"=>DISNUM<="01001010110000000";
WHEN "0101"=>DISNUM<="00001100110111011";
WHEN "0110"=>DISNUM<="00001000111111011";
WHEN "0111"=>DISNUM<="00000000000001111";
WHEN "1000"=>DISNUM<="00001000111111111";
WHEN "1001"=>DISNUM<="00001000110111111";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
END CASE;
END PROCESS;
END BEHAVIORAL;
6电子密码锁的数码显示部分(附加)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY LEDXIANSHI IS
PORT(CLK :IN STD_LOGIC;
DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0);
CAT:OUT STD_LOGIC_VECTOR(0 TO 3);
DISPLAY:OUT STD_LOGIC_VECTOR(16 DOWNTO 0));
END LEDXIANSHI;
ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS
signal NUM0,NUM1,NUM2,NUM3: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DISNUM:STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL I1:INTEGER RANGE 0 TO 3;
BEGIN
NUM0<=DATA(3 DOWNTO 0);NUM1<=DATA(7 DOWNTO 4);NUM2<=DATA(11 DOWNTO 8);NUM3<=DATA(15 DOWNTO 12);
DISPLAY<=DISNUM;
PROCESS(CLK)
BEGIN
IF(RISING_EDGE(CLK))THEN
IF(I1=3)THEN
I1<=0;
ELSE
I1<=I1+1;
END IF;
END IF;
END PROCESS;
PROCESS(I1)
BEGIN
CASE I1 IS
WHEN 0=>CAT<="1110";
CASE NUM0 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN OTHERS=>DISNUM<="01111111100000000";
END CASE;
WHEN 1=>
CAT<="1101";
CASE NUM1 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN OTHERS=>DISNUM<="01111111100000000";
END CASE;
WHEN 2=>
CAT<="1011";
CASE NUM2 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN OTHERS=>DISNUM<="01111111100000000";
END CASE;
WHEN 3=>
CAT<="0111";
CASE NUM3 IS
WHEN "0000"=>DISNUM<="00000000011111111";
WHEN OTHERS=>DISNUM<="01111111100000000";
END CASE;
END CASE;
END PROCESS;
END BEHAVIORAL;
数码管显示
library IEEE;
use IEEE.STD_LOGIC_11.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity KeyScan is
port(
RESET : in std_logic;
CLK : in std_logic; --基本时钟源6MHz
KeyIn : in std_logic_vector(3 downto 0); --column列
KeyOut : out std_logic_vector(3 downto 0); --row行
LED_A : out std_logic; --4位数码管引脚
LED_B : out std_logic;
LED_C : out std_logic;
LED_D : out std_logic;
LED_E : out std_logic;
LED_F : out std_logic;
LED_G : out std_logic;
LED_VCC1 : out std_logic; --时十位
LED_VCC2 : out std_logic; --时个位
LED_VCC3 : out std_logic; --分十位
LED_VCC4 : out std_logic; --分个位
LED_TimePoint:out std_logic; --冒号
LED_Point :out std_logic; --小数点
LED_EN1 :out std_logic --小数点
);
end KeyScan;
architecture Behavioral of KeyScan is
signal timecnt : integer range 0 to 100000 ; --分频计数器,用来得到10ms时钟
signal time10ms : std_logic ; --10ms时钟
signal scanvalue : std_logic_vector(3 downto 0);--记录扫描数据
signal combvalue : std_logic_vector(7 downto 0);--KeyIn、KeyOut组合值
signal cpy_scanvalue : std_logic_vector(3 downto 0);--备份扫描数据
signal count : integer range 0 to 60000 ; --分频器,产生毫秒时钟基准
signal scancnt : integer range 0 to 3 ; --LED扫描轮转
signal Data0: integer range 0 to 9 ;
begin
LED_EN1<='0';
--进程1:产生20ms时钟
process( CLK,RESET)
begin
if RESET='0' then time10ms<='0'; --初始化
elsif CLK'event and CLK='1' then
timecnt<=timecnt+1;
if timecnt=100000
then time10ms<=not time10ms; timecnt<=0;
end if;
end if;
end process;
--进程2:键盘扫描输出
process( time10ms,RESET)
begin
if RESET='0' then scanvalue<="0001";combvalue<="00000000";
Data0<=0; --初始化
elsif time10ms'event and time10ms='1' then --每10ms进行一次键盘扫描
KeyOut<=scanvalue; --输出扫描值
cpy_scanvalue<=scanvalue; --备份扫描值,为了进程3对扫描结果进行比较
case scanvalue is --扫描值移位
when "0001" => scanvalue<="0010";
when "0010" => scanvalue<="0100";
when "0100" => scanvalue<="1000";
when "1000" => scanvalue<="0001";
when others => scanvalue<="0001";
end case;
combvalue<= (KeyIn & cpy_scanvalue); --组合键盘扫描的输入和输出
case combvalue is --翻译扫描结果
when "00010001" => Data0<=1; --对应键盘“1”
when "00100001" => Data0<=2; --对应键盘“2”
when "01000001" => Data0<=3; --对应键盘“3”
when "00010010" => Data0<=4; --对应键盘“4”
when "00100010" => Data0<=5; --对应键盘“5”
when "01000010" => Data0<=6; --对应键盘“6”
when "00010100" => Data0<=7; --对应键盘“7”
when "00100100" => Data0<=8; --对应键盘“8”
when "01000100" => Data0<=9; --对应键盘“9”
when "00011000" => Data0<=0; --对应键盘“0”
when others => null; --无键盘按下
end case;
end if;
end process;
--数码管扫描
process(CLK,RESET) --时钟进程,产生各种时钟信号
begin
if RESET='0' then NULL;
elsif CLK'event and CLK='1' then
count<=count+1;
if count=60000 then
count<=0;
if scancnt>3 then scancnt<=0;
else scancnt<=scancnt+1;
end if;
end if;
end if;
end process;
--数码管扫描
process(CLK, RESET)
begin
--LED_VCC信号是‘1’有效,其余信号均为‘0’有效,中间的冒号两个点分别由VCC2和VCC3控制
if RESET='0' then LED_A<='1';LED_B<='1'; LED_C<='1';LED_D<='1';LED_E<='1';LED_F<='1';LED_G<='1';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='0';LED_TimePoint<='1'; LED_Point<='1';
else
if scancnt=0 then
case Data0 is --分个位
when 0 => LED_A<='0';LED_B<='0'; LED_C<='0';LED_D<='0';LED_E<='0';LED_F<='0';LED_G<='1';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 1 => LED_A<='1';LED_B<='0'; LED_C<='0';LED_D<='1';LED_E<='1';LED_F<='1';LED_G<='1';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 2 => LED_A<='0';LED_B<='0'; LED_C<='1';LED_D<='0';LED_E<='0';LED_F<='1';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 3 => LED_A<='0';LED_B<='0'; LED_C<='0';LED_D<='0';LED_E<='1';LED_F<='1';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 4 => LED_A<='1';LED_B<='0'; LED_C<='0';LED_D<='1';LED_E<='1';LED_F<='0';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 5 => LED_A<='0';LED_B<='1'; LED_C<='0';LED_D<='0';LED_E<='1';LED_F<='0';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 6 => LED_A<='0';LED_B<='1'; LED_C<='0';LED_D<='0';LED_E<='0';LED_F<='0';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 7 => LED_A<='0';LED_B<='0'; LED_C<='0';LED_D<='1';LED_E<='1';LED_F<='1';LED_G<='1';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 8 => LED_A<='0';LED_B<='0'; LED_C<='0';LED_D<='0';LED_E<='0';LED_F<='0';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when 9 => LED_A<='0';LED_B<='0'; LED_C<='0';LED_D<='0';LED_E<='1';LED_F<='0';LED_G<='0';LED_VCC1<='0';LED_VCC2<='0'; LED_VCC3<='0';LED_VCC4<='1';LED_Point<='1';
when others => null;
end case;
end if;
end if;
end process;
end Behavioral;
控制电路的软件仿真图(1)
图2-11 控制电路的软件仿真图(2)
控制电路的软件仿真图(3)
控制电路的软件仿真图(4)
控制电路的软件仿真图(5)
5电子密码锁的数码显示模块源程序(改七段)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY LEDXIANSHI IS
PORT(CLK :IN STD_LOGIC;
LED_TimePoint:out std_logic; --冒号
LED_Point :out std_logic; --小数点
LED_EN1 :out std_logic; --选择数码管显示
DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0);
CAT:OUT STD_LOGIC_VECTOR(0 TO 3);
DISPLAY:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END LEDXIANSHI;
ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS
Signal NUM0,NUM1,NUM2,NUM3: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DISNUM:STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL I1:INTEGER RANGE 0 TO 3;
BEGIN
NUM0<=DATA(3 DOWNTO 0);NUM1<=DATA(7 DOWNTO 4);NUM2<=DATA(11 DOWNTO 8);NUM3<=DATA(15 DOWNTO 12);
DISPLAY<=DISNUM;
PROCESS(CLK)
BEGIN
IF(RISING_EDGE(CLK))THEN
IF(I1=3)THEN
I1<=0;
ELSE
I1<=I1+1;
END IF;
END IF;
END PROCESS;
PROCESS(I1)
BEGIN
CASE I1 IS
WHEN 0=>CAT<="0001";
CASE NUM0 IS
WHEN "0000"=>DISNUM<="1000000";
WHEN "0001"=>DISNUM<="1111001";
WHEN "0010"=>DISNUM<="0100100";
WHEN "0011"=>DISNUM<="0110000";
WHEN "0100"=>DISNUM<="0011001";
WHEN "0101"=>DISNUM<="0010010";
WHEN "0110"=>DISNUM<="0000010";
WHEN "0111"=>DISNUM<="1111000";
WHEN "1000"=>DISNUM<="0000000";
WHEN "1001"=>DISNUM<="0010000";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
WHEN 1 => CAT<="0010";
CASE NUM1 IS
WHEN "0000"=>DISNUM<="1000000";
WHEN "0001"=>DISNUM<="1111001";
WHEN "0010"=>DISNUM<="0100100";
WHEN "0011"=>DISNUM<="0110000";
WHEN "0100"=>DISNUM<="0011001";
WHEN "0101"=>DISNUM<="0010010";
WHEN "0110"=>DISNUM<="0000010";
WHEN "0111"=>DISNUM<="1111000";
WHEN "1000"=>DISNUM<="0000000";
WHEN "1001"=>DISNUM<="0010000";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
WHEN 2=>
CAT<="0100";
CASE NUM2 IS
WHEN "0000"=>DISNUM<="1000000";
WHEN "0001"=>DISNUM<="1111001";
WHEN "0010"=>DISNUM<="0100100";
WHEN "0011"=>DISNUM<="0110000";
WHEN "0100"=>DISNUM<="0011001";
WHEN "0101"=>DISNUM<="0010010";
WHEN "0110"=>DISNUM<="0000010";
WHEN "0111"=>DISNUM<="1111000";
WHEN "1000"=>DISNUM<="0000000";
WHEN "1001"=>DISNUM<="0010000";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
WHEN 3=>
CAT<="1000";
CASE NUM3 IS
WHEN "0000"=>DISNUM<="1000000";
WHEN "0001"=>DISNUM<="1111001";
WHEN "0010"=>DISNUM<="0100100";
WHEN "0011"=>DISNUM<="0110000";
WHEN "0100"=>DISNUM<="0011001";
WHEN "0101"=>DISNUM<="0010010";
WHEN "0110"=>DISNUM<="0000010";
WHEN "0111"=>DISNUM<="1111000";
WHEN "1000"=>DISNUM<="0000000";
WHEN "1001"=>DISNUM<="0010000";
WHEN OTHERS=>DISNUM<=NULL;
END CASE;
END CASE;
END PROCESS;
END BEHAVIORAL;下载本文