自动售卖邮票机设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《EDA技术实用教程》
自动售邮票机
设计报告
题目:自动售邮票机课程设计
学院:
专业:
班级:
姓名:
学号:
指导教师:
题目要求
设计一个自动售邮票机,用开关电平信号模拟投币过程,每次投一枚硬币,机器能自动识别硬币金额只有1元和5角两种。设定票价为2.5元,每次售一张票。
购票时先投入硬币,当投入的硬币总金额达到或超过票的面值时,
机器发出指示,这时可以按取票键取出票。如果所投硬币超过票的面值则会提示找零钱,取完票以后按找零键则可以取出零钱。
其他要求:
1)通过LCD2004显示;
2)能够选择不同面值的邮票。
1.题目分析
本次实验所要完成的任务是实现邮票的自动销售。机器有2.5元和3元的两种面值邮票,首先进入选票阶段,需要选择所购邮票的面值,用拨码开关L8选择需要购买的邮票面值。选定后进入投币阶段,有四个拨码开关,组成7种状态。接着进入确认阶段,查看输入金额
是否足够,若不够点亮LED1灯提示“金额不足”。当输入金额达到所需票价时,点亮LED2提示邮票输出。当输入金额超过所需票价时,点亮LED2、LED3提示邮票输出,找零。
四个拨码开关状态代表:
S0:0000 输入0.0元
S1:0001 输入0.5元
S2:0010 输入1.0元
S3:0011 输入1.5元
S4:0100 输入2.0元
S5:0101 输入2.5元
S6:0110 输入3.0元
2、原理框架
3、程序
程序简介:
1、变量含义:clk时钟
choose 选择邮票面值
k1 k2 k3 k4 四个拨码开关输入金额键
en 使能
dat八位数据
ok 可以取票
warning 警告金额不足
change 找零
2、主程序如下:
//利用verilog驱动LCD2004
//本实验是用LCD2004显示英文。(LCD带字库)
modulelcd2004(choose,clk,k1,k2,k3,k4,rs,rw,en,dat,ok, waring,change);
input choose,clk,k1,k2,k3,k4;//系统时钟输入20MHz
output [7:0] dat; //LCD的8位数据口
output rs,rw,en; //LCD的控制脚
output ok,waring,change;
reg e;
reg [7:0] dat;
regrs;
reg [15:0] counter;
reg [5:0] current,next;
regclkr;
reg [1:0] cnt;
regx,y,z;
always @(posedgeclk)
begin
counter=counter+1'b1;
if(counter==16'h000f)
clkr=~clkr;
end
always @(posedgeclkr)
begin
current=next;
case(current)
set0: begin rs<=0; dat<=8'h38; next<=set1; end //* 设置8位格式,4行,5*8
set1: begin rs<=0; dat<=8'h0C; next<=set2; end
//*整体显示,关光标,不闪烁*/
set2: begin rs<=0; dat<=8'h06; next<=set3; end //*设定输入方式,增量不移位*/
set3: begin rs<=0; dat<=8'h01; next<=set41; end //*清除显示*/
set41: begin rs<=0; dat<=8'h80; next<=dat0; end
//显示第一行
dat13: if((k1==0)&&(k2==0)&&(k3==0)&&(k4==0))
begin if(choose==0)
Begin rs<=1; dat<="2"; next<=dat14;end
else if(choose==1)
beginrs<=1; dat<="3"; next<=dat14; end
end
else if((k1==0)&&(k2==0)&&(k3==0)&&(k4==1))
begin if(choose==0)
beginrs<=1; dat<="2"; next<=dat14;end
else if(choose==1)
beginrs<=1; dat<="3"; next<=dat14; end
end
else if((k1==0)&&(k2==0)&&(k3==1)&&(k4==0))
begin if(choose==0)
beginrs<=1; dat<="2";
next<=dat14;end
else if(choose==1)
beginrs<=1; dat<="3"; next<=dat14; end
end
else if((k1==0)&&(k2==0)&&(k3==1)&&(k4==1))
begin if(choose==0)
beginrs<=1; dat<="2"; next<=dat14;end
else if(choose==1)
beginrs<=1; dat<="3"; next<=dat14; end
end
else if((k1==0)&&(k2==1)&&(k3==0)&&(k4==0))
begin if(choose==0)
beginrs<=1; dat<="2"; next<=dat14;end
else if(choose==1)
beginrs<=1; dat<="3"; next<=dat14; end
end
else if((k1==0)&&(k2==1)&&(k3==0)&&(k4==1))