📄 自动售货机源程序.txt
字号:
自动售货机源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity autoseller is
port( clk,reset :in std_logic;
ci1,ci2,ci3 :in std_logic;
choice1,choice2,choice3 :in std_logic;
OK,cancel,chanton :in std_logic;
Digitube1,Digitube2 :out std_logic_vector(3 downto 0);
LED1,LED2,LED3,LED4,LED5,LED6 :out std_logic
);
end autoseller;
architecture behave of autoseller is
type state_type is(wait_state,input_state,drink_state,charge_state);
signal state :state_type;
begin
process(clk,reset)
variable addset :std_logic;
variable sum1,sum2,price1,price2 :std_logic_vector(3 downto 0);
begin
if(reset='0')then
sum1:="0000";sum2:="0000";
price1:="0000";price2:="0000";
addset:='1';
state<=wait_state;
LED1<='0';LED2<='0';LED3<='0';LED4<='0';LED5<='0';LED6<='0';
digitube1<=sum1;digitube2<=sum2;
elsif(clk'EVENT and clk='1')then
case state is
when wait_state =>
price1:="0000";price2:="0000";
digitube1<=sum1;digitube2<=sum2;
LED3<='0';LED4<='0';LED5<='0';LED6<='0';
if(choice3='1')then
LED1<='1'; LED2<='1';
state<=input_state; addset:='1';
price1:="0010";price2:="0000";
end if;
if(choice2='1')then
LED1<='1';LED2<='0';
state<=input_state;addset:='1';
price1:="0001";price2:="0101";
end if;
if(choice1='1')then
LED1<='0';LED2<='1';
state<=input_state;addset:='1';
price1:="0001";price2:="0000";
end if;
when input_state =>
if(addset='1')then
if(ci1='1')then
sum2:=sum2+1;LED6<='0';
end if;
if(ci2='1')then
sum2:=sum2+5;LED6<='0';
end if;
if(ci3='1')then
sum1:=sum1+1;LED6<='0';
end if;
if(sum2>9)then
sum1:=sum1+1;sum2:=sum2+6;
end if;
end if;
if(sum1>price1 or ((sum1=price1)and(sum2>=price2)))then
addset:='0';
LED3<='1';
end if;
if(OK='1') then
LED3<='0';
if(sum1>=price1 and sum2>=price2)then
state<=drink_state;LED4<='1';addset:='1';
else LED6<='1';
end if;
end if;
if(cancel='1') then
state<=charge_state;addset:='1';
LED1<='0';LED2<='0';LED3<='0';LED6<='0';
end if;
digitube1<=sum1;digitube2<=sum2;
when drink_state =>
LED1<='0';LED2<='0';LED3<='0';LED5<='0';LED6<='0';
if(sum1>price1 and sum2<price2)then
sum1:=sum1-1;sum2:=sum2+10;
end if;
if(state=drink_state)then
sum1:=sum1-price1;sum2:=sum2-price2;
end if;
state<=charge_state;
LED4<='0';
digitube1<=sum1;digitube2<=sum2;
when charge_state=>
LED1<='0';LED2<='0';LED3<='0';
LED4<='0';LED6<='0';
if(sum1=0 and sum2=0 )then
state<=wait_state;LED5<='0';
else state<=charge_state;
end if;
if(chanton='1')then
LED5<='1';
if(sum1>0 or sum2>0)then
if(sum1>0 )then
sum1:=sum1-1;
elsif( sum2>4 )then
sum2:=sum2-5;
elsif( sum2>0 )then
sum2:=sum2-1;
end if;
digitube1<=sum1;digitube2<=sum2;
else LED5<='0';state<=wait_state;
end if;
else LED5<='0';
end if;
end case;
end if;
end process;
end behave;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -