自动售货机控制系统设计.docx
《自动售货机控制系统设计.docx》由会员分享,可在线阅读,更多相关《自动售货机控制系统设计.docx(27页珍藏版)》请在冰豆网上搜索。
自动售货机控制系统设计
综合课程设计报告书
题目:
自动售货机控制系统设计
学院:
机械与电气工程学院
专业:
电气工程及其自动化
班级:
13级2班
姓名:
付少官
学号:
1314216222
指导教师:
崔茂齐
教师职称:
讲师
2016年6月29日
机械与电气工程学院综合课程设计任务书
专业:
电气工程及其自动化班级:
2013-2姓名:
付少官学号:
1314216222
综合课程设计题目
自动售货机控制系统设计
综合课程设计的任务、要求
一、设计任务
售货共有3种饮料供选择,分别为汽水(4元)、花茶(6元)和咖啡(10元),自动售货机有3个投币孔,分别为1元、5元和10元。
投币总额或当前值显示在7段数码管上。
投币值等于或大于货物金额时,货物可选。
按下对应按钮,则相对应的指示灯开始闪烁,3s后自动停止,表示饮料已经掉出。
如投币总额超过销售价格,将可由退币钮找回余额,退回金额如果大于10元,则先退10元再退1。
二、设计要求
1.查找资料,根据要求的格式,以设计报告书的形式写出设计方案的全过程,操作的步骤、数据以及结论;
2.学习使用Protel软件,利用Protel完成原理图绘制;
3.学习使用Proteus软件,利用Proteus画出原理图并进行仿真;
4.进行实物制作。
参考文献
[1]王浩全。
《单片机原理及应用》C语言版[M].北京:
人民邮电出版社,2013.
[2]童诗白,华成英.模拟电子技术基础(第四版)[M].北京:
高等教育出版社,2006.。
[3]阎石.数字电子技术基础(第五版)[M].北京:
高等教育出版社,2006.
[4]陈永强《模拟电子技术》[M].人民邮电出版社2013
综合课程设计工作进度计划
起讫日期
主要工作内容
2016.06.6-2016.06.6
选题、调研、收集资料
2016.06.7-2016.06.15
软、硬件设计、仿真与调试
2016.06.16-2016.06.17
撰写设计报告书
2016.06.25
综合课程设计答辩
指导教师签名
指导教师:
年月日
教研室意见
负责人:
年月日
自动售货机控制系统设计
付少官
摘要本文详细介绍了自动售货机系统的方案设计、硬件选择、软件规划和编写,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧。
该系统以单片机AT89C51芯片为核心,采用集中控制方式实现了对自动售货机全过程的自动控制。
本系统选择独立式键盘按键作为货物选择端,实现了投币总数的显示功能。
此外,系统程序采用keil软件进行程序的编写和编译,该软件具有编程简单、查错方便、阅读容易等特点。
汇编语言是程序的基本语言,具有容易理解,便于记忆和使用等特点。
关键词:
自动售货机,AT89C51,LCD显示
Abstrct
Thispaperdescribesavendingmachinesystemdesign,hardwareselection,softwareplanningandpreparation,anddescribesthefocusoftheworkvendingmachinesystemtheory,systemdesign,softwareprogrammingprinciplesandtechniques.AT89C51inthesystemasthecorechip,therealizationofacentralizedcontrolofthevendingmachine'sautomaticcontroltheentireprocess.Choiceofthesystemasastand-alonekeyboardkeystochoosethegoodsside,therealizationofthecoinshowsthetotalnumberoffeatures.Inaddition,thesystemprogramusingkeilsoftwaretoprepareandcompileprocedures,thesoftwareprogrammingissimple,convenienterrorchecking,easytoreadandsoon.Assemblylanguageisthebasiclanguageprogramwitheasytounderstand,easytorememberanduseandsoon.
Keywords:
VendingMachines,AT89C51,LEDDisplay
1、绪论
自动售货机是一种全新的商业零售形式,从自动售货机的发展趋势来看,它的出现是由于劳动密集型的产业构造向技术密集型社会转变的产物。
大量生产、大量消费以及消费模式和销售环境的变化,要求出现新的流通渠道;而相对的超市、百货购物中心等新的流通渠道的产生,人工费用也不断上升;再加上场地的局限性以及购物的便利性等这些因素的制约,无人自动售货机作为一种必须的机器便应运而生了。
随着科技的发展及人们生活水平的提高,自动售货机市场越来越呈现出多元化及个性化的需求。
人们通过自动售货机自助购物,这种简单、快捷的方式正逐渐成为市民的一种新的消费时尚,并且满足了人们在当今科技高速发展的现代社会追求高品质生活的需要。
自动售货机在城市商业区、写字楼大厅、风景区、车站、码头、繁华街道等公共场所的布设能够美化城市环境,方便群众生活,它已经成为城市各角落的一道亮丽风景线。
自动售货机必将在国内普及,并成为城市现代文明程度的一种象征性标志。
本文详细介绍了如何控制、要求进行自动售货机系统的方案设计、硬件选择、软件规划和编写,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧。
2、自动售货控制系统设计总体方案
2.1元器件选择
在控制系统设计中可以用PLC和单片机作为主要器件,但是出于设计的经济性和可操作性以及编程的的便捷性。
本设计选用单片机作为主要控制器件。
一下器件选择均基于此基础。
1)单片机:
选用AT89C51作为控制核心,该单片机是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器。
2)晶振:
本设计选用的晶振是CRYSTAL,作用在于产生原始的时钟频率,这个频率经过频率发生器的倍频或分频后就成了单片机中各种不同的总线频率。
3)排阻:
排阻RP1是用来并行口的上拉或者下拉电阻用。
4)数码管:
2位7段共阴数码管,用来显示投币和找零金额。
5)一般电阻:
设计中需要用到的电阻均是起下拉作用,用来稳定系统。
6)电容:
本设计中所用到的电容有3个,其中2个是去耦电容,其起作用一方面是本集成电路的蓄能电容,另一方面旁路掉该器件的高频噪声,起到抗干扰的作用。
1个接复位输入端口,与外接电阻构成复位电路。
7)按键:
选用8个独立按键,3个按键用来代表货物的不同价格,1个用来确认,1个用来取消,还有3个用来模拟货币投入。
8)三极管9013NPN型低频放大50V0.5A0.625W
9)绿色发光二极管3个压降为3.0~3.2正常工作电流20mA
2.2开发工具
KeiluVision2是美国KeilSoftware公司出品的51系列兼容单片机C语言软件。
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
3、自动售货控制系统硬件设计
3.1硬件总体框图
经过分析自动售货控制系统的设计得出自动售货控制系统的总体框图如2。
系统由AT89C51单片机为控制核心,外围电路有AT89C51单片机驱动电路,货物选择按键电路,数码管显示电路,取货显示,退币显示以及投币电路。
各部分相互协调工作,共同完成自动售货控制系统的运行。
图2总体框图
3.2AT89C51单片机模块(介绍本次设计所到的功能)
3.2.1.特点
4K字节可编程闪烁存储器;寿命:
1000写/擦循环;宽工作电压范围VCC可为2.7V到6V;全静态工作可从0Hz至16MHz本次设计选择12MHZ;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式片内振荡器和时钟电路
3.2.2.管脚说明
VCC:
接电压;GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1、P2、P3口是一个内部提供上拉电阻的8位双向I/O口,缓冲器能接收输出4TTL门电流。
P1管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
P3口同时为闪烁编程和编程校验接收一些控制信号。
/EA/VPP:
当-EA保持低电平时,在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
单片机在上电后检查到复位端为复位电平(有的时候高电平复位,有的则是低电平复位),则会启动一段内部代码,这段代码会初始化系统重要的寄存器,重要寄存器被初始化才能保证用户程序的正常执行;这个初始化过程需要一定时间。
3.3.3本次所应用的管脚说明
用P1^0-P1^2口作为商品选择口;用P1^3-P1^5口作为投币口;用P1^6-P1^7口作为确认取消端;用P3^0口作为出货口;用P3^1-P3^2口作为退币口;P0口为数码管选段接口;P2口位数码管选位接口。
3.3单片机驱动模块
单片机驱动模块是用来驱动单片机工作的电路,由2个去耦电容与晶振并联接入晶振接口,构成时钟电路,为单片机提供时钟信号;复位电容与一电阻接入复位接口,是为系统提供初始化信号。
实际电路图如图
图3AT89C51单片机的驱动电路
图中C1,C2均为20pf的去耦电容,C3为10u的复位电容,X1为12M的晶振,R1上拉电阻,晶振X1两端分别与C1,C2的一端相连并接入晶振接口XTAL1,XTAL2。
C1,C2的另一端接R1的一端并一起接地,R1的另一端与C3一端接入复位接口,C3的另一端接片内存储器,并接入电源接口。
C1,C2,X1构成时钟电路,为单片机提供时钟信号。
此单片机片内存储器有效,可使用片内存储器,不用外部拓展,R1起下拉作用,稳定系统。
3.4选择按键模块
键盘为8个独立按键,按键1-3是购物键,分别代表了4元、6元、10元货物价格,按键4-5是投币键,分别代表投币1元、5元、10元。
7按键是确认键,用户在选定所欲购买的货物后必须按确认键,8是取消键,当某个操作错误是可以按取消键返回上一级菜单。
该模块中8个键并联,一端接公共地,一端接单片机的P1.0-P1.7口。
按键选择电路如图4所示
图4系统按键模块
3.4.1商品选择
我们采用独立键盘,键盘识别的编程比较简单,通过按下BUTTON改变电位,C语言中相应按键的定义来实现键盘的定义与识别。
识别独立按键:
无键按下时则为高电平,当P1^0-P1^2某个键按下时,对应的接口会出现低电平,键盘定义的数值反映在编程内部变量的累加与数码管上的变化;我们将商品的价格赋予在P1^0-P1^2对应的if语句中。
3.4.2投币
用按键改变的电平来代替核验真钞电平的变化。
本次设计中没有运用芯片内部的定时器来控制投币时间,这是还需要继续改进的地方。
3.5系统显示模块
3.5.1数码管显示器
系统显示模块采用4位8段共阳数码管显示金额。
首先显示所选物品金额,然后显示投入金额,最后显示找还金额。
P0口没有内置上拉电阻,要在外部接排阻上拉,数码管段选接P0口,为选经过三极管驱动与P2.0-P2.3相接。
数码管显示:
数码管有共阴共阳两种,而我们选择的是共阴的,因此0-9显示分别是{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}
3.5.2显示器的驱动电路
下图中RP1为排阻,因为P0口没有内置上接电阻,需要在外部接排阻进行上拉,数码段选接P0口,位选与P2.0-P2.3相连接。
位选的接口为低电平是该位被选中,能够显示数据,为高电平时,该位不被选中,则不亮,不能显示任何数据。
图5显示器驱动电路如
3.6出货以及退币模块
出货:
通过逻辑判断选择符合条件的,即backmoney>=0,此时借助延时函数让LED灯闪烁3秒后停止,就代表完成交易。
退币:
两个LED分别代表退1元、10元。
4、自动售货控制系统软件设计
4.1系统流程图
现在我们来简单模拟一下顾客的购物流程:
当顾客需要从自动售货机购买货物时。
顾客首先通过一些外部控件选择自己需要的货物。
此时顾客需要知道自己应该支付多少金额。
所以自动售货机显示顾客所选货物的总金额。
然后顾客可以向自动售货机的投币口投入钱币。
自动售货机显示顾客投入的钱币总金额。
当投入的金额大于所需的金额的时候,顾客购买的货物将从出货口送出,同时退币口退还顾客多余的金额。
图1自动售货机原理流程框图
4.2元器件计算
去耦电容
2个
22pf
复位电容
1个
10uf
电阻
1个
10K
去耦电容是电路中装设在元件的电源端的电容,此电容可以提供较稳定的电源,同时也可以降低元件耦合到电源端的噪声,间接可以减少其他元件受此元件噪声的影响。
相当于电池,避免由于电流的突变而使电压下降,相当于滤纹波。
复位电容的大小决定复位时间,不存在电压大小的问题。
限流电阻的计算
公式:
限流电阻=(电源电压-工作电压)/要求的工作电流
(1)数码管位选相连的电阻
(数码管正常工作时电流为10-20mA,3mA时即可点亮)
R=(5V-1.7V)/10mA
因此我们选择430欧的电阻符合条件
(2)与LED相连的电阻
R=(5V-2.2V)/10mA
因此我们选择330欧的电阻符合条件
5、系统总电路图及调试仿真
5.1总电路图
5.2系统调试
5.3系统仿真
以购买咖啡为例,展示投币累加、退币、出货的过程
初始状态
购买10元咖啡
分别投入1元5元10元后,投币额累计为16元
确认,找零6元
出货口亮灯,出货完成
总结及致谢
近两周的课程设计即将接近尾声,与其说是一次设计,倒不如说是一次新的学习机会。
两周的设计中,不仅对自己所学的单片机课程以及C语言课程有了更深的了解,而且更加认识到自身的不足与所学的浅陋。
以便更好地反省自己在以后的学习中更加认真,要有针对性。
在课程最后,特此感谢我的指导老师崔老师、姜老师、常老师。
在元器件的选择,程序语言编写,常用设备的支持等方面的帮助以及不厌其烦的指导。
谢谢老师,老师们辛苦了!
通过这次综合设计,确实让我们学到了很多知识。
本次课程设计主要是综合《C程序设计教程》、《数字电子技术》、《单片机原理及应用》、《模拟电子技术》、《电力电子技术》、《PLC》等课程,对三年来所学的知识系统的整理学习,对培养系统设计能力、提高实验技术,深化理论理解起到了非常好的效果。
在这次课程设计中,通过上网、去图书馆、请教老师等途径,为顺利完成我们的任务,起到了非常大的帮助作用。
最后我们反复的研究、计算、修改,成功地实现了自动售货机关于控制部分的功能。
感谢搭档同学一直不抛弃不放弃的,坚持在做实验;最后特别感谢崔茂齐老师在设计前对设计的指导性建议,对设计过程中出现的困难给予的积极指导。
参考文献
1.阎石《数字电子电路》高等教育出版社2007
2.谭浩强《C程序设计教程》清华大学出版社2007
3.陈永强《模拟电子技术》人民邮电出版社2013
4.张毅刚《单片机原理及应用》高等教育出版社2004
附录
附录1、元件清单
元件名称
型号
个数(个)
备注
单片机
AT89C51
1
晶振
CRYSTAL
1
12MHZ
去耦电容
2
22pf
复位电容
1
10uf
电阻
10K
1
430欧
2
1K
3
两位七段数码显示管
7SEGMP*2-cc
1
共阴
LED灯(绿色)
2.2V,10mA
3
电源
1
单片机插座
1
独立按键
8
排阻
ResPack-8
1
1K
三极管
9012
3
附录2、源程序
#include
//位定义
sbitkey1=P1^0;//选择4元汽水
sbitkey2=P1^1;//选择6元花茶
sbitkey3=P1^2;//选择10元咖啡
sbitkey4=P1^3;//投币1元
sbitkey5=P1^4;//投币5元
sbitkey6=P1^5;//投币10元
sbitkey7=P1^6;//确认
sbitkey8=P1^7;//取消
sbitled1=P3^0;
sbitled2=P3^1;
sbitled3=P3^2;
intstep=1;//执行步骤
intprice=0;//商品价格
intnum=1;//商品数量
inttable1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};//数码管显示0-9
unsignedchardispbuf[8]={0,0,0,0,0,0,0,};
inttable2[]={0xe0,0xc0,0xa0,0x80,0x20};//控制退币
inttotal_money=0;//所选商品总价格
intback_money=0;//应退金额
intin_money=0;
/*
延时功能
*/
voiddelay(intz)
{
intx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//调用时重新初始化复位函数
voidreset()
{
step=1;
price=0;
num=1;
total_money=0;
back_money=0;
in_money=0;
}
/*
选择商品函数每个按键对应不同的物品价格及数量
*/
voidchoose()
{
if(key1==0)
{
delay(80);
if(key1==0)
{
num=1;
price=4;
}
}
elseif(key2==0)
{
delay(80);
if(key2==0)
{
price=6;
num=1;
}
}
elseif(key3==0)
{
delay(80);
if(key3==0)
{
price=10;
num=1;
}
}
}
/*
确定及取消
确定则执行step加一取消则执行step減一
*/
voidapply()
{
if(key7==0)
{
delay(80);
if(key7==0)
{
step++;
}
}
elseif(key8==0)
{
delay(80);
if(key8==0)
{
step--;
}
}
}
/*
计算所选商品所需金额
*/
voidtotalmoney()
{
total_money=price*num;
}
/*
//累加投入币值
*/
voidinmoney()
{
if(key4==0)
{
delay(80);
if(key4==0)
in_money+=1;
}
elseif(key5==0)
{
delay(80);
if(key5==0)
in_money+=5;
}
elseif(key6==0)
{
delay(80);
if(key6==0)
in_money+=10;
}
}
/*
计算所需退还币值
*/
voidbackmoney()
{
back_money=in_money-total_money;
}
/*
显示函数每一步显示不同的内容
*/
voiddisplay()
{
if(step==1)
{
P2=0x04;
totalmoney();
P0=table1[total_money%10];
delay(80);
P2=0x08;
P0=table1[total_money/10];
delay(80);
}
elseif(step==2)
{
P2=0x04;
inmoney();
P0=table1[in_money%10];
delay(80);
P2=0x08;
P0=table1[in_money/10];
delay(80);
}
elseif(step==3)
{
P2=0xf0;
backmoney();
if(back_money<0)
{
step--;
P0=table1[in_money];
}
if(back_money>=0)
{
P2=0x04;
backmoney();
P0=table1[back_money%10];
delay(80);
P2=0x08;
P0=table1[back_money/10];
delay(80);
reset();
}
else
P0=tabl