简易地铁自动售票系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路与逻辑设计实验

实验报告

题目:简易地铁自动售票系统

学院:信息与通信工程学院

专业:电子信息工程

一、设计课题的任务要求

基本要求:

a)地铁票价统一为每张两元,只能投入币值为五元的人民币进行购票。

b)能够开机自检,检验显示器件正常。

c)通过按键开关BTN输入购票张数和投入的人民币张数并恰当显示相应信息。

d)设置适当的声音提示或显示提示表示取票和找零。

e)一次购票成功后系统能够恰当地转入下一次购票等待状态。

f)系统能够复位。

提高要求:

将投币种类增加为1元、5元和10元三种。

二、系统设计

本次实验中采用的是自自顶向下的设计方法,即从整个系统功能出发,按一定原则将系统划分为若干子系统,再将每个子系统分为若干功能模块,再将每个模块分成若干较小的模块……直至分成许多基本模块实现。

1.外部呈现结构

CAT5,CAT4:用数码管显示购票张数

CAT3,CAT2:显示总共输入的钱数

BTN7:开始购票按键

BTN6:输入购票张数确定按键

BTN5:输入钱数确定按键/确定购买按键

BTN4:复位键/取消键

BTN3:通过按键按下次数输入购票张数

BTN2:每按下1次,输入1张1元纸币

BTN1:每按下1次,输入1张5元纸币

BTN0:每按下1次,输入1张10元纸币

LED7-0:通过8个灯不同的亮灭显示不同的状态

全亮:开机自检及复位状态

LED7亮:输入购票张数状态

LED6亮:输入总钱数状态

LED5,2亮:显示购票成功

亮灭亮灭亮灭亮灭:显示找零状态

2、模块划分及功能

1、计算模块:计算用户投币的总金额,以及用户的余额。

2、显示模块:将计算的结果及用户操作信号译码后显示在数码管或LED灯上。

3、输入模块:通过按键,开关输入信息

4、信号模块:系统对系统时钟,用户的买、选择、完成信号,显示开关信号等信号的设置。

3、自动售货机系统总体框图

4、流程图

5、MSD图

S0:waite_state

S1:select_state

S2:insert_state

S3:ticket_state

S4:change_state

三、仿真波形及波形分析

1、仿真波形

2、波形分析

上面的波形只是仿真其中一个情况,顺序输入信息,中间没有按过取消,且输入钱数大于总票价,通过波形可以看出,购票成功且有找零,跟所预期吻合,说明仿真成功。

四、源程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity subway is

port(clk :in std_logic;

buy : in std_logic;

yes : in std_logic;

ok: in std_logic;

start:in std_logic;

no : in std_logic;

count1:in std_logic;

count2:in std_logic;

count3:in std_logic;

count0:in std_logic;

f:out std_logic_vector(6 downto 0);

sell:out std_logic_vector(5 downto 0);

ticket_out : out std_logic_vector(2 downto 0);

change_out : out std_logic_vector(3 downto 0);

present_state : out std_logic;

a,b,c,d:out std_logic:='0';

--count_2,count_3:out std_logic;

afford:out std_logic;

beep: out std_logic;

led:out std_logic_vector(7 downto 0)

);

end subway;

architecture behave of subway is

type state_type is (waiting_state,select_state,insert_state,ticket_state, change_state); signal state:state_type;

signal clk_out100,clk_out200:std_logic;

signal count_0,count_1,count_2,count_3:std_logic;

signal tmp1:integer range 0 to 4999;

signal tmp2:integer range 0 to 9999;

signal count0temp,count1temp,count2temp,count3temp:std_logic;

signal count0tempp,count1tempp,count2tempp,count3tempp:std_logic;

signal ticket_count:std_logic_vector(2 downto 0);

signal total_money:std_logic_vector(3 downto 0);

begin

----------------------------------------------------------分频------------------------------------------------------------- p1:process(clk) //2次分频,一次分为10Khz,一次分为5Khz,一个用于数码管扫描begin 一个用于按键消抖

if (clk'event and clk='1') then

if tmp1=4999 then

tmp1<=0;

else

tmp1<=tmp1+1;

end if;

end if;

end process p1;

p11:process(clk)

begin

if (clk'event and clk='1') then

if tmp2=9999 then

相关文档
最新文档