基于单片机的自动售货控制系统设计(共29页).doc

上传人:飞****2 文档编号:13420182 上传时间:2022-04-29 格式:DOC 页数:29 大小:515KB
返回 下载 相关 举报
基于单片机的自动售货控制系统设计(共29页).doc_第1页
第1页 / 共29页
基于单片机的自动售货控制系统设计(共29页).doc_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《基于单片机的自动售货控制系统设计(共29页).doc》由会员分享,可在线阅读,更多相关《基于单片机的自动售货控制系统设计(共29页).doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上基于单片机的自动售货控制系统设计摘 要本文设计了一个基于AT89C51单片机的自动售货控制系统,文中详细的介绍了设计方案的实施背景,各种元器件的选择,系统模块的划分以及功能的实现。该系统模块划分清晰,采用按键实现人机的友好交互。以C语言为开发语言,可读、易理解性大大提高。开发环境为Keil,Proteus有机结合,keil实现代码的编写、修改、编译,Proteus则对编译好的代码在模拟器件上进行仿真。有效的提高了开发效率。系统最终实现了货物选择、投币显示、退币显示、出货显示等一系列功能。关键词:AT89C51;自动售货机;PROTEUSThe Design of Ve

2、nding Control Systems Based on SCMPeng xin Yi(College of Physics, Mechanical and Electrical Engineering, JishouUniversity, Jishou, Hunan )AbstractVending system based on AT89C51 is designed in this paper, which contains a detailed description of the implementation of the background of the design, th

3、e choice of the various components, division and function of the system module. The modular division of system is clear, using the key to achieve human-machine friendly interaction. C language for the development of language contributes readable, easy to understand greatly improved. Development Envi

4、ronment is Keil and Proteus. The keil is used to implement code of write, modify and compile, at the same time, proteus implements simulation. These effectively improve the development efficiency. System achieves a series of functions such as cargo selection, coin and currency recreation and shipmen

5、t show.Key words: AT89C51; Vending machine; PROTEUS目 录专心-专注-专业第一章 绪 论1.1 自动售货机的历史及发展前景据说世界上最早的自动售货机出现在公元前3世纪,那是埃及神殿里的投币式圣水出售机。17世纪,英国的小酒吧里设有了香烟的自动售货机。在自动售货机历史的长河中,日本开发出实用型的自动售货机,那是在进入本世纪后的事。日本第一台自动售货机是1904年问世的“邮票明信片自动出售机”,它是集邮票明信片的出售和邮筒投函为一体的机器。自动售货机的真正普及是在第二次世界大战以后。50年代,“喷水型果汁自动售货机”大受欢迎,果汁被注入在纸杯里出售

6、。后来,由于美国的饮料大公司进入日本市场,1962年,出现了以自动售货机为主体的流通领域的革命。1967年,100日元单位以下的货币全部改为硬币,从而促进了自动售货机产业的发展。现在,自动售货机产业正在走向信息化并进一步实现合理化。例如实行联机方式,通过电话线路将自动售货机内的库存信息及时地传送各营业点的电脑中,从而确保了商品的发送、补充以及商品选定的顺利进行。并且,为防止地球暖化,自动售货机的开发致力于能源的节省,节能型清凉饮料自动售货机成为该行业的主流。在夏季电力消费高峰时,这种机型的自动售货机即使在关掉冷却器的状况下也能保持低温,与以往的自动售货机相比,它能够节约1015%的电力。进入2

7、1世纪时,自动售货机也将进一步向节省资源和能源以及高功能化的方向发展。1.2 自动售货控制系统设计的意义自动售货机从问世以来就备受关注,因其无需专人守护而可以每天24小时售货,被称为“微型超市”。自动售货机的核心在其控制系统,它能够准确的识别币值以及货品,控制自动售货机接受钱币然后选出顾客所需的物品。如今是一个智能化的社会,越来越多的智能产品将被研发生产出来,简单实用的自动售货机将会逐步成为人们购物的“优秀售货员”。自动售货装置已经成为一个城市的标志,地铁站内、图书馆旁、大型超市门口都能见到它们的踪影。自动售货装置以其特点:无需专人看管,所占空间不大,方便人们购物在当今的社会中占据重要的地位。

