【摘 要】本文介绍了AT89S51单片机的性能及特点,设计了以其为核心的一种低成本、高精度、微型化、数字显示的汽车防撞报警器。该防撞报警器将单片机的实时控制及数据处理功能,与超声波的测距技术、传感器技术相结合,可检测汽车运行中后方障碍物与汽车的距离,通过数显装置显示距离,并由发声电路根据距离远近情况发出警告声。对防范汽车倒车事故的发生具有重要的意义。
【关键词】单片机;超声波;防撞;报警
【Abstract】This paper introduces the properties and the characteristics of AT89S51, designs a impact-proof alarm with low cost, high precision, miniaturization, digital display taking it as the core . The impact-proof alarm takes SCM’s real-time control and data processing functions combine with the Ultrasonic ranging technology,the sensor technologies. It is able to detecte the distance of rear obstacle and the automobile, through digital display device shows by sound circuit distance, and according to the distance situation warned. It has the vital significance to prevent automobile reverse accident.
【 keywords 】 Microcontroller; Ultrasonic; Impact-proof; Alarm
目录
引言 .................................................................................................................................................... 1系统设计的目标和任务 ..................................................................................................................
1.1系统设计的基本要求 ........................................................................................................... 1.2系统设计的思路 ................................................................................................................... 1.3方案论证 ...............................................................................................................................
1.3.1发送模块 .................................................................................................................... 1.3.2接收模块 ....................................................................................................................
2 AT89S51单片机与超声波雷达工作原理 ......................................................................................
2.1 AT89S51单片机的概述 ....................................................................................................... 2.2 AT89S51单片机的特点 ....................................................................................................... 2.3 超声波简介 .......................................................................................................................... 2.4超声波测距原理……................................................... 2.5超声波测距误差分析 …
2.5.1 温度误差....................................................
2.5.2 时间误差 …… .................................................. 2.6 影响超声波探测的因素……............................................. 2.7 如何提醒车主......................................................... 2.8 基于CX20106超声波测距的调试 ....................................................................................
1
3系统软件部分设计 .......................................................................................................................... 3.1 倒车雷达的工作原理图……...........................................................................................
3.2超声波系统主流程图 ........................................................................................................... 3.3超声波硬件设计与软件编程 ...............................................................................................
3.3.1复位电路 .................................................................................................................... 3.3.2显示电路 .................................................................................................................... 3.3.3超声波发送与接收模块 ............................................................................................ 3.3.4 报警模块 ...................................................................................................................
4 调试及性能分析 .............................................................................................................................
4.1 硬件调试 .............................................................................................................................. 4.2 软件调试 .......................................................................................................................... 15 4.3测试结果与分析 ................................................................................................................... 5设计总结.......................................................................................................................................... 致谢 ....................................................................................................................................................
引言
随着我国经济的快速发展,交通运输车辆及私家用车的不断增加,不可避免的交通问题瞬时成为人们关注的问题。其中由于倒车事故发生的频率高,已引起了社会和交通部门的高度重视。倒车事故发生的原因是多方面的,造成倒车时的事故率远大于汽车前进时的事故率,尤其是非职业驾驶员以及女性更为突出。而倒车事故给车主带来许多麻烦,不仅经济上,更有人身伤害,例如撞上别人的车,如果伤及儿童更是不堪设想,所以倒车雷达应运而生,倒车雷达的加装可以解决司机的不少麻烦,大大降低了倒车事故的频率。由于存在视觉盲区,无法看清车后状况,司机在倒车时很容易发生事故。为了减少带来的损失,需要有一种专门帮助司机安全倒车的装置。因此,设计一个小车防撞系统也就变得很有必要。目前测量距离一般都采用波在介质中的传播速度和时间关系进行测量。常用的技术主要有激光测距、微波雷达测距和超声波测距三种。超声波具有指向性强、能量消耗缓慢且在介质中传播的距离较远的优点,因此经常用于距离的测量。超声波测距主要用于建筑工地以及一些工业现场和移动机器人研制上,可在潮湿,多尘等环境下工作。相对于其他技术而言,超声波定位技术成本低、工作稳定、精度高、操作简单等优点,非常适用于距离测量定位。AT89S51为小车防撞控制系统提供了稳定、可靠的解决办法,充分利用它的片内资源,实现了超声波测距和报警。
1系统设计的目标和任务
1.1系统设计的基本要求
本次设计的主要内容是设计一种基于单片机汽车防撞报警系统的硬件电路,主要利用单片机对超声波传感器采集的模拟数据的处理及存储。
设计的基本要求: 1.快速自动报警功能:当超声波传感器检测到汽车后方障碍物与汽车的距离小于安全值时,系统能快速进行声光报警。
2.准确地向终端报警:能够及时并准确地向司机进行报警,快速地实现安全检测。
2
3.实时检测功能:监测模块能实时采集汽车与后方障碍物距离的变化,将这些数据定时 传送给单片机,有利于及时了解当前所处情况是否处于安全环境之下。
1.2系统设计的思路
该系统分为监测部分与终端接收部分。 监测部分,通过超声波系统对碰到的障碍物进行检测,再通过单片机系统对接收到的数据进行处理,保证在终端能准确地接收信息,蜂鸣器同时工作;终端接收部分,终端通过单片机分析接收的相关信息,在LED上显示与障碍物的距离。
1.3方案论证
1.3.1发送模块
方案1:采用压电式超声波换能器。压电式超声波换能器是利用压电晶体的谐振来工作的。
方案2:采用反向器74LS04和超声波发射换能器T构成震荡器。这种电路可以提高超声波发射强度,且电路简单,稳定性高。
方案3:单电源乙类互补对称功率放大电路和UCM—40T发射器。利用单电源乙类互补
[5]
对称功率放大大路驱动发射器。
经论证比较,三种方案差距不大,但鉴于用74LS04电路简单。故选择方案2。
1.3.2接收模块
方案1:采用集成电路CX20106A。它是一款红外线检波接收的专用芯片,考虑到红外常用的载波频率38KHZ与测距的超声波40KHZ较为接近,可以利用它制作超声波检测接受电路,且电路简单,灵敏度高,还有较强的抗干扰能力。
方案2:采用uA741构成两级放大电路,这是专用运算放大器,高增益,增益带宽积大,
[6]
抗干扰能力强,可测距离远,精度高。
经论证比较,虽然方案2相对方案1可测的更远,但方案1已可满足项目功能的要求,且方案1电路结构简单,方便调试,故采用方案1。
2 AT89S51单片机与超声波简介
AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89S51单片机的引脚结构如图1所示。
3
图1 AT89S51单片机引脚图
2.2 AT89S51单片机的特点
AT89S51
是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system
programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时
[8]
钟振荡器。 此外,AT89S51设计配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 主要特性:
· 8031 CPU与MCS-51 兼容
· 4K字节可编程FLASH存储器(寿命:1000写/擦循环) · 全静态工作:0Hz-33MHz · 三级程序存储器保密锁定 · 128*8位内部RAM · 32条可编程I/O线
· 两个16位定时器/计数器 · 6个中断源
· 可编程串行通道
· 低功耗的闲置和掉电模式 · 片内振荡器和时钟电路
.
2.3 超声波简介
我们知道,当物体振动时会发出声音。科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹。人类耳朵能听到的声波频率为20~20,000HZ。当声波的振动频率大于20000HZ或小于20HZ时,我们便听不见了。因此,我们把频率高于20000HZ的声波称为“超
4
声波”。超声波广泛地应用在多种技术中。超声波有两个特点,一个是能量大,一个是沿直线传播。由于超声波也是一种声波,超声波在媒质中传播的速度和媒质的特性有关。
声波是物体机械振动状态(或能量)的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动。超声和可闻声本质上是一致的,它们的共同点都是一种机械振动,通常以纵波的方式在弹性介质内会传播,是一种能量的传播形式,其不同点是超声频率高,波长短,在一定距离内沿直线传播具有良好的束射性和方向性。 超声波具有以下的特点:
1) 超声波可在气体、液体、固体、固熔体等介质中有效传播。 2) 超声波可传递很强的能量。
3) 超声波会产生反射、干涉、叠加和共振现象。
4) 超声波在液体介质中传播时,可在界面上产生强烈的冲击和空化现象。
2.4 超声波测距原理
在超声波探测电路中, 发射端输出一系列脉冲方波, 其宽度为发射超声波与接收超声波的时间间隔, 被测物距越远, 脉冲宽度越大, 输出脉冲个数与被测距离成正比。超声波测距的方法有多种, 如相位检测法、声波幅值检测法和往返时间检测法等。相位检测法虽然精度高, 但检测范围有限可检测到汽车倒车中, 其障碍物与汽车的距离;声波幅值检测法易受反射波的影响。本文硬件设计采用超声波往返时间检测法, 其测量原理图如图2所示。
图2 超声波测距原理图
其原理为: 在超声波发射器两端输入40KHZ 脉冲串, 脉冲信号经过超声波内部振子, 振荡产生机械波, 并通过空气介质传播到被测面, 由被测面反射到超声波接收器接收, 在超声波接收器两端, 信号是毫伏级的正弦波信号, 超声波经气体介质的传播到接收器的时
5
间, 即为往返时间。
超声测距有脉冲回波法、共振法和频差法,其中常用脉冲回波法测距。超声波测距的原理一般采用渡越时间法 ,其原理是超声传感器发射超声波, 超声波在空气中传播至障碍物, 经反射后由超声传感器接收反射脉冲, 测量出超声脉冲从发射到接收的时间, 再乘以超声波在空气中的速度就得到二倍的声源与障碍物之间的距离, 即: L=c·t/2 (1)
式(1)中, L为超声传感器与被测障碍物之间的距离, c为超声波在介质(空气)中的传输速率, t为超声波从发射到接收的时间。超声波在空气中的传播速度为: cc0TT0, 其中T为绝对温度数值, T0273.15k,C0331.4ms。在测量精度不是很高的情况下, 一般可以认为c为常数340m/s。由于温度影响超声波在空气中的传播速度;超声波反射回波又很难精确捕捉,致使超声波在空气中传播的时间很难精确测量。这些因素是使用超声测距引起误差的原因。
2.5 超声波测距误差分析
根据超声波测距公式L=c·t/2,可知测距的误差是由超声波的温度误差、传播速度误差和测量距离传播的时间误差引起的。
2.5.1 温度误差
由于超声波也是一种声波。其声速C与温度有关。表1列出了几种不同温度下的声速
表1声速与温度关系
温度(℃) 声速(米/秒)
-30 313
-20 319
-10 325
0 323
10 338
20 344
30 349
100 386
这是超声波的温度效应特性,超声波的传播速度“C”可以用公式(2)表示:C=331.5+0.607t(m/s),式中t=温度(℃)。因此要精确测量与某个物体之间的距离时,则应通过温度补偿的方法加以校正。
2.5.2 时间误差
当要求测距误差小于1mm时,假设已知超声波速度C=344m/s (20℃室温),忽略声速的传播误差。测距误差s△t<(0.001/344) ≈0.000002907s 即2.907ms。
在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在达到微秒级,就能保证测距误差小于1mm的误差。使用的12MHz晶体作时钟基准的89C51单片机定时器
6
能方便的计数到1μs的精度,因此系统采用89S51定时器能保证时间误差在1mm的测量范围内。
对于超声波测距精度要求达到1MM时,就必须把超声波传播的环境温度考虑进去。例如当温度0℃时超声波速度是332m/s, 30℃时是350m/s,温度变化引起的超声波速度变化为18m/s。若超声波在30℃的环境下以0℃的声速测量100M距离所引起的测量误差将达到5M,测量1M误差将达到5MM。
超声波遇到障碍物后,一部分会反来,那么,通过计算发射出超声波到接收到回波之间的时差,还有音速,就能算出障碍物的距离。
2.6 影响超声波探测的因素
图3 超声波差距示意图
在图3中,用一个超声波传感器来发射超声波,同时它又可以接收到回波。一般使用的超声波频率为40KHZ。根据以上原理,所算出的障碍物距离都是指障碍物到传感器的距离。
传感器可检查到的角度:传感器发射超声波有一定的角度范围,图4,图5为常用传感器的探测角度:
图4 水平探测角度
7
图5 垂直探测角度
以上菱形区域是发射超声波的覆盖区,而覆盖区内的障碍物能否被探测到,则与以下因素有关(见图6示):
1) 从物理方面的反射原理可知:超声波的反射规律为反射角等于入射角,因此,反射波是否能被传感器捕捉,与反射面的角度有关。 2) 反射面的大小不同,也会影响反射波的强度。
3) 另外,障碍物会吸收掉一部分超声波,反射回去的只是其中一部分,而吸收多少,反射又是多少,则与障碍物的材质和表面处理相关。疏松、多孔的表面较易吸收音波而导致反射效率较低,不易被侦测。
4) 超声波在空气中传输时也会衰减,所以同一个反射面,同样的角度,距离越远,发射和反射的超声波衰减越大,越不易被测到。
5) 以上几点简单的说,就是:角度、大小、表面材质和距离。这些因素综合起来,决定障碍物是否会被探测到。
图6 超声波探测障碍物
根据以上原理可知,在下列环境下,易造成无法侦测及侦测不良之情况! 1)铁丝网,绳索类细小物体。 2)草地行车或崎岖不平路面。
8
3)棉质或表面易吸收声波之物质。 4)传感器表面附着异物。
5)同频率(40 KHz)之超声波杂音加金属声,高压气体排放声,汽车喇叭正对传感器鸣叫时。 6)障碍物为锐角反射体,锥状物体。
2.7 如何提醒车主
倒车雷达在上图所示侦测区内检测到有效障碍物时,LED及系统内的蜂鸣器会根据障碍物的距离发出警告声和不同的显示方式。分为三段( 如表2) 这样,用户可以很清楚的判断出障碍物的大概距离。
表2倒车雷达左中/ 右中传感器提示方式:
A段 B段 C段
障碍距离 150~100CM 100~50CM 50CM以内
LED与蜂鸣器响应方式
对应方位的指示灯亮、蜂鸣器以相应的频率叫声为提示 对应方位的指示灯亮、蜂鸣器以不同频率的叫声提示 对应方位指示灯全亮,并伴有闪烁以警告用户、蜂鸣器长鸣
2.8 基于CX20106A超声波测距的调试
CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38KHz与测距的超声波频率40KHz较为接近,所以把它用于超声波检测接收电路。实验证明用CX20106A接收超声波,具有很高的灵敏度和较强的抗干扰能力。当超声波接收头接收到40KHz 方波信号时,将会将此信号通过CX20106A 驱动放大送入单片机的外部中断0 口。单片机在得到外部中断0 的中断请求后,会转入外部中断0 的中断服务程序进行处理,在移动机器人的避障工作中,可以在中断服务程序设定需要单片机处理的最短距离,比如0.5m。对于距离大于0.5 m 的障碍物,可以不做处理直接跳出中断服务程序[11]。
3系统软件部分设计
9
3.1 倒车雷达的工作原理图
图7 测距工作原理
以单片机作为主控电路元件,以12MHZ晶振作为标准脉冲振荡电路元件,通过软件编程实现40KHZ方波的产生,经过放大驱动超声波发射探头产生谐振,发射超声波信号,同时单片机开中断并开始计时,超声波信号遇到障碍物后反射回来被超声波接收探头接收,经过整形滤波及放大驱动音频译码器LM567,锁相后,该芯片8脚变为低电平接在INT1上,关中断,计时结束,根据超声波测距原理:L=ct/2,调用测距子程序,计算距离。除了设计主测距电路外还需设计好电源部分、声光报警部分,及其接口部分,以便很好的与上位机通讯,进行实时控制。
发送的脉冲选用40KHZ的方波,这是由探头本身的中心频率和其频率特性决定的,如图3所示:在40KHZ频率时,超声波探头的输出声压和灵敏度值最大。
10
3.2超声波系统主流程图
图8主程序流程图 图9 按键中断处理流程图
3.3超声波硬件设计与软件编程
综合考虑,控制模块采用单片机AT89S51控制;发射模块采用反向器74LS04;接收模块采用CX20106A;显示模块采用液晶显示器LED显示;报警模块采用蜂鸣器。
其系统框图如图10所示。
发送模块 单片机 AT89S51 报警 接收模块 LED显示
11
图10 超声波系统框图
3.3.1复位电路
单片机外围需要一个复位电路,复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。该设计采用含有电阻的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。复位电路的设计图如图11所示:
图11 复位电路
3.3.2显示电路
显示电路采用的是共阳极8位数码管,该显示器与驱动电路相连用于控制LED的显示。为使LED显示,只需在S1,S2,S3,S4依次置为低电平信号,再给LED延时一段很小的时间,使数码管分别显示,由于人眼的视觉暂留效应,数码管就像同时显示一样。LED显示电路的电路图如图12所示。
12
图12 LED显示电路
3.3.3超声波发送与接收模块
(1)主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时计数器模式,设置总中断允许为EA,显示器接P0口,P2接蜂鸣器。然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms秒后(这是测距器会有一个最小可测距的原因),才打开外中断0接受返回的超声波信号。由于采用12MHZ的晶振,机器周期为1us,当主程序检测到接受成功的标志位后,将计数器T0中的数(即超声波来回所用的时间),按下式计算即可得到被测物体与测距仪之间的距离,设计时取声速为0.0347cm/um,则S=(V*T0)/2(V为声速,T0为声波来回传输的时间)。然后再用超声波脉冲重复测量。
(2)超声波发送子程序和超声波接收中断程序。超声波发送子程序是通过P1.0端口发送4个左右的超声波信号频率约为40KHZ的方波,同时把计数器T0打开并进行计时。超声波测距离主程序利用外部中断0检测返回超声波信号,一旦接受到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。进入中断程序后就立即关闭计时器T0停止计时,并将测距成功标志子赋值1[12]。超声波发送和接收模块如图13,图14所示。
13
图13超声波发送模块
图14 超声波接收模块
3.3.4 报警模块
P2口接蜂鸣器,当小车离障碍物的距离小于80cm时,置P2.0为低电平,蜂鸣器发出报警;当小车距离障碍物的距离大于80 cm时,置P2.0为高电平,蜂鸣器停止报警。当小车距离障碍物的距离50cm时,蜂鸣器放出长报警。报警模块如图15所示。
图15 报警模块
14
4 调试及性能分析
4.1 硬件调试
此次制作外扩超声波的发送端和接收端,硬件调试采用WAVE6000/S仿真器,同时用数字万用表检测没有短路、虚焊和各个端口的电压,各参数显示正常。电路连接基本确定没什么问题,主要调整的地方在于接收电路的电阻电容的调整,将电阻电容参数调到合适大小,接收效果明显增强。
4.2 软件调试
在WAVE编译器和WAVE6000/S仿真器仿真下进行软件调试。使用WAVE编译器时设定断点,对各段函数的调试,还结合硬件用WAVE6000/S仿真器进行仿真调试。软件调试过程中的存在问题就是测的不够远。其主要原因在于发送波的发送频率,经过多次调试确定最佳发送次数是4次,多一次少一次都影响测量距离。定时器1来定时控制发送40KHZ左右方波给超声波发送端。定时器1的定时时间不能太小,如果在较短的时间间隔内发送,那么也将影响接收。
4.3测试结果与分析
硬件测试过程中经过多次测试其能测的最远且较稳定的距离为426cm,最大误差不超过1cm。由于场地有限,不可避免的受到干扰。各距离段测量的结果如下表3所示。误差来源由于声速与温度有关,如果测距精度要求很高,则应通过温度补偿方法加以校正。 实际值(cm) 测量值(cm) 实际值(cm) 测量值(cm) 41.8 49.8 70.6 42 50 71 80 98.8 80 100 124.7 125 144 144 169.196.222.4 7 6 170 197 223 250.278.299.329.339.349.359.387.402.425.6 5 6 7 9 8 6 5 3 5 251 279 300 330 340 350 360 388 403 426 表 3实际测试数据记录
5设计总结
为了验证系统的测量精度,在试验室进行了实地测量。利用本系统在42~426cm范围进
行多次测量。经测量最大误差在1cm范围内,稳定性和重复行都比较好。系统结构简单、体积小、实时LED显示和报警、抗干扰能力好等优点。系统的误差主要来自发射探头的轴线而导致所反射回来的波可能是从不同点获得,还有电子器件自身的时延、干扰等也造成一定影响。可以根据具体场合,选择合适功率的探头,以及调整程序中脉冲的频率、宽度和个数等提高精度或测量距离,扩大系统的应用范围。
15
致谢
在本次毕业设计中, 得到了我的指导教师朱老师的大力支持,在电路功能的实现中提出了许多相当宝贵的意见,毕业论文中也给予了悉心的指导,使我的毕业设计得以顺利完成,对此我表示衷心的感谢,同时也感谢陈泉勇、杨朝阳同学在毕业设计当中给我的帮助。
附录1电路原理图
附录3程序
#include sbit csbout=P1^0; //超声波发送 sbit csbint=P3^2; //超声波接收 sbit bg=P3^3; #define LED P0 sbit LED1=P2^4; //LED控制 sbit LED2=P2^5; //LED控制 16 sbit LED3=P2^6; //LED控制 sbit bj=P2^0;//报警 #define csbc 0.0347 unsigned char cl,mqzd,csbs,csbds,buffer[3],xm1,xm2,xm0,jpjs unsigned char convert[10]={0x18,0x7b,0x2c,0x29,0x4b,0x89,0x88,0x3b,0x08,0x09}; unsigned int s,t,i,xx,j,sj1,sj2,sj3,mqs,sx1; void csbcj(); void delay(j); //延时函数 void scanLED(); //显示函数 void timeToBuffer(); //显示转换函数 void keyscan(); void k1cl(); void k2cl(); void k3cl(); void k4cl(); void offmsd(); void main() //主函数 EA=1; //开中断 TMOD=0x11 //设定时器0为计数,设定时器1定时 ET0=1; //定时器0中断允许 ET1=1; //定时器1中断允许 TH0=0x00; TL0=0x00; TH1=0x9E; TL1=0x57; 17 csbds=0; csbout=1; cl=0; csbs=8; jpjs=0; sj1=50;/////////测试报警距离 sj2=200; sj3=580; k4cl(); TR1=1; while(1) { keyscan(); if(jpjs<1) { csbcj(); //调用超声波测距程序 if(s>sj3) //大于时显示“CCC” { buffer[2]=0xC6; buffer[1]=0xC6; buffer[0]=0xC6; } else if(s else timeToBuffer(); } 18 else timeToBuffer(); //将值转换成LED段码 offmsd(); scanLED(); //显示函数 if(s LED=buffer[0]; LED3=0; delay(200); LED3=1; LED=buffer[1]; LED2=0; delay(200); LED2=1; LED=buffer[2]; LED1=0; delay(200); LED1=1; } void timeToBuffer() //{ xm0=s/100; 显示功能模块 转换段码功能模块 19 xm1=(s-100*xm0)/10; xm2=s-100*xm0-10*xm1; buffer[2]=convert[xm2]; buffer[1]=convert[xm1]; buffer[0]=convert[xm0]; } void delay(i) { while(--i); } void timer1int (void) interrupt 3 using 2 { TH1=0x9E; TL1=0x57; csbds++; if(csbds>=40) { csbds=0; cl=1; } } void csbcj() { if(cl==1) { TR1=0; TH0=0x00; 20 TL0=0x00; i=csbs; while(i--) { csbout=!csbout; } TR0=1; while(i--) { } i=0; while(csbint) { i++; if(i>=4000) //上限值 csbint=0; } TR0=0; TH1=0x9E; TL1=0x57; t=TH0; t=t*256+TL0; t=t-29; s=t*csbc/2; TR1=1; cl=0; csbint=1; //////////////////////////////////////////////////////////////// if(s<=80)bj=0; if(s>80)bj=1; 21 //////////////////////////////////////////////////////////////// if(s csbs=csbs-2; sj1=40; } sj1=sj1+2; k4cl(); } else if(s>=sj3) { if(csbs<32) { csbs=csbs+2; sj1=sj1+10; k4cl(); } } } } void keyscan() //健盘处理函数 { xx=0; if(k1!=1) // 判断开关是否按下 { delay(100) //延时去抖动 if(k1!=1) // 判断开关是否按下 22 { while(!k1) { delay(25); xx++; } if(xx>1000) { jpjs++; if(jpjs>3) { k4cl(); jpjs=0; } } xx=0; switch(jpjs) { case 1: k1cl();break; case 2: k2cl();break; case 3: k3cl();break; } } } } void k1cl() { sj1=sj1+1; if(sj1>100) 23 sj1=50; s=sj1; } void k2cl() { sj2=sj2+5; if(sj2>500) sj2=40; s=sj2; } void k3cl() { sj3=sj3+10; if(sj3>600) sj3=600; s=sj3; } Void offmsd() //{ if (buffer[0] == 0xC0) buffer[0] = 0xFF; } 百位为0判断模块 24 因篇幅问题不能全部显示,请点此查看更多更全内容