自动售卖邮票机设计.docx
《自动售卖邮票机设计.docx》由会员分享,可在线阅读,更多相关《自动售卖邮票机设计.docx(9页珍藏版)》请在冰豆网上搜索。
自动售卖邮票机设计
《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选择邮票面值
k1k2k3k4四个拨码开关输入金额键
en使能
dat八位数据
ok可以取票
warning警告金额不足
change找零
2、主程序如下:
//利用verilog驱动LCD2004
//本实验是用LCD2004显示英文。
(LCD带字库)
modulelcd2004(choose,clk,k1,k2,k3,k4,rs,rw,en,dat,ok,
waring,change);
inputchoose,clk,k1,k2,k3,k4;//系统时钟输入20MHz
output[7:
0]dat;//LCD的8位数据口
outputrs,rw,en;//LCD的控制脚
outputok,waring,change;
rege;
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:
beginrs<=0;dat<=8'h38;next<=set1;end
//*设置8位格式,4行,5*8
set1:
beginrs<=0;dat<=8'h0C;next<=set2;end
//*整体显示,关光标,不闪烁*/
set2:
beginrs<=0;dat<=8'h06;next<=set3;end
//*设定输入方式,增量不移位*/
set3:
beginrs<=0;dat<=8'h01;next<=set41;end
//*清除显示*/
set41:
beginrs<=0;dat<=8'h80;next<=dat0;end
//显示第一行
dat13:
if((k1==0)&&(k2==0)&&(k3==0)&&(k4==0))
beginif(choose==0)
Beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
elseif((k1==0)&&(k2==0)&&(k3==0)&&(k4==1))
beginif(choose==0)
beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
elseif((k1==0)&&(k2==0)&&(k3==1)&&(k4==0))
beginif(choose==0)
beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
elseif((k1==0)&&(k2==0)&&(k3==1)&&(k4==1))
beginif(choose==0)
beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
elseif((k1==0)&&(k2==1)&&(k3==0)&&(k4==0))
beginif(choose==0)
beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
elseif((k1==0)&&(k2==1)&&(k3==0)&&(k4==1))
beginif(choose==0)
beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
elseif((k1==0)&&(k2==1)&&(k3==1)&&(k4==0))
beginif(choose==0)
beginrs<=1;dat<="2";next<=dat14;end
elseif(choose==1)
beginrs<=1;dat<="3";next<=dat14;end
end
nul:
beginrs<=0;dat<=8'h00;//把液晶的E脚拉高
if(cnt!
=2'h2)
begin
e<=0;next<=set0;cnt<=cnt+1'b1;
end
else
begin
next<=nul;e<=1;
end
end
default:
next<=set0;
endcase
end
assignen=clkr|e;
assignrw=0;
assignok=x;
assignwaring=y;
assignchange=z;
endmodule
4、顶层原理图
5、引脚分配
6、设计总结
经过这次对自动售邮票机的设计,让我们对EDA设计有了更一步的认识,同时也对EDA这门课程有了更深入的了解。
这次设计让我们了解了关于自动售邮票机的原理与设计理念。
在这次设计中我们受益匪浅.对QuartusⅡ软件运用更加熟练。
在摸索该如何设计程序使之实现所需功能的过程中,培养了我们的设计思维,增加了实际操作能力,总的来说这次收获不小,基本能够做到学以致用。
当然这个设计存在许多的不足,还需要进一步的修改与完善。
这次设计提高了我们的逻辑思维能力,使我们在程序的改写和运用上有了很大的进步。
加深了我们对Verilog硬件语言的认识。
另外,我们还更加充分的认识到,EDA这门课程在科学发展中的至关重要性。
查阅参考书的独立思考的能力以及培养非常重要,我们在设计时,遇到很多不理解的东西,有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。
相互讨论共同研究也是很重要的,经常出现一些问题,经过讨论和资料的查询最终得到了解决。
锻炼了我们的团队合作精神及分工合作的能力。
最后应感谢王老师的辛勤指导下,能让我们在困境中找到解决难题的办法,并且对EDA有了更深刻的认识,同时在王老师身上学到了很多设计中适用的方法。