b地铁自动售票系统VHDLWord文档下载推荐.docx

上传人:b****5 文档编号:16134678 上传时间:2022-11-20 格式:DOCX 页数:18 大小:531.78KB
下载 相关 举报
b地铁自动售票系统VHDLWord文档下载推荐.docx_第1页
第1页 / 共18页
b地铁自动售票系统VHDLWord文档下载推荐.docx_第2页
第2页 / 共18页
b地铁自动售票系统VHDLWord文档下载推荐.docx_第3页
第3页 / 共18页
b地铁自动售票系统VHDLWord文档下载推荐.docx_第4页
第4页 / 共18页
b地铁自动售票系统VHDLWord文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

b地铁自动售票系统VHDLWord文档下载推荐.docx

《b地铁自动售票系统VHDLWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《b地铁自动售票系统VHDLWord文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

b地铁自动售票系统VHDLWord文档下载推荐.docx

票,并找出余额,本次交易结束,等待下一次的交易。

在投币期间,乘客可以按取消键取消

本次操作,钱币自动退出。

二.课题分析

1.买车票时,乘客按“开始选择”按钮,接着选择出站口接着选择购票数量(根据提示,一次购票数限制在3张以内);

然后按“开始投币”按钮,投入钱币;

当投入的钱币达到所需金额时,售票机自动出票,并找出余额。

考虑到控制整个售票机的物理体积,余额将全部采用5角硬币的形式找出。

2.选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。

选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;

投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。

3.客一次只能选择一个出站口,根据乘坐的站数确定票价。

假设乘客购票所在站到终点站共有15站。

若乘坐1-8站,则票价为2元/张;

若乘坐9-16站,则票价为4元/张。

16个站用长度位4的二进制向量编码表示,即0001表示乘坐1站,0010表示乘坐2站,依次类推,1111表示乘坐15站(到终点站)。

4.票机有2个进币端口。

硬币口可识别5角和1元2种硬币,拟用长度为2的一比特热位(one-hot)编码方式表示,即01表示5角,10表示1元。

纸币口类似,用长度为4的一比特热位编码方式表示。

乘客可以连续多次投入钱币,并且可以以任意顺序投入硬币和纸币。

5.票机设有钱币“暂存杆”,其有3个状态:

退币状态、等待状态、进币状态,分别用00、01、10表示。

退币状态下,“暂存杆”将乘客投入的钱币推出;

等待状态下,投入的钱币被“暂存杆”挡住暂存;

进币状态下,“暂存杆”将乘客投入的钱币推入售票机内部。

三、系统流程图:

四.系统状态图

五、程序源代码及注释

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysubwayis

port(

clk:

instd_logic;

--系统时钟

select_start:

--“开始选择”按钮

insert_start:

--“开始投币”按钮

coin:

instd_logic_vector(1downto0);

--硬币入口

note:

instd_logic_vector(3downto0);

--纸币入口

cancel:

--“取消”按钮

ticket_stop:

--出站口编号

ticket_account:

--购票张数

money_gate:

outstd_logic_vector(1downto0);

--钱币“暂存杆”

ticket_out:

outstd_logic_vector(4downto0);

--购买的车票

ticket_gate:

outstd_logic;

--出票口

change_gate:

outstd_logic--找零口

);

endsubway;

architecturebehaveofsubwayis

typestate_typeis(initialize_state,select_state,insert_state,ticket_state,change_state);

--状态变量申明

signalstate:

state_type;

--状态信号申明

begin

process(clk)

variabletype_temp:

std_logic;

--记录是否已选择出站口的变量

variableaccount_temp:

--记录是否已选择购票张数的变量

variabletemp_type:

std_logic_vector(4downto0);

--记录票种的中间变量

variabletemp_account:

--记录票数的中间变量

variableprice:

std_logic_vector(7downto0);

--记录单张票价的变量

variablenumber:

std_logic_vector(1downto0);

--记录票数的变量

variabletotal_price:

--记录总票价的变量

variabletotal_insert:

--记录投入钱币总额的变量

variablechange:

--记录应找零金额的变量

variablesign:

--记录系统是否已经过初始化的变量

variabletemp:

--记录投入钱币金额达到总票价的变量

begin

if(clk'

eventandclk='

1'

)then--时钟信号上升沿触发

casestateis

wheninitialize_state=>

--初始状态

if(sign='

0'

)then--表示系统未经过初始化

money_gate<

="

00"

;

--钱币“暂存杆”退出钱币

ticket_out<

00000"

--购票记录清零

ticket_gate<

='

--出票口关闭

change_gate<

--找零口关闭

temp_type:

--票种记录清零

temp_account:

--票数记录清零

type_temp:

account_temp:

price:

00000000"

--单张票价记录清零

number:

--购票张数记录清零

total_price:

--票价总额记录清零

total_insert:

--投入钱币总额记录清零

change:

--应找零金额记录清零

sign:

--记录已完成系统初始化

temp:

;

--投入达到总票价记录清零

else--表示系统已经过初始化

money_gate<

01"

--钱币“暂存杆”归为等待状态

if(select_start='

)then--按下“开始选择”按钮

sign:

state<

=select_state;

--系统进入选择状态

endif;

endif;

whenselect_state=>

--选择状态

if(type_temp='

)then--表示尚未选择出站口

if((ticket_stop>

0001"

)and(ticket_stop<

1000"

))then

--乘坐站数不超过8站

--由于整个系统中涉及的最小金额为5角,为表示方便,有关金额的量统一以“角”为单位--即5角为“5”,1元为“10”,2元为“20”,5元为“50”,10元为“100”

price:

00010100"

--票价为2元

--用5位逻辑矢量表示票种和数量

--其中前2位表示票种:

10000表示4元票,01000表示2元票

--后3位表示数量:

10000表示3张,01000表示2张,00100表示1张

--二者相加即可同时表示购买的票种和张数信息

temp_type:

01000"

--表示2元票

type_temp:

--记录已选择出站口

elsif((ticket_stop>

1001"

1111"

--乘坐站数超过8站

00101000"

--票价为4元

10000"

--表示4元票

endif;

if((account_temp='

)and(type_temp='

))then

--表示已选择出站口但尚未选择购票张数

caseticket_accountis

when"

11"

=>

--选择3张票

temp_account:

00100"

--表示3张票

number:

--购票张数为3

total_price:

=price+price+pr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1