零等操作,使用8位共阴极LED显示器来显示投入金额。
3.2 硬件设计方案
系统的硬件部分主要包括货币投入、选择货物、显示、货物输出、退币以及主机,系统的结构框图如图3-2
CPU 货币投入 货币显示 89C51 货物输出 货物选择
退币
图3-2 系统结构框图
退币显示 3.3 硬件设计概要
系统的硬件电路主要包括投币输入、选择货物、货物输出、退币、显示以及主机这几个重要组成部分。
主机:核心是89C51,晶振频率为12MHz。 投币输入:投币的币值主要有1元和5元两种,在本次设计中由按钮来实现两种投币动作,每按一下代表投一次,之后通过89C51处理再显示在LED上。
退币和货物输出:由89C51输出链接继电器来实现。
3.3.1货币投入和选择货物
1)在本次设计中由于条件所限货币的投入由键盘来实现,货物的选择同样由按键盘实现。
2)键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。
3)按键开关的抖动问题
4)组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。在下图中,当开
11
图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模
12
拟啤酒输出,K5模拟退币。
3.3.2显示部分
在单片机系统中,通常用 LED 数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
八段 LED 显示器由 8 个发光二极管组成。基中 7 个长条形的发光管排列成“日” 字形,另一个贺点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED 显示器有两种不同的形式:一种是 8 个发光二极管的阳极都连在一起的,称之为共阳极 LED 显示器;另一种是 8 个发光二极管的阴极都连在一起的,称之为共阴极 LED 显示器。如下图所示。
共阴和共阳结构的 LED 显示器各笔划段名和安排位置是相同的。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8 个笔划段 h g f e d c b a 对应于一个字节(8 位)的 D7 D6 D5 D4 D3 D2 D1 D0, 于是用 8 位二进制码就可以表示欲显示字符的字形代码。例如,对于共阴 LED 显示器,当公共阴极接地(为零电平),而阳极 h g f e d c b a 各段为 0111011 时,显示器显示\字符,即对于共阴极 LED 显示器,“P ” 字符的字形码是 73H。如果是共阳 LED 显示器,公共阳极接高电平,显示“P ” 字符的字形代码应为 10001100(8CH)。
在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的 I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中 CPU 的开销小。
动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
13
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
3.3.3货物输出与退币部分
由89C51输出直接接继电器来模拟货物的输出和退币。当单片机没有输出的时候把它的端口置低,当程序执行货物输出和退币的时候,端口为高电平,这时继电器动作,并且动作后延时,以此来充分的模拟货物输出和退
14
第四章 软件设计
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 系统流程图
15