8、一个性能优越的自动售货机取决于它的自动控制系统,采用AT89C51单片机为控制核心是由于AT89C51单片机的可靠性高,编程简单,接口方便,同时配以相应的外围电路来驱动单片机以及实现该系统的其他相关的功能。自动售货装置有着广阔的发展前景及市场,优良的自动售货控制系统的设计将会不断的推动其前进。1.3 本文的主要设计内容本文主要设计了一个自动售货控制系统,从自动售货机的历史、自动售货系统总体分析、自动售货系统硬件设计、自动售货系统软件设计、调试与仿真等五个方面进行。总体分析得出系统的框图和顾客购物流程、元器件的选择,硬件设计采用Proteus模拟连接实物图,软件设计采用c语言编写,keil进行调

9、试,调试与仿真则在Proteus中清晰可见。各部分功能明确,相互协调,共同支配着自动售货系统的有序运行。第二章 自动售货控制系统设计分析2.1 系统总体设计分析现在我们来简单模拟一下顾客的购物流程:当顾客需要从自动售货机购买货物时,顾客首先通过一些外部控件选择自己需要的货物。此时顾客需要知道自己应该支付多少金额,所以自动售货机显示顾客所选货物的总金额。然后顾客可以向自动售货机的投币口投入钱币,自动售货机显示顾客投入的钱币总金额,当投入的金额大于所需的金额的时候,顾客购买的货物将从出货口送出,同时退币口退还顾客多余的金额。根据顾客的购物流程分析,我设计出合理可行的自动售货控制系统框架图如图2-1

10、。开 始系统初始化选购货物确 认投 币售 货找 零NY图2-1 自动控制系统流程图根据自动控制系统的流程图,能够很清晰的得出系统的设计思路:当顾客选择货物的时候,可以采用三个按键来模拟三种货物(本设计提供三种货物供选择),货物多样性更加接近现实;显示模块采用数码管显示顾客所选择的所有货物的金额,金额的计算由内部逻辑处理;投币部分用两个按键来模拟2种币值(本设计提供两种可识别币值);顾客成功购买后,用一个led灯模拟货物的取出(led灯亮则有货物出来,否则没有货物出来);退币部分用三个led灯模拟(分别为1元,2元,2元),三个led灯便于观察,退币金额由内部逻辑根据顾客的选择计算得出。2.2

11、元器件选择1)单片机:选用AT89C51作为控制核心,该单片机是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器。2)晶振:本设计选用的晶振是CRYSTAL,作用在于产生原始的时钟频率,这个频率经过频率发生器的倍频或分频后就成了单片机中各种不同的总线频率。3)排阻:排阻RP1是用来并行口的上拉或者下拉电阻用。4)数码管:4位8段共阳数码管,用来显示投币和找零金额。5)一般电阻:设计中需要用到的电阻均是起下拉作用,用来稳定系统。6)电容:本设计中所用到的电容有3个,其中2个是去耦电容,其起作用一方面是本集成电路的蓄能电容,另一方面旁路掉该器件的高频噪声, 起到抗干扰的作用。1

12、个接复位输入端口,与外接电阻构成复位电路。7)按键:选用9个独立按键,5个按键用来代表货物的不同价格,1个用来确认,1个用来取消,还有2个用来模拟货币投入。2.3 开发工具Keil uVision2是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,功能上、结构性、可读性、可维护性上有明显的优势,它还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效、快速的特点。C51已被完全集成到uVision2的集成开发环

13、境中,这个集成开发环境包含:编译器,汇编器,实时操 作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。第三章 自动售货控制系统硬件设计3.1 硬件

