采用三段式的方法写一个自动售卖机,功能如下:
共有三种纸币入口,分别支持10元,20元,50元。货物售价80元。需要支持找钱功能(注意,找钱有两种情况,90元和100元;110元和120元的情况不符合实际应用场景,所以不存在找钱的情况。)带有用七段式数码显示管显示当前总金额的功能。
七段数码管原理图如下:
七段数码显示管代码:简单模块通过case实现,无需多言。
FSM状态转换关系如下:摩尔型状态机
设计思想:
采用三段式,第一段同步时序逻辑,描述状态转换关系。第二段采用组合逻辑判断状态转移条件,第三段描述状态的输出。
代码如下:
简单的测试代码:
结果波形:
如波形所示,投入一枚50元,十位显示管显示5,个位百位均显示0,再次投入50,显示管显示100,同时出货,并找零20,下个状态归零。投入4个20元,显示管20,40,60,80,出货,不找零。再投50元和两个20元,显示管依次50,70,90并找零10元。之后投入20,10,50,显示管20,30,80,出货不找零。功能正常。