自动售货机控制器的设计.docx
- 文档编号:24639164
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:32
- 大小:313.71KB
自动售货机控制器的设计.docx
《自动售货机控制器的设计.docx》由会员分享,可在线阅读,更多相关《自动售货机控制器的设计.docx(32页珍藏版)》请在冰豆网上搜索。
自动售货机控制器的设计
第一章绪论…………………………………………………………………………2
1.1设计任务和要求…………………………………………………………………2
1.1.1设计任务…………………………………………………………………2
1.1.2设计要求…………………………………………………………………2
1.2工作原理…………………………………………………………………………2
1.3设计思路和功能…………………………………………………………………2
第二章方案论证……………………………………………………………………4
2.1方案设计………………………………………………………………………4
2.2.1方案1……………………………………………………………………4
2.1.2方案2………………………………………………………………………4
2.1.3方案3………………………………………………………………………5
2.2方案比较…………………………………………………………………………5
第三章硬件设计……………………………………………………………………7
3.1设计思路…………………………………………………………………………7
3.2硬件设计方案……………………………………………………………………8
3.3硬件设计概要……………………………………………………………………8
3.3.1货币投入和选择货物……………………………………………………8
3.3.2显示部分…………………………………………………………………10
3.3.3货物输出与退币部分……………………………………………………11
第四章软件设计…………………………………………………………………12
4.1整体设计思路…………………………………………………………………12
4.2系统流程图……………………………………………………………………12
4.3软件程序………………………………………………………………………14
4.4软件仿真与调试………………………………………………………………20
4.4.1Proteus简介…………………………………………………………20
4.4.2仿真结果………………………………………………………………20
第五章设计总结……………………………………………………………………26
5.1调试结果……………………………………………………………………26
5.2调试问题……………………………………………………………………26
总结…………………………………………………………………………………27
参考文献……………………………………………………………………………28
摘要
自动售货机是劳动密集型的产业构造向技术密集型社会转变的产物。
本文设计了一种以AT89C51单片机为核心的自动售货机装置的控制系统。
详细介绍了自动售货机系统的方案论证、硬件设计、软件设计和结果仿真,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧。
该系统以单片机AT89C51芯片为核心,采用集中控制方式实现了对自动售货机全过程的自动控制。
本系统选择独立按键模拟货物选择端,选择LED和继电器模拟货物输出,实现了货物的掉出以及货币数的显示功能。
此外,系统程序采用keil软件进行程序的编写和编译,该软件具有编程简单、查错方便、阅读容易等特点。
汇编语言是程序的基本语言,具有容易理解,便于记忆和使用等特点。
关键词:
自动售货机控制系统89C51单片机
第一章绪论
随着科技的发展及人们生活水平的提高,自动售货机市场的发展越来越呈现出多元化及个性化的需求。
通过自动售货机进行自助购物正逐渐成为市民的一种新的消费时尚,快捷方便的购物方式满足了人们在当今科技高速发展的现代社会追求高品质生活的需要。
自动售货机已经成为城市各角落的一道亮丽风景线,其必将在国内普及,并成为城市现代文明程度的一种象征性标志。
本文详细介绍了自动售货机系统的方案论证、硬件设计、软件设计和结果仿真,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧。
共分为五章,系统介绍了自动售货机系统从控制方案,操作逻辑到系统软件等各个环节的设计及系统调试的方法和原则。
1.1设计任务和要求
1.1.1设计任务
自动售货机控制器的设计
1.1.2设计要求
用MCS—51系列单片机设计一种简易的售货机,只识别1元和5元硬币(5元硬币可以在服务台用纸币兑换),不识别纸币。
基本要求:
1)啤酒每罐3元,可乐每罐5元。
投入金额等于或超过定价时,相应的营业灯亮,同时用LED显示投入金额。
营业灯亮,按相应按钮,即可取货。
2)选择啤酒或可乐后,找钱金额进行显示3s。
3)投入金额均为硬币,以1元和5元为单位。
售货机按照币值进行计数。
1.2工作原理
1)从投币口送入货币,然后通过传感器采集数据、识别器判断货币的
面值。
2)识别器把信息数据传给单片机。
3)单片机通过八位动态数码管显示投入金额,投入金额等于或超过定
时,相应的营业灯亮。
4)按相应按钮,售货机自动把商品送出,等待顾客取走。
5)显示余额,顾客可以选择找币或者继续买商品亦可继续投币如果选
择找币,系统会自动延时将硬币退出。
6)系统复零,完成售货。
1.3设计思路和功能
1)采用单片机MSC-51系列作为中央控制元件;
2)用P3.4和P3.5作为识别货币输入端;
3)P1作为货物选择选择端;
4)P2.7和P2.6分别作为8255A的片选输入端。
第二章方案论证
根据设计要求,该系统由以下四个部分组成,分别是预设硬币投入、金额累计、可售指示和退币系统。
经我们小组多次讨论,总结,从多个方案选择最佳的方案进行设计。
2.1方案设计
2.1.1方案1
此方案中,自动售货机系统以FPGA器件作为处理和控制核心,能完成货物的信息存储,进程控制,硬币处理,余额计算,显示等功能。
系统根据用户输入的货币,判断钱币是否足够,足够则售货,不够则提示并退出。
系统自动的计算出应找钱币余额、库存数量并显示。
系统按功能分为:
分频模块、控制模块、译码模块、译码显示模块。
方案1的系统组成方框图:
2.1.2方案2
基于PLC的方案设计,自动售货机控制系统设计主要有三个功能模块,一个为售货机输入模块:
该模块能完成货物信息的存储,硬币处理,余额计算。
一个为中央处理模块:
功能主要是硬件实验板上让两路信号同时在两个7段数码管上显示出来。
另一个为输出控制模块:
该模块主要是控制输出信号来控制阀门打开与找钱,并且控制阀门的打开时间。
方案2的系统组成框图
2.1.3方案3:
基于单片机的自动售货机设计,选择AT89C51单片机在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和I/O口等基本功能部件。
各功能部件由内部总线连接在一起。
89C51基本结构见图3-6所示。
图3-689C51单片机基本结构图
CPU是单片机的核心部件,由运算器和控制器等部件组成。
运算器的功能主要是进行算术运算和逻辑运算。
由8位ALU单元,两个8位的暂存器,8位的累加器ACC、B寄存器,程序状态寄存器PSW等组成。
控制器用于控制单片机各部分的运行,由程序计数器PC,指令寄存器、译码器及定时控制逻辑和数据指针DPTR组成。
2.2方案比较
方案1功能模块较多,且每个功能模块下还包括几个程序模块,设计起来,程序输入必然很多很繁琐,当然涉及到的问题就较多,较复杂,而且对clk的分频也有多次,这不太利于功能和时序仿真,也不太利于最后在硬件实验板上进行模拟实验。
方案2设计程序简单,操作简单,但其PLC价格太高,并维护费用高,过程复杂,输入输出电压过高,在人口活动较高的地方,售后机的显示,输出都是小功率,不适合使用,不经济。
方案3功能模块较少,但是功能实现都一样,这就减少了程序的繁冗,最后电路图显得就更加简短明了,越少的中间环节,实际操作起来肯定相对要容易一些。
另外单片机的工作电压低,价格便宜,运行可靠,经济,维护费用不高。
所以最后选择方案,最终考虑使用AT89C51单片机。
第三章硬件设计
3.1设计思路
自动售货机是集光、机、电一体化的独立结构,它只需要顾客投币和按购物键选择即可自动售货及退找零钱,其工作程序如下图3-1
图3-1自动售货机工作时序图
售货机的工作原理是:
1)从投币口送入货币,然后通过传感器采集数据、识别器判断货币的
面值。
2)识别器把信息数据传给单片机。
3)单片机通过八位动态数码管显示投入金额,投入金额等于或超过定
时,相应的营业灯亮。
4)按相应按钮,售货机自动把商品送出,等待顾客取走。
5)显示余额,顾客可以选择找币或者继续买商品亦可继续投币如果选
择找币,系统会自动延时将硬币退出。
6)系统复零,完成售货。
由于系统的局限性,本次设计有按钮来代替货币的投入动作,分别有1元和5元两种投币金额,使用89C51为系统的核心,完成投币、装货、金额计算、清零等操作,使用8位共阴极LED显示器来显示投入金额。
3.2硬件设计方案
系统的硬件部分主要包括货币投入、选择货物、显示、货物输出、退币以及主机,系统的结构框图如图3-2
图3-2系统结构框图
3.3硬件设计概要
系统的硬件电路主要包括投币输入、选择货物、货物输出、退币、显示以及主机这几个重要组成部分。
主机:
核心是89C51,晶振频率为12MHz。
投币输入:
投币的币值主要有1元和5元两种,在本次设计中由按钮来实现两种投币动作,每按一下代表投一次,之后通过89C51处理再显示在LED上。
退币和货物输出:
由89C51输出链接继电器来实现。
3.3.1货币投入和选择货物
1)在本次设计中由于条件所限货币的投入由键盘来实现,货物的选择同样由按键盘实现。
2)键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。
一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。
3)按键开关的抖动问题
4)组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。
在下图中,当开
图1
图2
关S未被按下时,P1。
0输入为高电平,S闭合后,P1。
0输入为低电平。
由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1。
0输入端的波形如图2所示。
这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。
前面我们讲到中断时曾有个问题,就是说按键有时灵,有时不灵,其实就是这个原因,你只按了一次按键,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。
为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:
硬件方法和软件方法。
单片机中常用软件法,因此,对于硬件方法我们不介绍。
软件法其实很简单,就是在单片机获得P1。
0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。
0口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时的抖动时间。
而在检测到按键释放后(P1。
0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。
不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。
当然,实际应用中,对按键的要求也是千差万别,要根据不同的需要来编制处理程序,但以上是消除键抖动的原则。
键盘与单片机的连接
图3
图4
通过1/0口连接。
将每个按键的一端接到单片机的I/O口,另一端接地,这是最简单的方法,如图3所示是实验板上按键的接法,四个按键分别接到P3.2、P3.3、P3.4和P3.5。
对于这种键各程序可以采用不断查询的方法,功能就是:
检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。
2、采用中断方式:
如图4所示。
各个按键都接到一个与非上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做相应的处理。
3、K1模拟一块硬币输入,K2模拟五块硬币输入,K3模拟可乐输出,K4模拟啤酒输出,K5模拟退币。
3.3.2显示部分
在单片机系统中,通常用LED数码显示器来显示各种数字或符号。
由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
八段LED显示器由8个发光二极管组成。
基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。
LED显示器有两种不同的形式:
一种是8
个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED显示器。
如下图所示。
共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。
当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。
8个笔划段hgfedcba对应于一个字节(8位)的D7D6D5D4D3D2D1D0,于是用8位二进制码就可以表示欲显示字符的字形代码。
例如,对于共阴LED显示器,当公共阴极接地(为零电平),而阳极hgfedcba各段为0111011时,显示器显示"P"字符,即对于共阴极LED显示器,“P”字符的字形码是73H。
如果是共阳LED显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。
在单片机应用系统中,显示器显示常用两种方法:
静态显示和动态扫描显示。
所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小。
动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。
其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。
CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。
而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
3.3.3货物输出与退币部分
由89C51输出直接接继电器来模拟货物的输出和退币。
当单片机没有输出的时候把它的端口置低,当程序执行货物输出和退币的时候,端口为高电平,这时继电器动作,并且动作后延时,以此来充分的模拟货物输出和退
第四章软件设计
4.1整体设计思路
5)由按键模拟投币,且用两个按键分别模拟1元和5元,分别接P1.0和P1.2口。
6)货物的选择由两个按键组成,P1.1接啤酒选择键,P1.3接可乐选择键。
7)两个营业灯由发光二极管显示,P0.0接啤酒营业灯,P0.1接可乐营业灯。
8)取货和找钱由继电器来模拟,P0.2接取货的继电器,P0.3接找钱的继电器。
9)完成购物后按结束键来找钱,P1.6接结束键。
10)P2口接八位数码管。
11)段锁存和位锁存分别接P1.4和P1.5
4.2系统流程图
4.3软件程序
/*-----------------------------------------------
名称:
自动售货机控制程序
编写:
shiweisong
日期:
2013.6.22
修改:
无
------------------------------------------------*/
#include
sbitKEY_ADD1=P1^0;//定义按键输入端口
sbitKEY_DEC3=P1^1;//定义按键输入端口
sbitKEY_ADD5=P1^2;//定义按键输入端口
sbitKEY_DEC5=P1^3;//定义按键输入端口
sbitKEY_STOP=P1^6;
#defineDataPortP2//定义数据端口程序中遇到DataPort则用P2替换
sbitLATCH1=P1^4;//定义锁存使能端口段锁存
sbitLATCH2=P1^5;//位锁存
sbitLED_YY_pijiu=P0^0;
sbitLED_YY_kele=P0^1;
sbitQUHUO=P0^2;
sbitZHAOQIAN=P0^3;
Unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0~9
unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsignedcharTempData[8];//存储显示值的全局变量
voidDelayUs2x(unsignedchart);//函数声明
voidDelayMs(unsignedchart);
voidDisplay(unsignedcharFirstBit,unsignedcharNum);
voidInit_Timer0(void);
DELAY()
{
unsignedinti;
for(i=0;i<60000;i++);
}
voidmain(void)
/*------------------------------------------------
主函数
------------------------------------------------*/
{
unsignedcharnum=0;
KEY_ADD1=1;//按键输入端口电平置高
KEY_DEC3=1;//按键输入端口电平置高
KEY_ADD5=1;//按键输入端口电平置高
KEY_DEC5=1;//按键输入端口电平置高
Init_Timer0();
while
(1)//主循环
{
if(!
KEY_ADD1)//如果检测到低电平,说明按键按下
{
DelayMs(10);//延时去抖,一般10-20ms
if(!
KEY_ADD1)//再次确认按键是否按下,没有按下则退出
{
while(!
KEY_ADD1);//如果确认按下按键等待按键释放,没有释放则一直执行数码管扫描,防止闪烁
{
if(0 num=num+5; } } } if(! KEY_ADD5)//如果检测到低电平,说明按键按下 { DelayMs(10);//延时去抖,一般10-20ms if(! KEY_ADD5)//再次确认按键是否按下,没有按下则退出 { while(! KEY_ADD5);//如果确认按下按键等待按键释放,没有释放则一直执行数码管扫描,防止闪烁 { if(num<99)//加操作 num++; } } } if(! KEY_DEC3)//如果检测到低电平,说明按键按下 { DelayMs(10);//延时去抖,一般10-20ms if(! KEY_DEC3)//再次确认按键是否按下,没有按下则退出 { while(! KEY_DEC3);//如果确认按下按键等待按键释放,没有释放则一直执行数码管扫描,防止闪烁 { if(num>2)//减操作 { num=num-3; if(num>=0) { QUHUO=1; DELAY(); QUHUO=0; } } } } } if(! KEY_DEC5)//如果检测到低电平,说明按键按下 { DelayMs(10);//延时去抖,一般10-20ms if(! KEY_DEC5)//再次确认按键是否按下,没有按下则退出 { while(! KEY_DEC5);//如果确认按下按键等待按键释放,没有释放则一直执行数码管扫描,防止闪烁 { if(num>4)//减操作 { num=num-5; if(num>=0) { QUHUO=1; DELAY(); QUHUO=0; } } } } } if(! KEY_STOP)//如果检测到低电平,说明按键按下 { DelayMs(10);//延时去抖,一般10-20ms if(! KEY_STOP)//再次确认按键是否按下,没有按下则退出 { while(! KEY_STOP);//如果确认按下按键等待按键释放,没有释放则一直执行数码管扫描,防止闪烁 { if(0 { ZHAOQIAN=1; DELAY(); ZHAOQIAN=0; DELAY(); num=0; } } } } if(0 { LED_YY_pijiu=1;//灯全灭 LED_YY_kele=1; if(num>2)//如果投币金额大于等于3元 { LED_YY_pijiu=0;//啤酒灯亮 } if(num>4)//如果投币金额大于等于5元 { LED_YY_kele=0;//可乐灯亮 } } TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=668%10=8 TempData[1]=dofly_DuanMa[num%10]; //Display(0,8);//显示全部8位 //主循环中添加其他需要一直工作的程序 } } /*------------------------------------------------ uS延时函数,含有输入参数unsignedchart,无返回值 unsignedchar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 售货 控制器 设计