基于FPGA自动饮料售货机【实用文档】doc.doc
上传人:天马****23 上传时间:2024-09-10 格式:DOC 页数:61 大小:20.5MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

基于FPGA自动饮料售货机【实用文档】doc.doc

基于FPGA自动饮料售货机【实用文档】doc.doc

预览

免费试读已结束,剩余 51 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于FPGA自动饮料售货机【实用文档】doc文档可直接使用可编辑,欢迎下载自动饮料售货机目录前言........。。.。........。..。.。.。......。...。..。....。...。.1设计流程图.。.。。.。。。.。...........。.。...。.。。.。..。。。..。。。..2源代码编写.。.。.....。..。..。..。....。....。。。。。。..。....。.。.。3仿真时序图.。...。。..。.。.......。.。..。.。。..。.。..。。..。.。..。。6分析与总结.....。...。。。..。..。。..。。..。....。.....。.。..。。...7参考文献。..。。.。。.。.。...。。........。。。......。.。。..。..。...。7前言本人在本科阶段自学了一部分PLC,并运用PLC完成了本科的毕业设计,同在毕业设计课题组的同学选做基于PLC自动饮料售货机的设计,当时对自动饮料售货机的控制系统了解仅限于基于单片机与PLC的控制没有亲自动手去尝试设计.在本学期,全新的接触和学习了FPGA课程,正处于一个FPGA的入门阶段,基于以前的兴趣,该次尝试基于FPGA简单设计自动饮料售货机的一部分控制.本次是采用QuartusII13。0sp1进行了程序源代码的编写和时序仿真。图1—1自动饮料售货机内部结构图图1-2自动饮料售货机内部结构图设计流程图3.源代码编写/*信号定义:clk:表示时钟输入;rst_n:为系统复位信号;half_yuan:代表投入5角钱币;one_yuan:代表投入1元钱币;half_out:代表找零信号;dispense:代表机器售出一瓶饮料;collect:用于提示投币者取走饮料。seg1:LCDA数码管显示;seg2:LCDB数码管显示;seg3:LCDC数码管显示;*/moduleSCD(half_yuan,one_yuan,half_out,collect,dispense,rst_n,clk,seg1,seg2,seg3);parameteridle=0,half=1,one=2,two=3,three=4;//idle,half,one,two,three代表投入钱币的几种状态inputhalf_yuan,one_yuan,rst_n,clk;outputcollect,half_out,dispense,seg1,seg2,seg3;reg[2:0]D;//D代表当前时刻投币的状态regtemp1,temp2;regcollect,half_out,dispense;reg[3:0]seg1;reg[3:0]seg2;reg[7:0]seg3;always@(posedgeclkornegedgerst_n)beginﻩif(!rst_n)ﻩbegindispense<=0;collect<=0;ﻩhalf_out<=0;D<=idle;temp1〈=0;temp2<=0;{seg1,seg2}<=8'b0000_0000;{seg3}<=8'b11111101;endelseﻩbegintemp1<=half_yuan;temp2〈=one_yuan;//初始状态赋值ﻩcase(D)idle:if({temp1,half_yuan}==2’b10)//0元状态下检测下降沿ﻩﻩﻩﻩbeginD〈=half;ﻩﻩﻩ{seg1,seg2}<=8’b0000_0101;{seg3}〈=8'b1111_1101;//数码管显示ﻩﻩﻩdispense〈=0;collect<=0;half_out<=0;end//循环时输出置0ﻩﻩﻩﻩﻩelseif({temp2,one_yuan}==2'b10)ﻩﻩﻩbeginD〈=one;ﻩﻩﻩ{seg1,seg2}<=8’b0001_0000;{seg3}<=8'b1111_1101;ﻩdispense〈=0;collect<=0;half_out<=0;endhalf:if({temp1,half_yuan}==2'b10)//0。5元状态下检测下降沿beginD<=one;ﻩ{seg1,seg2}<=8'b0001_0000;{seg3}<=8'b11111101;endﻩelseif({temp2,one_yuan}==2'b10)ﻩﻩbeginD<=two;ﻩﻩ{seg1,seg2}<=8'b000