北邮VHDL实验地铁_第1页
北邮VHDL实验地铁_第2页
北邮VHDL实验地铁_第3页
北邮VHDL实验地铁_第4页
北邮VHDL实验地铁_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于vhdl的地铁自动售票系统设计 班级:xxxxxxx姓名:xxxxxx 学号:xxxxxxxxx 班内序号:15 日期:2012.11.11 1、 实验要求1.地铁票价统一为每张两元,可以投入币值为1元、5元和10元三种币种进行购票。2.能够开机自检,检验显示器件正常。3.通过按键开关btn输入购票张数和投入的人民币张数并恰当显示相应信息。4.设置适当的声音提示或显示提示表示取票和找零。5.一次购票成功后系统能够恰当地转入下一次购票等待状态。6.系统能够复位。二、系统设计3、 仿真波形及分析售票系统上电后首先进行复位(reset=1),然后等待乘客选择票数(tn=0-7) 。在选票完成后,

2、 系统输出报警信号 (moneyinputalarm=1), 提醒乘客进行投币。之后系统对于乘客投入的纸币进行识别,识别范围是1元,5元,10元(money10,money5,money1),乘客可以连续多次投入钱币,系统自动进行累加。当投入的钱币未达到所需金额时,报警信号仍然继续维持(moneyinputalarm=1),提醒钱不够,需要继续投入钱币。当投入的钱币达到所需金额时,报警信号取消(moneyinputalarm=0),售票机自动出票(tout=1) 。如果投入的钱币有余, 系统自动计算余额 (rmoney) 。本次交易结束,系统自动进入选站状态等待下一次的交易。在投币期间,如果乘

3、客按复位键(reset=1)取消本次操作,钱币自动退出。4、 源程序library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity adddiv is port( bt:out std_logic_vector(5 downto 0); reset:in std_logic; - 系统复位信号 clk:in std_logic; - 系统时钟 tn:in std_logic_vector(6 downto 0); - 所购票数 money10:in std_logic; - 投币10元 mone

4、y5:in std_logic; - 投币5元 money1:in std_logic; -投币1元 moneyinputalarm:out std_logic; - 投币不足报警信号 tout : out std_logic;- 出票 led:out std_logic_vector(6 downto 0); state:out std_logic_vector(2 downto 0) - 系统状态指示 ); end adddiv;architecture behave of adddiv iscomponent div_2k - 2000分频器,用来使7段数码管闪烁port(clk_in:

5、 in std_logic; clk_out: out std_logic);end component;component div_50m -50分频器,用来处理投币按键port(clk_in_50m: in std_logic; clk_out_50m: out std_logic);end component; signal cnt6:integer range 0 to 5; - 扫频使6个七段数码管轮流亮的信号 signal tmplight:integer range 0 to 9; - 控制所有数码管显示的信号 constant numh:integer:=0; - 票数显示高位

6、 signal numl:integer range 0 to 9; - 票数显示低位 signal pmoneyh:integer range 0 to 2; - 所付钱数显示高位 signal pmoneyl:integer range 0 to 9; - 所付钱数显示低位 constant rmoneyh:integer:=0; - 找钱显示高位 signal rmoneyl:integer range 0 to 9; - 找钱显示低位 signal clk_tmp: std_logic; 2000m分频输出 signal clk_money: std_logic;type ff is

7、(selticket,inputcoin,givechange) ; - 定义系统转换状态 (选站, 选票, 投币, 出票, 找零) begin u1:div_2k port map(clk_in=>clk,clk_out=>clk_tmp); u2:div_50m port map(clk_in_50m=>clk,clk_out_50m=>clk_money);main: process(reset,clk_money) variable next_state: ff:=selticket; variable tmoney,pmoney,rmoney,num: int

8、eger range 0 to 20; - 车票总额,投币总额,找零总额 begin if clk_money'event and clk_money= '1' then case next_state is when selticket => - 选择票数 tout<='0' moneyinputalarm<='0' numl<=0; pmoneyh<=0; pmoneyl<=0; rmoneyl<=0; num:=0; tmoney:=0; pmoney:=0; rmoney:=0; - 初始

9、化清零 state<="100" if (reset='1') then next_state:=selticket; - 选票期间取消操作 else case tn is when "1000000" => tmoney :=2; - 计算票价 num:=1; when "0100000" => tmoney :=4; - 计算票价 num:=2; when "0010000" => tmoney :=6; - 计算票价 num:=3; when "0001000

