数电实验自动售邮票
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计一个自动售邮票的控制电路
1.设计任务
用两个发光二极管分别模拟售出面值为6角和8角的邮票,购买者可以通过开关选择一种面值的邮票,灯亮时表示邮票售出。用开关分别模拟1角,5角和1元硬币投入,用发光二极管分别代表找回剩余的硬币。
要求:每次只能售出一枚邮票,当所投硬币达到或超过购买者所选面值时,售出一枚邮票,并找回剩余的硬币,回到初始状态;当所投硬币面值不足面值时,可以通过一个复位键退回所投硬币,回到初始状态。
总体框图如图9-7所示。
2.模块及模块功能
模块SOLDA如图9-8所示。
该模块实现出售邮票的逻辑功能。M1,M5,M10分别表示投入1角,5角,1元钱,T6,T8分别表示要购买6角,8角的邮票,S6,S8分别表示售出6角,8角的邮票,CH表示找回的钱。
图9-7 总体框图
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity solda is
port(m1,m5,m10:in std_logic;
t6,t8:in std_logic;
reset:in std_logic;
clk:in std_logic;
s6,s8:out std_logic;
ch:out std_logic_vector(4 downto 0));
end solda; 图9-8
architecture sold_arc of solda is
begin
process(clk,m1,m5,m10,t6,t8,reset)
variable money:std_logic_vector(4 downto 0);
variable a:std_logic;
variable cnt:integer range 0 to 60;
begin
if clk'event and clk='1'then
if a='1'then
if m1='0'then
money:=money+1;
elsif m5='0'then
money:=money+5;
elsif m10='0'then
money:=money+10;
elsif reset='0'then
ch<=money;
a:='0';
elsif t6='0' and money>5 then
ch<=money-6;
s6<='1';
a:='0';
elsif t8='0' and money>7 then
ch<=money-8;
s8<='1';
a:='0';
end if;
else
if cnt<60 then
cnt:=cnt+1;
else
cnt:=0;
money:="00000";
s6<='0';
s8<='0';
ch<="00000";
a:='1';
end if;
end if;
end if;
end process;
end sold_arc;
模块ciao如图9-9所示。
此模块为同步消抖动模块,它的输入输出均为负脉冲。功能扩展:
1.投币可以累积到10元,超过10元时发出报警;
2. 可以累计投币、累计买票;
3. 按结束按钮,自动进行结算找零。