14、总体框图经过分析自动售货控制系统的设计得出自动售货控制系统的总体框图如3-1。系统由AT89C51单片机为控制核心,外围电路有AT89C51单片机驱动电路,货物选择按键电路,数码管显示电路,取货显示,退币显示以及投币电路。各部分相互协调工作,共同完成自动售货控制系统的运行。AT89C51单片机单片机驱动模块货物选择按键电路数码管显示电路取货显示退币显示投币电路图3-1总体框图3.2 AT89C51单片机模块AT89C51是一种带4K字节FLASH(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器

15、,俗称。AT89C51是一种带2K字节闪存可编程可擦除的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。外形及引脚排列如图3-2(a)(b)所示:(a)AT89C51外部结构图 (b)AT89C51引脚图图3-23.2.1 管脚说明(1) VCC:供电电压。(2) GND:接地。(3) P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义

16、为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。(4) P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 (5) P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写1时,其管脚被内部上拉电阻拉高,且

17、作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址1时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。(6) EA/VP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器,注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器在FLASH编程期间,此引脚也用于施加12V编程电源

18、(VPP)。(7) P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入1后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为AT89C51的功能口,如表3-1所示。P3口同时为闪烁编程和编程校验接收一些控制信号。表3-1 P3口功能P3口口管脚备选功能P3.0 RXD串行输入口P3.1 TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 T0记时器0外部输入P3.5 T1记时器1外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部

19、数据存储器读选通(8)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。(9)ALE/P:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。(10)

20、PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。(11)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。(12)XTAL2:来自反向振荡器的输出。3.2.2 AT89C51单片机的主要特性AT89C51单片机与MCS-51微控制器产品系列兼容;片内有4KB可在线重复编程的快闪擦写存储器 ;存储数据保存时间为10年 ;宽工作电压范围VCC可为2.7V到6V ;全静态工作可从0Hz至16MHz ;程序存储器具有3级加密保护 ;128*8位内部RAM ;32条可编程I/O线 ,两个16

21、位定时器/计数器 ;中断结构具有5个中断源和2个优先级 ,可编程全双工串行通道 ,空闲状态维持低功耗和掉电状态保存存储内容。3.2.3 芯片擦除整个PEROM阵列和三个锁定位的点擦除可通过正确的控制信号组合,并保持LE管脚处于低电平10ms来完成。在芯片擦除操作中,代码阵列全被写1且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停在工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为

22、止。3.3 单片机驱动系统模块单片机驱动模块是用来驱动单片机工作的电路,由2个去耦电容与晶振并联接入晶振接口,构成时钟电路,为单片机提供时钟信号;复位电容与一电阻接入复位接口,是为系统提供初始化信号。根据需求可以设计出该驱动模块的实际电路图如图3-3所示:图3-3 AT89C51单片机的驱动电路图中C1,C2均为20pf的去耦电容,C3为10u的复位电容,X1为12M的晶振,R1上拉电阻,晶振X1两端分别与C1,C2的一端相连并接入晶振接口XTAL1,XTAL2。C1,C2的另一端接R1的一端并一起接地,R1的另一端与C3一端接入复位接口,C3的另一端接片内存储器,并接入电源接口。C1,C2,

23、X1构成时钟电路,为单片机提供时钟信号。此单片机片内存储器有效,可使用片内存储器,不用外部拓展,R1起下拉作用,稳定系统。3.4 系统显示模块系统显示模块采用4位8段共阳数码管显示金额。首先显示所选物品金额,然后显示投入金额,最后显示找还金额。P0口没有内置上拉电阻,要在外部接排阻上拉,数码管段选接P0口,为选经过三极管驱动与P2.0-P2.3相接。3.4.1 数码管显示器显示器用以显示所选物品总金额、投入金额、退还金额。LED显示器是由发光二极管显示字段的显示器件,也可称为数码管。系统中通常使用8段LED数码显示器,其外形及引脚如图2-5(a)所示,由图可见8段LED显示器由8个发光二极管组

24、成。其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,通过不同的组合可用来显示各种数字,包括AF在内的部分英文字母和小数点“”等字样。 LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称为共阴极LED显示器,我们选择其中一种共阳极.如图2-5(b)所示: 图3-4 8段LED数码显示器LED显示器有动态显示和静态显示.由于静态显示器硬件要求比较高,而且显示的位数不如动态显示器多,为此我们选择8位的动态LED显示器.动态LED显示器是将所有位显示器并接到I/

25、O接口,用两个锁成器,一个用以选位,另一个用以选段,具体连接总图上有。3. 4. 2 显示器的驱动电路下图中RP1为排阻,因为P0口没有内置上接电阻,需要在外部接排阻进行上拉,数码段选接P0口,位选与P2.0-P2.3相连接。位选的接口为低电平是该位被选中,能够显示数据,为高电平时,该位不被选中,则不亮,不能显示任何数据。此显示器驱动电路如图3-5所示:图3-5 显示器驱动电路图3.5 货币识别投入电路模块货币识别电路采用两个按钮开关模拟,第一个按钮开关表示投入1元硬币,第二个按钮开关表示投入5元纸币,该系统只能识别这两种币值。货币识别投入电路如图3-6所示:图3-6货币识别投入电路图3.6

26、货品选择按键模块键盘为7个独立按键,按键1-5是购物键,分别代表了1元、2元、3元,数量2、数量3不等的货物价格的数量,6按键是确认键,用户在选定所欲购买的货物后必须按确认键,6是取消键,当某个操作错误是可以按取消键返回上一级菜单。该模块中7个键并联,一端接公共地,一端接单片机的P1.0-P1.6口。按键选择电路如图3-7所示:图3-7按键选择电路3.7 出货、退币模块出货、退币模块才用4个led灯模拟,第一个为货物指示灯,当顾客投币完成后,币值足够是该led灯亮,表示有货物出来。其余3个模拟找零,分别为1元、2元、2元(便于模拟),但某个通道的灯亮了,说明该通道有退币。出货、退币电路图如图3

27、-8所示:图3-8出货、退币电路3.8 小结系统硬件的设计需满足设计要求,各电路要简洁、实用。单片机的选择要满足设计要求,驱动电路要为单片机提供时钟信号及正常工作的功率驱动;按键电路即系统的输入电路,用户利用按键系统输入信号;显示电路由数码管显示用户所投货币的金额和找零金额;货币识别投入电路用按键模拟货币的投入。第四章 自动售货控制系统软件设计4.1 C51语言的优缺点现在有四种语言支持8051系列单片机编程,即汇编、PL/M,C和BASIC,在开发中最常用的是汇编语言,但随着程序复杂程度的提高,汇编语言逐渐暴露了它的不足,BASIC适合于初学者或要求编程简单而对编程效率和运行速度不高的场合。

28、PL/hi对8051系列单片机来讲,不支持复杂的算术运算和浮点变量,无丰富的库函数支持。C语言是一种源于编写UNIX 操作系统的语言,是一种结构化语言,可产生紧凑代码。为了更好地实现对单片机的开发,C51应运而生。每个不同公司开发的C51不尽相同,本系统采用的是Keil Elektronik Gmbh开发的KeiluVision2工具软件来进行系统软件编写和调试的。在嵌入式系统中,相对于汇编语言,C语言作为一种高级语言主要存在两个不足:一,生成的可执行代码冗长,效率不高。对于这一点,随着处理芯片运算速度的提高、集成ROM的扩大,特别编译系统的不断优化,冗长已经不再是问题。这也是C在嵌入式系统中

29、逐渐成为主流编程语言的主要原因之一。二,C生成的可执行代码在时序上不容易控制,比如本系统中要实现的时序控制。一般的解决方案是在C程序中嵌入汇编语句,但其实只要充分挖掘C的潜力,在时序要求严格的场合完全可以用C语言实现。具体方法就是阅读开发环境给我们提供的反汇编代码。反汇编代码一目了然的反映了微控器的运行时序,然后根据反汇编代码修改C源程序。4.2 Keil和Proteus开发步骤Keil对于单片机开发是十分有用的,开发效率高、操作简单、功能齐全。Keil开发步骤清晰易懂:启动Keil、新建工程、新建文本、编写源程序、编译。在编译产生.hex文件时需要注意,选中output的create HEX

30、 File才能在文件目录生成.hex的文件。Proteus在硬件构图方面功能强大,但是Proteus的使用难度也比较大。在本设计中,Proteus开发流程为:启动Proteus、新建工程、选取元器件、连接电路图、添加.hex文件、运行查看结果。Keil和Proteus结合开发能够使得开发更为简单,开发流程图如图4-1所示:启动keil新建工程新建文本文本加入工程编写程序编译启动Proteus新建工程选取元器件连接电路图添加.hex文件运行生成.hex文件图4-1 Keil和Proteus开发流程图4.3 主要模块软件设计根据控制系统的设计要求及硬件设计,该系统的软件采用模块化的设计方法,编程语

31、言为C语言。代码模块包括:主程序模块、按键扫描及键值识别模块、数码管显示及售货模块、货币识别投入及找零处理模块。源程序见附录。4.3.1 按键扫描及键值识别模块该模块使用7个独立按键模拟顾客选择货物,程序设计时通过判断对应按键的接口的电平为高/低来确定顾客的选择,如果接口为低电平表示按键被按下。在判断按键是否被按下的过程中,采用软件的办法消除按键抖动,具体的方法为首先判断接口是否为低电平,如果为低电平则进行短暂的延时,然后在判断该接口是否为低电平,如果仍然为低电平,那么表示该按键确实已经被按下,触发对应的处理逻辑。按键1到按键3表示货物的品种,按键4和按键5表示顾客选择货物的数量,按键6表示确

32、定,按键7表示取消。顾客每次选择了后都需要按下按键6来确定,通过显示模块会给顾客良好的提示。4.3.2 数码管显示电路数码管接在单片机的P0口,由于P0口没有上拉电阻,所以需要外接上拉电阻。数码管采用动态显示,首先用一个数组table保存0-9的对应的数码管显示十六进制。通过逻辑计算得出需要显示的数据后,使用tablei来取出对应的数据置于P0口。调用显示函数时:首先判断顾客购物处于哪一步,第一步表示顾客选择货物,第二步表示顾客投入的币值,第三步表示应退还的币值。同时数码管显示对应步骤的数据,在第三步中,如果顾客投入的币值小于应付的币值,那么步骤退一步,同时显示为投入的币值。4.3.3 投币电

33、路投币电路采用两个按键模拟,一个表示1元,一个表示5元。当系统处于投币阶段的时候,判断投币按键是否被按下,如果被按下则表示有钱币投入,根据按键按下的次数对投入币值进行累加。投币结束后需要按确认键让系统进入下一个阶段。同时数码管会显示投入总币值。4.4 小结系统软件设计主程序以调用其他功能函数为主,每一个模块单独写一个函数,代码可读性、可移植性性、安全性大大提高。主函数只需调用功能函数,主程序简单精简,系统运行效率提高。第五章 调试与仿真5.1 调试与仿真 为了使设计更加的清晰明了,我采用了Proteus来进行仿真。主要仿真的步骤与结果如下: 第一步:打开Proteus程序,根据硬件总体设计完成

34、元器件的布局和连线如图5-1所示:图5-1 硬件结构图第二步:在keil中编译源程序,如图5-2所示。生成.hex文件,将.hex文件添加到AT89C51。每次修改更新源程序后都应该重新编译产生.hex文件。在keil界面的下部分消息提示栏观察是否有警告、错误,是否成功生成.hex文件。图5-2 源程序编译第三步:点击Proteus的运行按钮,得到初始化的状态图如图5-3所示。此时系统处于第一阶段,只有按键1到按键5有效,其他按键对系统不产生影响。数码管显示为初始0,led灯全部为灭的状态。图5-3 初始化第四步:点击选择按钮(此次模拟先按按键1,按后按按键5),然后确定(按键6)。数码管显示

35、所选取物品的总价格如图5-4所示。此时系统处于第二阶段,按键8和按键9投币电路有效,数码管显示所选货物的总金为3元,led全部为灭的状态。图5-4 选择物品价格第五步:点击投币按钮(此次模拟先按按键8,按后按按键8),然后确定(按键6)。数码管显示投入币值如图5-5所示。此时系统处于第三阶段,按键8和按键9有效。数码管显示投入总币值为6元,led为全灭状态。图5-5 投币统计第六步:确定后,数码管显示退币币值以及取货、退币led的显示如图5-6所示。此时系统处于第四阶段,数码管显示退还币值为3元,出货口led为亮,一个1元、一个2元退币灯为亮的状态。图5-6 退币、取货5.2 不足与改进源程序

36、在调试的时候出现了一些语法错误,经过仔细的分析和修改,最终通过编译。该程序已经能够完成自动售货控制系统的基本功能,在硬件方面,本设计还有一些能够改进的地方:数码管显示模块可以改用LCD液晶显示器来显示,通过中文的方式给顾客提示,人机交互更加友好;投币电路通过光感电路模拟,效果更好。软件设计跟随硬件设计的改变做相应的变化,设计更加贴近现实。 总 结本设计以AT89C51单片机为控制核心,周围配备有单片机驱动电路、按键选择电路、数码管输出显示电路、led输出显示电路、投币电路等,成功的模拟了自动售货系统的运行原理。设计所用到的开发软件为Keil和Proteus,开发语言为C语言。通过这次毕业设计,

37、我对电子器件有了进一步的了解,加强了我对单片机的基本原理、单片机应用系统开发过程的了解以及遇到问题时对实际问题的分析解决能力,提高了应用Keil软件和Proteus软件的能力。让我对过去所学知识有了一个整体的认识。在设计的过程中,我遇到了很多的问题,在老师及同学的帮助下,最终都成功解决了,同时老师对我的毕业设计提供了许多宝贵的意见,在此对他们表示感谢。参考文献1 谢维成,杨加国.单片机原理与应用及C51程序设计M. 北京:清华大学出版社, 2009-7.2 阎石. 数字电子技术第四版M. 北京:化学工业出版社, 2004-5.3 潘新民. 微型计算机控制技术M. 北京:人民邮电出版社, 199

38、9-9.4 胡汉才. 单片机原理及其接口技术M. 北京:清华大学出版社, 1996-3.5 尹建华. 微型计算机原理与接口技术第二版M. 北京:高等教育出版社, 2008-1.6 谭博学,苗汇静. 集成电路原理及应用第二版M. 北京:电子工业出版社, 2008-1.7 黄正瑾. 在线编程技术M. 北京:清华大学出版社, 1996-2.8 谢自美. 电子线路设计、实验、测试M. 北京:人民邮电出版社, 1999-9.9 周润景、张丽娜、丁莉. 基于PROTEUS的电路及单片机设计与仿真M. 北京:航空航天大学出版社, 2010-1. 10 彭伟. 单片机C语言程序设计实训100例M. 北京:电子

39、工业出版社, 2009-6.11 陈海宴. 51单片机原理及应用基于keil c与ProteusM. 北京:航空航天大学出版社, 2010-7.附 录源程序:#include/位定义sbit key1 = P10; /选择1元物品sbit key2 = P11; /选择2元物品sbit key3 = P12; /选择3元物品sbit key4 = P13; /数量选为2sbit key5 = P14; /数量选为3sbit key6 = P15; /确认sbit key7 = P16; /取消sbit key8 = P36; /1元硬币sbit key9 = P37; /5元纸币int ste

40、p = 1; /操作的步骤int price = 0; /物品价格int num = 1; /物品数量int table1 = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/0-9对应数码管显示int table2 = 0xe0,0xc0,0xa0,0x80,0x20;/退币控制int total_money = 0; /所选物品一共需要钱币int back_money = 0; /退币值int in_money = 0; /投币值/*延时函数*/void delay(int z)int x,y;for(x=z;x0;x-)for(y=2

41、20;y0;y-);/复位函数 调用时重新初始化void reset()step = 1;price = 0;num = 1;total_money = 0;back_money = 0;in_money = 0;/*选择物品函数 每个按键对应不同的物品价格及数量*/void choose()if(key1=0)delay(80);if(key1=0)num = 1;price = 1;else if(key2 = 0)delay(80);if( key2 = 0)price = 2;num = 1; else if(key3 = 0)delay(80);if( key3 = 0)price

42、= 3;num = 1;if(key4 = 0)delay(80);if( key4 = 0)num = 2;else if(key5 = 0)delay(80);if( key5 = 0)num = 3;/*确定、取消函数 如果确定则step加一 取消step减一 */void apply()if(key6=0)delay(80);if(key6=0)step+;else if(key7=0)delay(80);if(key7=0)step-;/*计算所选物品所需金额*/void totalmoney()total_money = price*num;/*/累加投入币值*/void inmo

43、ney()if(key8=0)delay(80);if(key8=0)in_money+;else if(key9 =0) delay(80);if(key9=0)in_money+=5;/*计算所需退还币值*/void backmoney()back_money = in_money-total_money;/*显示函数 每一步显示不同的内容*/void display () if(step=1)P2 = 0xf0;totalmoney();P0 = table1total_money;else if(step =2)P2 = 0xf0;inmoney();P0 = table1in_money;else if(step = 3)backmoney();if(back_money=0)P2 = table2back_money;P0 = table1back_money;delay(1000);reset( );elseP0 = table11;/*/主函数*/void main()while(1)choose();apply();display();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