10、" => tmoney :=8; - 计算票价 num:=4; when "0000100" => tmoney :=10; - 计算票价 num:=5; when "0000010" => tmoney :=12; - 计算票价 num:=6; when "0000001" => tmoney :=14; - 计算票价 num:=7; when others =>null; end case; numl<=num; if (tmoney >0) then next_state :=

11、 inputcoin; - 选票结束,进入投币状态 else next_state := selticket; - 未选票,停留在选票状态 end if ; end if; when inputcoin => - 进行投币 state<="010" if (money10='1') then pmoney:=pmoney+10; -计算已付的款 end if; if (money5='1') then pmoney:=pmoney+5; end if; if (money1='1') then pmoney:=pm

12、oney+1; end if; if pmoney<10 then -把已付的款转换成七段数码管显示的高低位 pmoneyh <= 0; pmoneyl <=pmoney; elsif pmoney<20 then pmoneyh <= 1; pmoneyl <=pmoney-10; else pmoneyh <= 2; pmoneyl <=pmoney-20; end if; if (pmoney<tmoney)then - 比较投币总额与车票总额 moneyinputalarm <='1' -缺钱警告 next_s

13、tate :=inputcoin; - 投币不足,继续进入投币状态 else moneyinputalarm<='0' next_state :=givechange; - 投币足够,进入出票状态 end if ; when givechange => - 余额找出 state<="001" if(pmoney>0)then tout<='1' rmoney :=pmoney-tmoney; else tout<='0' end if ; rmoneyl<=rmoney; if res

14、et='1' then - 找零结束,回到选站状态 next_state :=selticket; tmoney:=0; pmoney:=0; end if ; when others => - 其他任何情况,均回到选站状态 next_state := selticket; end case ; end if; end process main; show: process(clk_tmp) begin if clk_tmp'event and clk_tmp= '1' then -实现模6计数器 if cnt6 = 5 thencnt6 <

15、= 0;elsecnt6 <= cnt6+1;end if; case cnt6 is -3线至6线译码器 when 0 => bt <= "011111" ; tmplight<=numh; when 1 => bt <= "101111" ; tmplight<=numl; when 2 => bt <= "110111" ; tmplight<=pmoneyh; when 3 => bt <= "111011" ; tmplight<

16、;=pmoneyl; when 4 => bt <= "111101" ; tmplight<=rmoneyh; when 5 => bt <= "111110" ; tmplight<=rmoneyl; when others => null ; end case ; -用6个数码管轮流输出 case tmplight is when 0 => led<= "1111110"when 1=> led<= "0110000"when 2 =>

17、led<= "1101101"when 3 => led<= "1111001"when 4 => led<= "0110011"when 5 =>led<= "1011011"when 6 =>led<= "1011111"when 7 =>led<= "1110010"when 8 => led<= "1111111"when 9 => led<= "1

18、111011"end case; end if; end process show;end behave;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div_2k isport(clk_in:in std_logic; clk_out:out std_logic);end div_2k; architecture a of div_2k issignal temp:integer range 0 to 1999;begin p1:process(clk_in)begin

19、 if clk_in'event and clk_in='1' then if temp<=999 then clk_out<='1' temp<=temp+1; elsif temp=1999 then temp<=0; clk_out<='0' else temp<=temp+1; clk_out<='0' end if;end if;end process p1;end a;library ieee;use ieee.std_logic_1164.all;use ieee.s

20、td_logic_unsigned.all;entity div_50m isport(clk_in_50m:in std_logic; clk_out_50m:out std_logic);end div_50m; architecture b of div_50m issignal temp:integer range 0 to 49999999;begin p1:process(clk_in_50m)begin if clk_in_50m'event and clk_in_50m='1' then if temp<=24999999 then clk_out

21、_50m<='1' temp<=temp+1; elsif temp=49999999 then temp<=0; clk_out_50m<='0' else temp<=temp+1; clk_out_50m<='0' end if;end if;end process p1;end b;5、 功能说明 本自动售票机系统共分3个状态:选票状态,付款状态,出票找零状态。在选票状态,用7个拨码开关分别表示17张票,选中后自动进入付款状态;用3个按键分别控制投币10元、5元、1元,且控制按键进程的时钟为25m分频,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论