国家级实验教学示范中心
虚拟仿真实验教学中心
自动售货机
时间:2016-04-28  来源:未知  责任编辑:admin  点击:

 

 
实验项目:自动售货机
 
一、    实验题目
设计模拟自动售票机的电路,其功能如下:
1、通过选择开关选择购买6角或8角的邮票
2、按下购买键,开始购买
3、按相应的按键,输入1角、5角或者1元硬币
4、当输入硬币总面值大于等于欲买邮票价值时,相应邮票输出并找零,交易结束
5、若想终止交易,按退钱按键,退出已输入硬币,交易结束
将设计下载到开发板进行验证,用一个拨码开关K1选择要购买的邮票,K2做购买键,用按键SW1作为1角的输入,SW2作为5角的输入,SW3作为1元的输入,用LED0~3显示售货机状态、邮票输出、找零、选择的邮票等信息。
 
二、    方案分析
主要用case形式控制输入的钱币情况与找零情况,用多个中间变量记录当前投入的钱币状态,用四个LED灯的亮灭表示当前状态。
 
三、实验代码(摘抄)
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    09:06:07 07/24/2015
// Design Name:
// Module Name:    sell
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//                             
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module sell(one_dollar,half_dollar,tenth_dollar,stamp,buy,choose_stamp, collect,half_out,dispense,reset,clk,out_seg,out_dig); 
parameter idle=0,tenth=1,two=2,three=3,four=4,five=5,six=6,seven=7,eight=8;
            
//two,three,four为中间状态变量,代表投入币值的几种情况
 
input stamp,buy,tenth_dollar,one_dollar,half_dollar,reset,clk;  
output collect,half_out,dispense,choose_stamp; 
output[7:0] out_seg;
output[7:0] out_dig;
reg collect,half_out,dispense,choose_stamp; 
reg[2:0] D; 
reg flag;
reg[7:0] out_seg;
reg [7:0] out_dig;
//设置输出变量,位选与片选控制7段数码管亮灭
 
always @(posedge clk or posedge reset)
begin
  if(reset==1'b1)
    begin
    dispense=1; collect=1;  
    half_out=1; D=idle;
    choose_stamp=1'b1;
        flag=0;
        out_dig=8'b11111110;
        out_seg=8'b11000000;//0
    end
  else
   begin
     if(buy==1'b1)
       begin
       if(stamp==1'b1)
        begin
         choose_stamp=1'b0;//贩卖8角的邮票
         case(D)
         idle:
        begin
               if(flag==0)
               begin
         if(tenth_dollar==1'b0)
                 begin
                      D=tenth;  flag=1;
                      out_dig=8'b11111110;
                      out_seg=8'b11111001;//1
                 end
         else if(half_dollar==1'b0)
                 ……
 
 
三、    实验仿真

四、    实际效果
售货机可以正常显示投入钱币以及模拟找钱,基本实现了要求的功能。