一、 问题描述设计一个自动售货机控制模块,信息如下:
1. 售货机可提供8种可售商品,其中01号商品(代表第一种商品),价格为2元,02商品为4元,依次类推,08号商品售价为16元。
2. 售货机可接受1元,5元和10元的纸币收入。
3. 交易开始,用户需要先投入一定量的货币;在外部货币投入后,售货机累计输入货币总值;完成投币后,用户选择所有需要的商品;选择结束后,按下交易键;交易成功,售货机出货、找零,更新系统的存量货币信息和货物信息;交易不成功,退回用户投入货币。
4. 交易不成功可能可能因为投币不足;货物不足;零钱不足等原因造成;
5. 管理员可以通过外部设备访问和修改可售商品信息和存量货币信息。
二、 功能概括
自动售货机刚初始化时,需要管理员对其剩余钱数和商品数进行管理,之后用户可以进行商品购买。用户首先选择商品,无误后对商品进行确认,否则取消,在用户选择了某种商品后,售货机会对其存货进行确认,如果该商品已经售罄,则交易失败,回到空闲状态。该商品有存货时,售货机延时一段时间(30S)留给用户进行投币,用户只能投入1,5,10元的钱币,否则售货机会将其退出。用户在延时内投币后,售货机进行找零计算,如果售货机内现金不足找零,则退出所有钱币,售货机进入管理员管理状态,此时需要管理员管理现金。正确情况下,零钱足够多,则正常找零,如果找零数额为0直接出货,找零数不为0则是先找零再出货。出于实际情况的考虑,我认为自动售货机更适合使用先选择产品,再投入钱币的方式更为合理,因此在设计时使用的是先选择确认,再延时投币的流程。自动售货机的整个管理和售货流程如下图所示:
图1 自动售货机工作流程图
三、 接口定义
表1 系统接口与描述表
名称
I/O
描述
时钟与复位
clk
I
工作时钟
init
I
交易取消信号
rst
I
初始化与复位
管理员接口
manage
I
管理使能信号
manage_money
I
管理售货机内剩余钱数
load
I
外部串口接收(暂定)
left01
I
管理第01号商品数量
left02
I
管理第02号商品数量
left03
I
管理第03号商品数量
left04
I
管理第04号商品数量
left05
I
管理第05号商品数量
left06
I
管理第06号商品数量
left07
I
管理第07号商品数量
left08
I
管理第08号商品数量
用户接口
select
I
选择商品
confirm
I
确认购买商品
money_input
I
投入钱币
change
O
得到售货机找零
out
O
得到商品
四、 电路设计
系统设计:
根据题目要求,本项目关