自动售报机设计一设计题目:自动售报机设计FPGA模块模拟自动售报机的工作过程,要求如下(1)售报机有两个进币孔,可以输入硬币和纸币,售报机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5角和1元的硬币,纸币的识别范围是1元、5元,10元,20元,50元,100元。顾客可以连续多次投入钱币。(2)顾客可以选择的报纸种类有3种,价格分别为1-3元,顾客可以通过输入报纸的编号来实现报纸的选择。即有一个小键盘(0-9按键)来完成,比如输入3时要先输入0,再输入3。(3)顾客选择完报纸后,可以选择需要的数量。然后可以继续选择报纸及其数量,每次可以选择最多三个报纸。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售报机出报,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。二、程序实现功能:FPGA模块模拟自动售货机:(1)售报机有两个进币孔,分别输入硬币和纸币,硬币的识别范围是5角和1元的硬币,纸币的识别范围是1元、5元,10元,20元,50元,100元。顾客可以连续多次投入钱币。(2)顾客可以选择的报纸种类有3种,价格分别为1-3元,顾客可以通过输入报纸的编号来实现报纸的选择。(3)顾客选择完报纸后,可以选择需要的数量。然后可以继续选择报纸及其数量,每种商品最多购买三份。然后显示出所需金额。顾客此时可以投币,并且显示已经投币的总币值。当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。三、程序功能模块分析:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;实体说明:entitysellorisport(clk:instd_logic;--系统时钟sel,cancel,reset:instd_logic;--选择、取消、开始(用于进入初始状态)变量定义:coin:instd_logic_vector(1downto0);--5角硬币、1元硬币crash:instd_logic_vector(5downto0);--100元、50元、20元、10元、5元、一元纸币item:instd_logic_vector(3downto0);--3种报纸quantity:instd_logic_vector(1downto0);--报纸数量(一次最多购买3件)change_out:outstd_logic_vector(10downto0);--找零item_out:outstd_logic_vector(3downto0);--是否购买了报纸(1表示有报纸出来、0表示没有报纸出来)change:outstd_logic);--是否有找零endsellor;结构体说明:architecturebehaveofsellorissignalprice:std_logic_vector(7downto0);signalcounter:std_logic_vector(10downto0);--币数计数器signaltotal_price:std_logic_vector(10downto0);--控制系统的时钟信号typestate_typeis(initial_state,item1_state,quantity_state,money_state,sell_state,change_state);signalstate:state_type;signaltemp:std_logic_vector(1downto0);signalquan:std_logic_vector(3downto0);begincom:process(reset,sel,clk)beginif(clk'eventandclk='1')thenifreset='1'thenstate=initial_state;temp=00;quan=0000;endif;casestateiswheninitial_state=item_out=0000;--出票口关闭change_out=00000000000;--找零口关闭total_price=00000000000;--票价总额记录清零counter=00000000000;--投入钱币总额记录清零change='0';state=item1_state;设定initial_state选择物品程序:whenitem1_state=iftemp11thenelsestate=money_state;endif;whenquantity_state=if(cancel='1')then--按下“取消”按钮state=initial_state;else取消操作程序ifquantity=00thenitem_out=0000;change='0';change_out=00000000000;state=initial_state;else当选择0个报纸total_price=total_price+price*quantity;temp=temp+1;quan=quan+quantity;if(sel='1')thenstate=item1_state;elsestate=money_state;endif;endif;endif;货币识别:whenmoney_state=if(cancel='1')then--按下“取消”按钮state=initial_state;endif;casecrashis--纸币识别endcase;casecoinis--硬币识别endcase;ifcounter=total_pricethenstate=sell_state;--系统进入出票状态endif;购物操作程序:whensell_state=if(cancel='1')thenitem_out=0000;change='1';change_out=counter;--按下“取消”按钮state=initial_state;elseifcounter=total_pricethenitem_out=quan;--判断是否还有找零state=change_state;--系统进入找零状态elseitem_out=0000;state=initial_state;endif;endif;whenchange_state=if(cancel='1')thenitem_out=0000;change='1';change_out=counter;--按下“取消”按钮state=initial_state;elseifcountertotal_pricethenchange='1';change_out=counter-total_price;item_out=quan;elsechange='0';change_out=00000000000;state=initial_state;endif;endif;endcase;endif;endprocess;endbehave;四、仿真波形自动售报机设计学校:铜仁学院系别:物电系班级:09级应用物理姓名:李志军学号:2009053011指导老师:冉耀宗2012年6月