VHDL实现智能药盒

文章目录

  • VHDL实现智能药盒
    • 一、简介
    • 二、代码
    • 三、其他操作
    • 四、总结

一、简介

我们这篇文章接着上一篇文章:
https://hyxmoon.blog.csdn.net/article/details/121726857

来继续实现智能药盒,这里只不过是换了一个板子,换了一种语言而已。

二、代码

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;ENTITY yaohe_jichu IS
PORT(BTN0,BTN1,BTN2:IN STD_LOGIC;
BTN3:IN STD_LOGIC;
CLK:IN STD_LOGIC;
ROW_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
RED_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
GRN_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
LED_OUT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
FMQ : OUT STD_LOGIC;
btn_row:out std_logic_vector(3 downto 0);
row0:in std_logic_vector(3 downto 0);
disp_seg:out std_logic_vector(6 downto 0);
disp_cat:out std_logic_vector(7 downto 0);
switch1:in std_logic
);END yaohe_jichu;ARCHITECTURE ACT OF yaohe_jichu IS
SIGNAL CONT,CONT_1:INTEGER RANGE 0 TO 3;
signal BTN1_I,BTN0_I,BTN2_I,BTN3_I,resetmp3,resetmp4,resetmp5,resetmp6,resetmp7,resetmp8,resetmp9,resetmp10,CLK_10,CLK_60,CLK_5:STD_LOGIC;
SIGNAL NUM_2 : INTEGER RANGE 0 TO 59;SIGNAL NUM_3 : INTEGER RANGE 0 TO 7;
SIGNAL NUM_4,OC,COD,COC,change : INTEGER RANGE 0 TO 1;
SIGNAL TMP_1:INTEGER RANGE 0 TO 49999;
SIGNAL TMP_2:INTEGER RANGE 0 TO 24999999;
SIGNAL TMP_3:INTEGER RANGE 0 TO 12499999;
signal scan: std_logic_vector(1 downto 0);
signal tmp: integer range 0 to 49999;
signal deshake1: integer range 0 to 99;
signal deshake2: integer range 0 to 99;
signal deshake3: integer range 0 to 99;
signal clktmp,OP: std_logic;
signal clk_out: std_logic;
signal number: std_logic_vector(3 downto 0);
signal number1: std_logic_vector(3 downto 0);
signal number1_IN_1: std_logic_vector(3 downto 0);
signal number1_IN_2: std_logic_vector(3 downto 0);
signal number2: std_logic_vector(3 downto 0);
signal number2_IN_1: std_logic_vector(3 downto 0);
signal number2_IN_2: std_logic_vector(3 downto 0);
signal number3: std_logic_vector(3 downto 0);
signal number3_IN_1: std_logic_vector(3 downto 0);
signal number3_IN_2: std_logic_vector(3 downto 0);
signal number1_OUT: std_logic_vector(3 downto 0);
signal number2_OUT: std_logic_vector(3 downto 0);
signal number1_OUT_O: std_logic_vector(3 downto 0);
signal number2_OUT_O: std_logic_vector(3 downto 0);
signal number4: std_logic_vector(3 downto 0);
signal number5: std_logic_vector(3 downto 0);
signal number6: std_logic_vector(3 downto 0);
signal COMB_1: std_logic_vector(3 downto 0);
signal COMB_2: std_logic_vector(3 downto 0);
signal col0: std_logic_vector(3 downto 0);--button3--signal feeding_medicine: STD_LOGIC:='0';
signal feeding_medicine0: STD_LOGIC:='0';
signal position:INTEGER RANGE 0 TO 3;--position.--判断是否吃药了--
--initial is 0
--if needed to take medicine, then set the number to 1
--if taken the medicine, then set the number to 0 again.BEGINPROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1'THENIF TMP_2 = 24999999 THEN TMP_2 <= 0;CLK_60 <= NOT CLK_60;ELSE TMP_2 <= TMP_2 + 1;END IF;
END IF;
END PROCESS;PROCESS(CLK) --button0--
BEGIN
IF BTN0_I'EVENT AND BTN0_I='1'THEN
OP<=NOT OP;
END IF;
END PROCESS;PROCESS(CLK_5) --数码管输出值总设定--
BEGIN
IF OP ='1'THEN
IF CONT = 0 THEN number1_OUT_O<=number1_OUT;number2_OUT_O<=number2_OUT;
ELSE
IF CLK_5='1'THEN
number1_OUT_O<=number1_OUT;number2_OUT_O<=number2_OUT;
ELSE number1_OUT_O<="1111";number2_OUT_O<="1111";
END IF;
END IF;
IF OC=1 THEN
number1_OUT_O<=COMB_2;
number2_OUT_O<=COMB_1;
ELSE NULL;
END IF;
ELSE number1_OUT_O<="0000";number2_OUT_O<="0000";
END IF;
END PROCESS;PROCESS(CLK_10) --button1设定时数码管显示--
BEGIN
IF OP = '1'THEN
IF CONT = 0 THEN number1_OUT<="1111";number2_OUT<="1111";
ELSIF CONT = 1 THEN number1_OUT<=number1_IN_1;number2_OUT<=number1_IN_2;
ELSIF CONT = 2 THEN number1_OUT<=number2_IN_1;number2_OUT<=number2_IN_2;
ELSIF CONT = 3 THEN number1_OUT<=number3_IN_1;number2_OUT<=number3_IN_2;
END IF;
ELSE number1_OUT<="0000";number2_OUT<="0000";
END IF;
END PROCESS;PROCESS(CLK_10) --3*2个数码管输出值赋值--
BEGIN
IF OP ='1'THEN
IF CONT = 1 THEN
number1_IN_1<=number1;number1_IN_2<=number2;
END IF;
ELSE number1_IN_1<="0000";number1_IN_2<="0000";
END IF;
END PROCESS;
PROCESS(CLK_10)
BEGIN
IF OP ='1'THEN
IF CONT = 2 THEN
number2_IN_1<=number3;number2_IN_2<=number4;
END IF;
ELSE number2_IN_1<="0000";number2_IN_2<="0000";
END IF;
END PROCESS;
PROCESS(CLK_10)
BEGIN
IF OP ='1'THEN
IF CONT = 3 THEN
number3_IN_1<=number5;number3_IN_2<=number6;
END IF;
ELSE number3_IN_1<="0000";number3_IN_2<="0000";
END IF;
END PROCESS;p1: PROCESS(CLK)--三个分频器--
BEGIN
IF CLK'EVENT AND CLK = '1'THENIF TMP_3 = 12499999 THEN TMP_3 <= 0;CLK_5 <= NOT CLK_5;ELSE TMP_3 <= TMP_3 + 1;END IF;
END IF;
END PROCESS p1;p2:process(clk)beginif clk'event and clk='1'thenif tmp=24999 thentmp<=0;clktmp<=not clktmp;elsetmp<=tmp + 1;end if;else null;end if;end process p2;
clk_out<=clktmp;p3: PROCESS(CLK_10)
BEGIN
IF CLK_10'event and CLK_10 = '1' THENIF NUM_3 = 7 THEN NUM_3 <= 0;ELSE NUM_3 <= NUM_3 + 1;END IF;
END IF;
END PROCESS p3;PROCESS(CLK_10) --2个数码管的显示扫描--
BEGIN
IF CLK_10'event and CLK_10 = '1' THENIF NUM_4 = 1 THEN NUM_4 <= 0;ELSE NUM_4 <= NUM_4 + 1;END IF;
END IF;
END PROCESS;PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1'THENIF TMP_1 = 49999 THEN TMP_1 <= 0;CLK_10 <= NOT CLK_10;ELSE TMP_1 <= TMP_1 + 1;END IF;
END IF;
END PROCESS;p00:process(CLK_10)--4个button的消抖--beginif(CLK_10'event and CLK_10 = '0') thenresetmp10 <= resetmp9;resetmp9 <= BTN0;end if;end process p00;
BTN0_I <= CLK_10 AND resetmp9 AND (NOT resetmp10);p01: process(CLK_10)beginif(CLK_10'event and CLK_10 = '0') thenresetmp8 <= resetmp7;resetmp7 <= BTN1;end if;end process p01;
BTN1_I <= CLK_10 AND resetmp7 AND (NOT resetmp8);p02:process(CLK_10)beginif(CLK_10'event and CLK_10 = '0') thenresetmp6 <= resetmp5;resetmp5 <= BTN2;end if;end process p02;
BTN2_I <= CLK_10 AND resetmp5 AND (NOT resetmp6);p03:process(CLK_10)beginif(CLK_10'event and CLK_10 = '0') thenresetmp4 <= resetmp3;resetmp3 <= BTN3;end if;end process p03;
BTN3_I <= CLK_10 AND resetmp3 AND (NOT resetmp4);process(clk) --设定键button1--
begin
IF OP = '1'THEN
IF BTN1_I'EVENT AND BTN1_I='1'THENIF CONT= 3 THEN CONT<=0;ELSE CONT<=CONT+1;END IF;
END IF;
ELSIF OP = '0'THEN CONT<=0;
END IF;
END PROCESS;-- button3 --
process(clk)
beginif OC=1 and feeding_medicine='1' thenIF BTN3_I'EVENT AND BTN3_I='1'THEN    feeding_medicine0<='1';END IF;elsefeeding_medicine0<='0';end if;
end process;PROCESS(clk) --工作时时间判断--
BEGIN--IF OP ='1'THEN
IF COC = 1 THEN
CONT_1<=0;
ELSE
IF OC=0 THEN
CONT_1<=CONT;
ELSE
if OC=1 thenif number1_IN_1=comb_2 and number1_IN_2=comb_1  thenFMQ<=clk_10;cont_1<=1;position<=1;feeding_medicine<='1';elsif number2_IN_1=comb_2 and number2_IN_2=comb_1 thenFMQ<=clk_10;cont_1<=2;position<=2;feeding_medicine<='1';elsif number3_IN_1=comb_2 and number3_IN_2=comb_1 thenFMQ<=clk_10;cont_1<=3;position<=3;feeding_medicine<='1';
--  else  null;
else--position<=position;IF BTN3_I'EVENT AND BTN3_I='1'THEN feeding_medicine<='0';    END IF;if feeding_medicine='1'  thenif position=1 thencont_1<=1;FMQ<=clk_10;        elsif position=2 thencont_1<=2;FMQ<=clk_10;        elsif position=3 thencont_1<=3;FMQ<=clk_10;else cont_1<=0;end if;
elsecont_1<=0;
end if;end if;ELSE NULL;
end if;
END IF;
END IF;
--ELSE CONT_1<=0;
--END IF;
end process;process(clk)
begin
IF OP = '1'THEN
IF BTN2_I'EVENT AND BTN2_I='1'THEN
IF OC=1 THEN OC<=0;
ELSE OC<=OC+1;
END IF;
END IF;
ELSE OC<=0;
END IF;
end process;PROCESS(CLK_10) --点阵闪烁--
BEGIN
IF OP = '1'THEN
CASE CONT_1 ISWHEN 0 =>CASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;WHEN 1 =>IF CLK_5='1'THENCASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;ELSE CASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "00000011";GRN_OUT<="00011011";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "00000011";GRN_OUT<="00011011";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;END IF;WHEN 2 =>IF CLK_5='1'THENCASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;ELSE CASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "11000011";GRN_OUT<="00000011";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "11000011";GRN_OUT<="00000011";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;END IF;WHEN 3 =>IF CLK_5='1'THENCASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "11000011";GRN_OUT<="00011011";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;ELSE CASE NUM_3 ISWHEN 0 => ROW_OUT <= "01111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 1 => ROW_OUT <= "10111111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 2 => ROW_OUT <= "11011111";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 3 => ROW_OUT <= "11101111";RED_OUT <= "11000000";GRN_OUT<="00011000";WHEN 4 => ROW_OUT <= "11110111";RED_OUT <= "11000000";GRN_OUT<="00011000";WHEN 5 => ROW_OUT <= "11111011";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 6 => ROW_OUT <= "11111101";RED_OUT <= "00000000";GRN_OUT<="00000000";WHEN 7 => ROW_OUT <= "11111110";RED_OUT <= "00000000";GRN_OUT<="00000000";END CASE;END IF;
END CASE;
ELSE ROW_OUT <= "11111111";RED_OUT <= "00000000";GRN_OUT<="00000000";
END IF;
END PROCESS;process(clk_out) --键盘扫描--beginif (clk_out'event and clk_out='1')thenif scan="11" then scan<="00";else scan<=scan+1;end if;elsenull;end if;case scan(1 downto 0) iswhen "00"=>col0<="0111";      when "01"=>col0<="1011";when "10"=>col0<="1101";when "11"=>col0<="1110";end case;end process;
btn_row<=col0;process(clk_out,row0,col0) --小键盘输入和消抖--
beginif (clk_out'event and clk_out='1')thencase col0 iswhen "1110"=>case row0 iswhen "0111"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0001";deshake1<=0;change<=1;--1else null;end if;when "1011"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0100";deshake1<=0;change<=1;--4else null;end if;when "1101"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0111";deshake1<=0;change<=1;--7else null;end if;when others=> null;end case;when "1101"=>case row0 iswhen "0111"=>    if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0010";deshake1<=0;change<=1;--2else null;end if;when "1011"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0101";deshake1<=0;change<=1;--5else null;end if;when "1101"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="1000";deshake1<=0;change<=1;--8else null;end if;when "1110"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0000";deshake1<=0;change<=1;--0else null;end if;              when others=> null;end case;when "1011"=>case row0 iswhen "0111"=>  if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0011";deshake1<=0;change<=1;--3else null;end if;when "1011"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="0110";deshake1<=0;change<=1;--6else null;end if;when "1101"=>   if deshake1=99 then deshake1<=99;else deshake1<=deshake1+1;end if;if deshake1>66 then number<="1001";deshake1<=0;change<=1;--9else null;end if;when others=> null;end case;when others=> null;end case;else null;end if;if cont=1 and oc=0 and op='1' and switch1='1' and change=1 then number1<=number;change<=0;elsif cont=1 and oc=0 and op='1' and switch1='0' and change=1 then number2<=number;change<=0;elsif cont=2 and oc=0 and op='1' and switch1='1' and change=1 then number3<=number;change<=0;elsif cont=2 and oc=0 and op='1' and switch1='0' and change=1 then number4<=number;change<=0;elsif cont=3 and oc=0 and op='1' and switch1='1' and change=1 then number5<=number;change<=0;elsif cont=3 and oc=0 and op='1' and switch1='0' and change=1 then number6<=number;change<=0;--elsif op = '0'then number1<="0000";number2<="0000";number3<="0000";number4<="0000";number5<="0000";number6<="0000";end if;IF OP = '0'THENnumber1<="0000";number2<="0000";number3<="0000";number4<="0000";number5<="0000";number6<="0000";END IF;end process;process(CLK_10) --数码管显示--
begin
IF OP='1'THENIF CLK_10'EVENT AND CLK_10='1'THENcase NUM_4 iswhen 0 => case number1_OUT_O iswhen "0000" =>disp_seg<="1111110";disp_cat<="11111101";--abcdefgwhen "0001" =>disp_seg<="0110000";disp_cat<="11111101";when "0010" =>disp_seg<="1101101";disp_cat<="11111101";when "0011" =>disp_seg<="1111001";disp_cat<="11111101";when "0100" =>disp_seg<="0110011";disp_cat<="11111101";when "0101" =>disp_seg<="1011011";disp_cat<="11111101";when "0110" =>disp_seg<="1011111";disp_cat<="11111101";when "0111" =>disp_seg<="1110000";disp_cat<="11111101";when "1000" =>disp_seg<="1111111";disp_cat<="11111101";when "1001" =>disp_seg<="1111011";disp_cat<="11111101";when others=>disp_seg<="0000000";disp_cat<="11111111";end case;when 1 =>case number2_OUT_O iswhen "0000" =>disp_seg<="1111110";disp_cat<="11111110";--abcdefgwhen "0001" =>disp_seg<="0110000";disp_cat<="11111110";when "0010" =>disp_seg<="1101101";disp_cat<="11111110";when "0011" =>disp_seg<="1111001";disp_cat<="11111110";when "0100" =>disp_seg<="0110011";disp_cat<="11111110";when "0101" =>disp_seg<="1011011";disp_cat<="11111110";when "0110" =>disp_seg<="1011111";disp_cat<="11111110";when "0111" =>disp_seg<="1110000";disp_cat<="11111110";when "1000" =>disp_seg<="1111111";disp_cat<="11111110";when "1001" =>disp_seg<="1111011";disp_cat<="11111110";when others=>disp_seg<="0000000";disp_cat<="11111111";--debugend case;when others=>disp_seg<="0000000";disp_cat<="11111111";end case;END IF;ELSE disp_seg<="0000000";disp_cat<="11111111";END IF;
end process;PROCESS(CLK_60) --60秒计时分频--
BEGIN
IF OP = '1'THEN
IF OC=1 THEN
IF CLK_60'event and CLK_60 = '1' THENIF NUM_2 = 59 THEN NUM_2 <= 0;ELSE NUM_2 <= NUM_2 + 1;END IF;
END IF;
ELSIF OC=0 THEN NUM_2<=0;
END IF;
ELSE NUM_2<=0;
END IF;
END PROCESS;PROCESS(CLK_60,NUM_2) --60秒计时显示转换--
BEGIN
IF CLK_60'EVENT AND CLK_60 = '1'THEN
CASE NUM_2 IS
WHEN 0=> COMB_1 <= "0000";COMB_2 <= "0000";
WHEN 1=> COMB_1 <= "0001";COMB_2 <= "0000";
WHEN 2=> COMB_1 <= "0010";COMB_2 <= "0000";
WHEN 3=> COMB_1 <= "0011";COMB_2 <= "0000";
WHEN 4=> COMB_1 <= "0100";COMB_2 <= "0000";
WHEN 5=> COMB_1 <= "0101";COMB_2 <= "0000";
WHEN 6=> COMB_1 <= "0110";COMB_2 <= "0000";
WHEN 7=> COMB_1 <= "0111";COMB_2 <= "0000";
WHEN 8=> COMB_1 <= "1000";COMB_2 <= "0000";
WHEN 9=> COMB_1 <= "1001";COMB_2 <= "0000";
WHEN 10=> COMB_1 <= "0000";COMB_2 <= "0001";
WHEN 11=> COMB_1 <= "0001";COMB_2 <= "0001";
WHEN 12=> COMB_1 <= "0010";COMB_2 <= "0001";
WHEN 13=> COMB_1 <= "0011";COMB_2 <= "0001";
WHEN 14=> COMB_1 <= "0100";COMB_2 <= "0001";
WHEN 15=> COMB_1 <= "0101";COMB_2 <= "0001";
WHEN 16=> COMB_1 <= "0110";COMB_2 <= "0001";
WHEN 17=> COMB_1 <= "0111";COMB_2 <= "0001";
WHEN 18=> COMB_1 <= "1000";COMB_2 <= "0001";
WHEN 19=> COMB_1 <= "1001";COMB_2 <= "0001";
WHEN 20=> COMB_1 <= "0000";COMB_2 <= "0010";
WHEN 21=> COMB_1 <= "0001";COMB_2 <= "0010";
WHEN 22=> COMB_1 <= "0010";COMB_2 <= "0010";
WHEN 23=> COMB_1 <= "0011";COMB_2 <= "0010";
WHEN 24=> COMB_1 <= "0100";COMB_2 <= "0010";
WHEN 25=> COMB_1 <= "0101";COMB_2 <= "0010";
WHEN 26=> COMB_1 <= "0110";COMB_2 <= "0010";
WHEN 27=> COMB_1 <= "0111";COMB_2 <= "0010";
WHEN 28=> COMB_1 <= "1000";COMB_2 <= "0010";
WHEN 29=> COMB_1 <= "1001";COMB_2 <= "0010";
WHEN 30=> COMB_1 <= "0000";COMB_2 <= "0011";
WHEN 31=> COMB_1 <= "0001";COMB_2 <= "0011";
WHEN 32=> COMB_1 <= "0010";COMB_2 <= "0011";
WHEN 33=> COMB_1 <= "0011";COMB_2 <= "0011";
WHEN 34=> COMB_1 <= "0100";COMB_2 <= "0011";
WHEN 35=> COMB_1 <= "0101";COMB_2 <= "0011";
WHEN 36=> COMB_1 <= "0110";COMB_2 <= "0011";
WHEN 37=> COMB_1 <= "0111";COMB_2 <= "0011";
WHEN 38=> COMB_1 <= "1000";COMB_2 <= "0011";
WHEN 39=> COMB_1 <= "1001";COMB_2 <= "0011";
WHEN 40=> COMB_1 <= "0000";COMB_2 <= "0100";
WHEN 41=> COMB_1 <= "0001";COMB_2 <= "0100";
WHEN 42=> COMB_1 <= "0010";COMB_2 <= "0100";
WHEN 43=> COMB_1 <= "0011";COMB_2 <= "0100";
WHEN 44=> COMB_1 <= "0100";COMB_2 <= "0100";
WHEN 45=> COMB_1 <= "0101";COMB_2 <= "0100";
WHEN 46=> COMB_1 <= "0110";COMB_2 <= "0100";
WHEN 47=> COMB_1 <= "0111";COMB_2 <= "0100";
WHEN 48=> COMB_1 <= "1000";COMB_2 <= "0100";
WHEN 49=> COMB_1 <= "1001";COMB_2 <= "0100";
WHEN 50=> COMB_1 <= "0000";COMB_2 <= "0101";
WHEN 51=> COMB_1 <= "0001";COMB_2 <= "0101";
WHEN 52=> COMB_1 <= "0010";COMB_2 <= "0101";
WHEN 53=> COMB_1 <= "0011";COMB_2 <= "0101";
WHEN 54=> COMB_1 <= "0100";COMB_2 <= "0101";
WHEN 55=> COMB_1 <= "0101";COMB_2 <= "0101";
WHEN 56=> COMB_1 <= "0110";COMB_2 <= "0101";
WHEN 57=> COMB_1 <= "0111";COMB_2 <= "0101";
WHEN 58=> COMB_1 <= "1000";COMB_2 <= "0101";
WHEN 59=> COMB_1 <= "1001";COMB_2 <= "0101";END CASE;
END IF;
END PROCESS;END;

三、其他操作

在写入代码以后还需要进行引脚分配以及烧录等操作,这些就不必赘述了,大家一定可以自行完成的啦。

四、总结

最后,谢谢大家的阅读与支持了啦,谢谢大家的支持。

VHDL实现智能药盒相关推荐

  1. 【Verilog智能药盒的设计与实现】

    该可编程器件实验板是以 Altera 公司的 MAX II 系列可编程器件 EPM1270T144C5 为核心芯片,是一款具有多种外部接口和显示器件的通用数字电路实验平台.选用1kHz. 一. 设计课 ...

  2. 嵌入式单片机智能药盒设计(含代码)

    目录 前言 设计的内容 (1)显示 (2)定时时间与用药量的设定 (3)实时时间调节 (4)报警功能 时钟模块 蓝牙模块 系统软件设计 系统主程序 按键函数 中断服务函数 作品展示 测试药定时提醒功能 ...

  3. 基于stm32的智能药盒

    提示:记录毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 二.框架思路 三.硬件及代码 四.相关功能介绍 五.交流联系 六.喜欢请点赞哦! 前言 基于STM32的 ...

  4. 特别提醒蓝牙语音智能药盒的设计思路(二)TTS技术应用篇,附手机小程序界面

    全文3000字,阅读时间约8分钟,建议收藏后慢慢看 目录 引言 蓝牙TTS智能药盒方案系统图 智能药盒是什么 智能药盒为什么需要语音提醒 语音提醒功能为什么要用TTS技术 TTS语音提醒的应用场景 1 ...

  5. 基于STM32F103单片机的智能药盒喂食器智能插座系统

    硬件电路的设计 (末尾附文件) (一)系统功能设计 STM32单片机智能蓝牙APP定时开关插座喂食器药盒50 本系统由STM32F103C8T6单片机核心板.蓝牙模块.蜂鸣器驱动.LCD1602液晶显 ...

  6. Arduino之个人健康助理——简易智能药盒系列2

    OLED显示 1.所需硬件 脉搏传感器 OLED模块 Arduino主板 2.连接方式 脉搏传感器与主板连接 s - A0 +- 5V -- GND OLED模块与主板连接 GND-GND VCC-3 ...

  7. 上海市智慧养老解决方案,适应新要求的新导智能

    ​ 为进一步增强广大老年人的获得感.满足感,去年下半年来,市民政局从应用场景出发,根据老年人.养老服务机构和街镇社区等多方面的需求,梳理形成了首批12个智慧养老应用场景需求,涵盖安全防护(6个).照护 ...

  8. 8个经典物联网 智能硬件开源项目

    本文整理了2016年度,最经典的 10 个物联网开源项目.含工业应用.智慧家居.智能家电等种类,以供参考. 1.智能温控器,写字楼.工厂节能利器 说明 控制中央空调风机盘管的通断阀,风机高中低转速. ...

  9. 【有奖活动】机智云智能硬件创新大赛

    战争主题:机智云智能硬件创新大赛 不论你是"攻城狮",还是"程序猿" 只要你有创意,能写代码,这里就有你的"江湖" 有 Gokit .有 5 ...

最新文章

  1. git 删除tag_git使用教程9pycharm 使用 tag 打标签
  2. selenium java封装_selenium2.0的初步封装(java版本)
  3. 使用JSON Viewer直观查看JSON数据
  4. C# 使用Microsoft.Reporting打印票据
  5. python安装setup.py命令_python安装模块如何通过setup.py安装(超简单)
  6. Android 原生插件开发步骤
  7. cad断点快捷键_CAD命令:打断(BREAK)命令的使用技巧
  8. 大数据分析师岗位是青春饭
  9. nfc门禁卡的复制和迁移
  10. Python爬取百度翻译及有道翻译
  11. java 打印菱形和空心菱形
  12. 重新渲染echarts图形
  13. 国内的多语言网站主要体现在哪几方面
  14. 如何干净地清除电脑中的木马病毒
  15. 如何解决Linux乱码问题
  16. OKHTTP学习之高级特性
  17. 超越货币、经济和市场的公正应用
  18. python 日程管理程序_日程管理软件走马观花
  19. Windows 也有包管理工具?
  20. GOTS认证咨询,GOTS是实现纺织品标签协调化和透明化的一个重要措施

热门文章

  1. amoled led 排列_为何AMOLED屏幕不用RGB排列?
  2. 无法部署应用目录 [D:\Tomcat\apache-tomcat-9.0.44\webapps\ROOT]java.lang.IllegalStateException: 启动子级时出错
  3. 疯狂的麦克斯java游戏_疯狂的麦克斯 MAD MAX中文游戏介绍_游戏库_巴士单机游戏...
  4. ubuntu和windos 局域网NTP配置时间同步设置方法
  5. 小程序广告主和流量主相关
  6. vue3.0+ts+element-plus多页签应用模板:多级路由缓存
  7. 公众号如何靠互推涨粉
  8. 好用的云笔记具备哪些特点,这3款云笔记亲测好用
  9. [洛谷P1856] [USACO5.5]矩形周长Picture
  10. TeaTalk·Online 大数据+云原生,再度风云起