基于VHDL编程FPGA的地铁自动售票机

更新时间:2023-09-22 13:12:01 阅读量: 经管营销 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

地铁自动售票机

一、设计要求

1、功能描述

用于模仿地铁售票自动售票,完成地铁售票的核心控制功能。

2、功能要求

售票机有两个进币孔,一个是输入硬币,识别的范围是一元硬币;一个是纸币,识别的范围是一元、两元、五元、十元、二十元。乘客可以连续多次投入钱币。乘客 一次只能选择一个出站口,购买车票时,乘客先选出站口,有六个出站口可供选择,再选择所需的票数,然后投币,投入的钱币达到或者超过所需金额时,售票机自 动出票,并找零。本次交易结束后,等待下一次交易。在选择出站口、所需票数以及在投币期间,乘客可以按取消键取消操作,钱币自动退出。

二、实验分析

1、 买票时,乘客按下开始键,售票机进入站台选择程序,乘客选择出站口后,可以按取消键重新选择,否则售票机自动进入票数选择程序,同样这时可以按下取消键重新开始选择出站口以及票数。

2、 当选择好出站口以及所需票数时,乘客可以投硬币或者用纸币,当所投的钱币总额大于或者等于票价时,售票机自动出票以及找零。期间,可以按下取消键重新开始选择,并退出所有的钱币。

3、 乘客若还没选择出站口或者票数,就投币或者使用纸币,售票机会自动退出所有的钱币。

4、 有六个站台可供乘客选择,每个乘客最多可以买3张票,六个站台编号为1到6,票价从2元依次递增到7。

三、系统流程图

四、程序源代码

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_arith.ALL; USE IEEE.std_logic_unsigned.ALL; ENTITY metrosell IS PORT(

clk:in std_logic; startselect:in std_logic; sure:in std_logic; save your forward step(s)

coin1y:in std_logic; pmoney1y:in std_logic; pmoney2y:in std_logic; pmoney5y:in std_logic; pmoney10y:in std_logic; money

pmoney20y:in std_logic; money

cancel:in std_logic; number:in std_logic_vector(3 downto 0); the tickets

platform:in std_logic_vector(3 downto 0); want to reach

moneystorage:out std_logic; acceptmo:out std_logic; stamp:out std_logic; --set the clock signal --start to select the platform --this button is to --1 yuan coin

--1 yuan paper money --2 yuan paper money --5 yuan paper money --10 yuan paper --20 yuan paper --cancel the forward step(s) --choose the number of --choose the platform you --to store the money --accept the money --stamp outgate

charge:out std_logic_vector(3 downto 0); --the mount of charge,up to 15 yuan

chargegate:out std_logic --charge outgate ); END metrosell;

ARCHITECTURE sell OF metrosell IS

type state_type is

(initial_type,selectp_type,selectnum_type,insert_type,stamp_type,charge_type); --define six types

signal state:state_type; --define a shared state BEGIN

main:process(clk,state,startselect,platform,number,coin1y,pmoney1y,pmoney2y,pmoney5y,pmoney10y,pmoney20y,cancel,sure)

variable univalence :integer range 0 to 7; --the univalence of the ticket variable total_money :integer range 0 to 21; --the price of the ticket(s) variable selectp_alr:std_logic; --the flag of select platform type

variable selectnum_alr:std_logic; --the flag of select number type

variable stamp_alr:std_logic; --the flag of the stamp gate variable charge_alr:std_logic; --the flag of the charge gate

variable money_reg:integer range 0 to 21; --the mount of money put in variable coin1y_f:std_logic; --the flag of one yuan coin variable pmoney1y_f:std_logic; --the flag of one yuan paper money

variable pmoney2y_f:std_logic; --the flag of two yuan paper money

variable pmoney10y_f:std_logic; --the flag of ten yuan paper money

variable pmoney20y_f:std_logic; --the flag of twelve yuan paper money

variable pmoney5y_f:std_logic; --the flag of five yuan paper money

variable charge_reg:integer range 0 to 15; begin

if(rising_edge(clk)) then case state is

when initial_type => variables

univalence:=0; selectp_alr:='0'; selectnum_alr:='0'; stamp_alr:='0'; charge_alr:='0'; money_reg:=0; total_money:=0; coin1y_f:='0'; pmoney1y_f:='0'; pmoney2y_f:='0'; pmoney5y_f:='0';

--the register of charge --initialize some pmoney10y_f:='0'; pmoney20y_f:='0'; moneystorage<='0'; stamp<='0'; charge_reg:=0; charge<=\ acceptmo<='0'; chargegate<='0'; if (startselect='1') then state<=selectp_type; end if; when selectp_type =>

if(selectp_alr='0'and cancel='0') then --choose the platform if(platform=\ elsif(platform=\ elsif(platform=\ elsif(platform=\ elsif(platform=\ elsif(platform=\ elsif(platform=\ else null; end if;

elsif(selectp_alr='1'and cancel='1')then state<=initial_type; elsif(selectp_alr='1'and sure='1') then state<=selectnum_type;

end process main; END sell;

五、波形仿真

1、乘客按下开始按钮,进入选站台模式,选择二号站台,按下确定键,再选择票数为2张,按下确定键,售票机钱箱关闭,投入一张两元和五元纸币(对顺序没有要求),此时钱币总额大于票价,出两张票并找零一元。之后系统进入初始化状态。具体仿真如图 1 仿真1

图 1 仿真1

2、测试cancel键,当乘客按正确的操作完成选站台时,按下取消键,再重新选择,如图 2 cancel仿真,仿真波形如下。

图 2 cancel仿真

3、还是测试cancel键,当乘客选择好票数时,按下cancel键,然后重新选择两张单价为七块钱的六号站台票,投入一张20元和5元,找零六元。仿真波形如图 3 cancel仿真2

图 3 cancel仿真2

4、乘客选择五号站台,两张票,然后先后投入一元纸币,两元纸币,一元纸币,五元纸币,然后按下取消键,售票机自动放出所有的钱币。仿真如图 4 cancel仿真3。

图 4 cancel仿真3

六、心得体会

在我的设计中,有一个moneystorage信号量用于控制储存钱币箱的开与关,这个设计主要考虑到当乘客要求退币时,最好不是从售票机中取出投入的钱数,然

后退还,设置了这个开关,就可以在按下取消键时,直接从储存钱币箱中退出钱币。

还有,乘客选择的站台以及票数,在售票机内部会自动将这两个信号传给出票系统,从而自动出票,以上写的程序只是让系统知道怎样收钱以及找零。 这次实验总体上来说比六人抢答器简单,但是因为这个售票机完全是自己写的,所以也不是想象中的那么简单。这也让我看出,要完全自己去做一件东西不是简单的,特别是要考虑很全面,还是要发一些时间的。

本文来源:https://www.bwwdw.com/article/9tyd.html

微信扫码分享

《基于VHDL编程FPGA的地铁自动售票机.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top