汽车喷油嘴清洗机的设计
沈阳航空航天大学 2010年6月
摘 要
喷油嘴是发动机的关键部件之一,它的工作状况的好坏直接影响发动机的性能。本文介绍的汽车喷油嘴清洗机,是以AT89S52单片机为控制核心,由键盘设定清洗时间,调整清洗压力,利用PWM调速方案实现电动机转速控制,并由油温、油面高度传感器实现清洗条件检测的控制系统。该系统适用于多种汽车车型,具有体积小,便捷,操作简单,成本低廉的优点,相信一定会成为现行喷油嘴清洗机的替代产品并有较为理想的市场。
关键词:喷油嘴; 清洗机; PWM调速
I
Abstract
Nozzle is a key component of the engine, it's working conditions have a direct impact engine performance.This article describes the auto fuel injector cleaning machine, is to control the AT89S52 microcontroller core, set the cleaning time from the keyboard, adjust the cleaning pressure and speed control scheme using PWM motor speed control achieved by the oil temperature, oil face wash conditions to achieve a high degree of sensorDetection of the control system.The system is suitable for a variety of car models, is small, convenient, simple, low cost advantage, believe there will be the existing fuel injector cleaning machine and a more desirable alternative to the market.
Key words: Nozzle;washing machine; PWM speed control
II
目录
1 绪 论............................................................................................................................. 1 1.1课题研究背景............................................................................................................. 1 1.2国外发展动态............................................................................................................. 1 2系统设计方案分析........................................................................................................ 2 2.1 电喷汽车喷油嘴清洗机的工作原理........................................................................ 2 2.2 电喷汽车喷油嘴清洗机的设计方案分析................................................................ 2 3 系统总体设计............................................................................................................... 4 3.1系统方案设计............................................................................................................. 4 3.2 PWM调速设计 .......................................................................................................... 5
3.2.1 PWM波调速原理.......................................................................................... 5 3.2.2 PWM调速与其他调速的比较.................................................................... 6 4硬件电路设计................................................................................................................ 8 4.1显示电路设计............................................................................................................. 8
4.1.1 数码管显示原理......................................................................................... 8 4.1.2数码管显示电路........................................................................................ 10 4.2 PWM脉冲驱动电机电路设计 ................................................................................ 11 4.3 汽车喷油嘴清洗机器件分析................................................................................ 12
4.3.1 AT89S52单片机的功能特点.................................................................... 12 4.3.2 光电耦合器............................................................................................... 14 4.3.3电容/电阻选择.......................................................................................... 15 4.4 系统原理图.............................................................................................................. 15 5 程序设计..................................................................................................................... 18 5.1 软件的选择.............................................................................................................. 18 5.2 主程序设计.............................................................................................................. 19
5.2.1 主程序流程图........................................................................................... 19 5.2.2 初始化程序............................................................................................... 20 5.3定时器的初始化....................................................................................................... 21
5.3.1定时/计数器工作原理.............................................................................. 21 5.3.2 定时器初始化........................................................................................... 23 5.4部分程序分析........................................................................................................... 24
5.4.1 读键子程序分析....................................................................................... 24 5.4.2 用程序产生PMW脉冲调速子程序分析................................................... 26 5.5完整代码................................................................................................................... 27 6调试应用...................................................................................................................... 28 6.1 软件调试................................................................................................................... 28 6.2 硬件调试.................................................................................................................. 29
III
6.3 实验室调试注意事项.............................................................................................. 29 6.4 功能调试................................................................................................................... 29 7 结 论........................................................................................................................... 30 8结束语.......................................................................................................................... 31 致 谢............................................................................................................................. 32 参考文献......................................................................................................................... 33 附录Ⅰ protel接线图 .................................................................................................... 34 附录Ⅱ 完整代码........................................................................................................... 35 附录Ⅲ 器件清单........................................................................................................... 48
IV
沈阳航空航天大学北方科技学院毕业设计(论文)
1 绪 论
1.1课题研究背景
改革开放以来,随着中国经济实力的增强及百姓收入的增多,小汽车越来越多地进入了家庭,随之而来的是维修保养问题。喷油嘴是电喷发动机关键部件之一,它工作状况的好坏将直接影响发动机的性能。然而不少车主根本不重视发动机喷油嘴的清洗,或者认为发动机喷油嘴要隔很长时间才需进行清洗,殊不知喷油嘴堵塞会严重影响汽车性能!
喷油嘴堵塞的原因是发动机内积碳沉积在喷油嘴上或者燃油中的杂质等堵住了喷油嘴通路。汽车行驶一段时间后,燃油系统就会形成一定的沉积物。燃油系统沉积物有很大危害,如沉积物会堵塞喷油嘴的针阀、阀孔,影响电子喷射系统精密部件的工作性能, 导致动力性能下降;沉积物会在进气阀形成积碳,致使其关闭不严,导致发动机怠速不稳、油耗增大并伴随尾气排放恶化;沉积物会在活塞顶和气缸盖等部位形成坚硬的积碳,由于积碳的热容量高而导热性差,容易引起发动机爆震等故障,此外还会缩短三元催化器的寿命。因此喷油嘴工作的好坏,对每台发动机的功率发挥起着根本性作用。
1.2国外发展动态
当今时代,清洗机技术已得到广泛应用,是信息社会的重要技术基础。随着科学技术的发展,产品应用范围的不断扩大,
过去这类保养通常要交汽修厂进行,费用昂贵。现市场上出现的“电喷汽车喷油嘴清洗机” ,但这些电喷汽车喷油嘴清洗机都有如下缺陷:
(1)该机型大都是体积过大,运输,使用等都不方便,从而加大成本。 (2)该机型不能实现自动化,清洗时间,清洗温度也只能人工模糊控制,易使清洗机与电动机受损,且不易适合流水线工作。
(3)并不具有如油面,油温过高过低等的报警警示功能。 (4)一种电喷汽车喷油嘴清洗机只能适用一种机型
1
沈阳航空航天大学北方科技学院毕业设计(论文)
2系统设计方案分析
2.1 电喷汽车喷油嘴清洗机的工作原理
结合专用的燃油系统清洗剂,不需拆装发动机,只需用接头与发动机供油管及回油管连接,在发动机正常运转状况下,让清洗混合液进入燃油供给系统,在30 分钟内即可溶解发动机供油管、喷油嘴针阀和燃烧室各组件的积碳、油泥、胶质及漆类污染物,经由循环燃烧分解过程,从汽车排放系统排出,恢复该车的性能,使其启动顺畅,怠速平稳,加油轻快,增加动力,达到省油及降低空气污染的效果。
2.2 电喷汽车喷油嘴清洗机的设计方案分析
Ω电喷汽车喷油嘴清洗机是通过控制电机运行时间和速度,达到对不同汽车作出相应调整,实现清洗目的设备。这样一个系统我们可以用不同方法来实现。我们可以用小型PLC加入一个文本模块来实现,在程序设计方面很简单并且系统很稳定、抗干扰能力强,就一般的品牌的PLC,其输入和输出点总共50个点左右,外加一个对应的文本模块就要1000元左右。还可以根据设计要求用单片机来实现,选择AT89S52单片机:能实现控制要求且在8051单片机中AT89S52已经是低端的产品,在市面上比这个更低端的产品很少;一个AT89S52只要10元左右相当便宜,所以才选择AT89S52。当然用AT89S52也不一定是最好的选择,毕竟个人对单片机产品的了解及市场价位了解有限,所以选择熟悉的产品;因为设计要求清洗时间为30分钟左右,所以选择两位数码管来作为显示。在同类显示产品LCD也能做此设计显示,但2位数码管明显比一个LCD便宜;因为要对不同机型做清洗,所以不仅在时间上会不同,在清洗的力度上也会不同,这就要求电机能够变速。最直接的方法就是买一个变速电机,但是运用PWM脉冲调制的方法就能改变电机两端的输入电压,即可以改变电机的转速。用此方法只要一个直流电机就能够实现变速,这样不仅可以节省成本,而且在调速范围的灵活性也能优于用现成的变速电机;因为要对时间和压力进行设置所以必须要用外部输入一般在单片机中都是用按键输入。结合实际情况本设计用到时间+、时间-、压力+、压力-、开
2
沈阳航空航天大学北方科技学院毕业设计(论文)
始,这5个按键。所以不采用矩阵键盘只接入5个单独的按键放入电路中;系统实现自动化控制并不是盲目的按照自我想法进行控制,而是要对外界的影响输出的因素进行检测并控制的。这本设计中油面/油温的高低是在清洗过程中对设备影响的重要因素,所以要根据汽车的油温范围和油面的高低情况选择适当的传感器。这本设计中在各方面的综合考虑下选择了:
(1)汽车油温传感器型号: DA-02-QY 品牌标记: Gxp特 点:1,螺钉结构,传感器用环氧树脂封装在螺钉内.2,温度范围:-30~200℃适用范围: 各类汽车 。
(2)0111-0003、 液面高度检测传感器 ,一种液面高度检测传感器,包括信号采集电路、遮光板、浮标及遮光罩。红外发射二极管发射的红外光信号到液面浮标反射面上,其反射信号由红外接收二极管接收给信号采集电路,实现液面高度的检测任务。该装置结构简单,可靠性高、反应速度快,可在各种恶劣环境下工作,特别适用于汽车油面高度的检测。
3
沈阳航空航天大学北方科技学院毕业设计(论文)
3 系统总体设计
3.1系统方案设计
图3-1为电喷汽车喷油嘴清洗机的系统构成方框图,由单片机控制器、按键输入、检测输入、数码管显示、电机PWM驱动电路、输出控制等电路组成。
数码管显示器 输出控制 单单片机控制器 电动机PWM驱动 检测输入 按键输入
图3.1系统构成方框图
单片机AT89S52是整个系统的核心,负责控制检测输入,输出显示,电机调速。这里使用了Atmel公司新型的AT89S52单片机。按键输入电路负责对清洗过程一系列工作参数进行设定输入。数码管显示器在工作过程中显示剩余的工作时间。电机调速利用了单片机内部的定时器,配合软件产生出脉宽调制波(PWM),再通过功率场效应管去驱动低压直流电机,具有效率高、能耗低、转速连续可调等特点。
输出控制电路在油温过高或油面过低的情况下,切断高压汽油泵电机的供电,防止发生事故。
4
沈阳航空航天大学北方科技学院毕业设计(论文)
电喷汽车喷油嘴清洗机的工作电源取自汽车上的12V蓄电池,经降压稳压后得到5V的稳定工作电压。
3.2 PWM调速设计
3.2.1 PWM波调速原理
大家可能做过这样的小实验,一台额定电压为12V的直流小电机,使用一台可调稳压电源供电。当电压为12V时,电机转得很快;降低到9V时转速慢了很多;当降到6V时转速更慢了。因为电压降低后,电机获得的输入功率小了,当然转速就慢了。但单片机输出的是数字脉冲信号,如何控制电机调速?这里,我们就设法控制单片机输出脉冲的宽度(即控制脉冲的占空比),使电机得到的平均输入功率发生变化,就能控制电机调速了。图3.2中,输出的为50%的脉冲波,其电压平均值(如图中虚线所示)为6V,这样电机的速度就降低了。而图3.3中,输出的为接近100%的脉冲波,其电压平均值约为12V,这时电机的转速就接近额定转速。
V 12 6 50 100 150 t/S
图3.2 输出的为50%的脉冲波
5
沈阳航空航天大学北方科技学院毕业设计(论文)
V 12 50 100 150 t/S 图3.3 输出的为100%的脉冲波
3.2.2 PWM调速与其他调速的比较
(1)电机调速控制方案分析:
方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。
方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对电机的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。
方案三:采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。 鉴于方案三调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案三原理设计了PWM调速方案。
6
沈阳航空航天大学北方科技学院毕业设计(论文)
(2)控制工作方式比较:
方案一:双极性工作制。双极性工作制是在一个脉冲周期内,单片机两控制口各输出一个控制信号,两信号高低电平相反,两信号的高电平时差决定电动机的转向和转速。
方案二:单极性工作制。单极性工作制是单片机控制口一端置低电平,另一端输出PWM信号,两口的输出切换和对PWM的占空比调节决定电动机的转向和转速。本设计采用单极性工作制。
7
沈阳航空航天大学北方科技学院毕业设计(论文)
4硬件电路设计
4.1显示电路设计
4.1.1 数码管显示原理
LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:
图 4.1 七段发光数码管
为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。数码管分为共阳极和共阴极两种,如图4.2所示左为共阴极右为共阳极。
8
沈阳航空航天大学北方科技学院毕业设计(论文)
+5v
a b c d e f g dp
a b c d e f g dp
图 4.2 共阴/共阳极数码管结构
这两种不同极性数码管的接法不一样所以他们代码也就不同,数字0~9的共阴极和共阳极字形代码如下表:
表4.1 0~9七段数码管共阴级字形代码
显示字型 0 1 2 3 4 5 6 7 8 9 g 0 0 1 1 1 1 1 0 1 1 f 1 0 0 0 1 1 1 0 1 1 e 1 0 1 0 0 0 1 0 1 0 d 1 0 1 1 0 1 1 0 1 1 c 1 1 0 1 1 1 1 1 1 1 b 1 1 1 1 1 0 0 1 1 1 a 1 0 1 1 0 1 1 1 1 1 段码 3fh 06h 5bh 4fh 66h 6dh 7dh 07h 7fh 6fh
9
沈阳航空航天大学北方科技学院毕业设计(论文)
表4.2 0~9七段数码管共阳极字形代码
显示字型 g f e d c b a 段码 0 1 2 3 4 5 6 7 8 9 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 0 40h 79h 24h 30h 19h 12h 02h 78h 00h 10h 数码管选择方面其中一个其实就可以,但是介于市面上共阴极数码管比较常见,所以选择共阴极数码管。
4.1.2数码管显示电路
4.3 数码管显示实现电路设计
10
沈阳航空航天大学北方科技学院毕业设计(论文)
以上Q1~Q7是接到74LS373锁存器输出端上,因为是采用动态显示所以是把两个数码管段选并接在一起。在两个数码管的位选端各加入一个三极管(NPN),在这三极管的作用是起电流放大和开关的双重作用。在三极管的基极串入电阻(10K),电阻的选择:电阻≥单片机输出电压×三极管放大倍数÷数码管最大电流,当然还有一个最小电阻标准亮度可以就行。
4.2 PWM脉冲驱动电机电路设计
图4.4为PWM脉冲驱动电机的实现电路。AT89S52单片机的P3.6脚输出占空比为60~100%的调宽脉冲,经光电隔离后驱动功率场效应管,这样,电机上获得的调宽脉冲波的占空比也为60~100%,幅度也为6V以上,电机具有机械惯性的特点,因此运行时不会产生抖动。图4.5为输出60%脉冲时电机得到的直流电压平均值。
图4.4为PWM脉冲驱动电机的实现电路
为控制大批量生产的成本,使用了低价位的AT89S52单片机,但AT89S52内部没有集成PWM部件。这里我们利用了内部定时器,与软件配合产生出调宽脉冲
11
沈阳航空航天大学北方科技学院毕业设计(论文)
波。在以上电路中为了使单片机产生的PWM脉冲能够不受干扰,采用了直流+5V光电耦合器,同时加入具有电流放大作用的场效应管;加入的电阻都是使其电流值在器件的额定范围内,而在电机的两端并联反向二极管这有续流的作用。在继电器断开开关时电机中还有剩余电流,如果不及时排除对电机的寿命会产生影响。在电机两端串入一个电阻和电容是为了稳定电机两端的电压。
V 12 50 100 150 t/s
图4.5输出60%脉冲时电机得到的直流电压平均值
4.3 汽车喷油嘴清洗机器件分析
4.3.1 AT89S52单片机的功能特点
AT89S52是一个低功耗,高性能CMOS 8位单片机是AT89S系列的增强产品,片内含8k Bytes ISP(In-system programmable)的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,6个中断矢量2级优先权的中断系统,3个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S52设计和配置了空闲和掉电两种低功耗方式运行。空闲模式下,
12
沈阳航空航天大学北方科技学院毕业设计(论文)
CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 主要功能特性:
· 兼容MCS-51指令系统; · 32个双向I/O口;
· 3个16位可编程定时/计数器; · 全双工UART串行通信口;
· 具有8个中断源、6个中断矢量、2级优先权的中断系统; · 中断唤醒省电模式; · 看门狗(WDT)电路; · 灵活的ISP字节和分页编程;
· 可在ISP编程锝8KB片内flash存储器; · 4.5-5.5V工作电压; · 时钟频率0-33MHz; · 双数据寄存器指针; · 低功耗空闲和掉电模式; · 3级程序锁存位; · 具有断电标志位功能; · 256x8bit内部RAM;
13
沈阳航空航天大学北方科技学院毕业设计(论文)
图4.6 AT89S52引脚排列
4.3.2 光电耦合器
光电耦合器是把发光器件与光敏接收器件集成在一起,(或用一根光导纤维把两部分连接起来)以实现信号传输作用的器件。通常发光器件采用发光管(LED),光敏接收器件则采用光敏管等。当信号加在光电耦合器的输入端时,发光管发光,光敏管受光线照射而导通,输出相应的信号,实现了光电的传输和转换。其主要特点是以光为媒介实现信号的传输,使输入与输出间在电气上完全隔离。如图4.7所示。
如图4.7光电耦合器
14
沈阳航空航天大学北方科技学院毕业设计(论文)
4.3.3电容/电阻选择
(1)电阻值的选择
在硬件的设计中电阻的选择无非是改善电流/电压,使其他的器件在它的额定电压/电流内运作。选择电阻的值就直接根据R=U/I公式。电流的大小是根据该电路中,额定电流范围最小的器件来选择电阻。根据公式I最小则电阻的阻值就是最大,这样所有串入该电路的器件才能得到保护。在光电耦合器使用的是+12V电压,而光电耦合器允许电压小于12V,电流值只有几毫安所以接入1K电阻,当然也要考虑光电耦合器最低导通电压和电流。在数码管共阴极加入的放大三极管,基极加入的电阻就是改善电流的作用。根据流入的电压、三极管的放大倍数(169)和共阴极数码管额定电流(200mA左右),可以确定电阻的大小。我们选择了10K
Ω。 (2)电容的选择
在硬件设计中,电容虽然用得并不多但都有意义。在单片机的晶振电路中,在晶振的两端加上两个30pf左右的电容,是帮助晶振起振和稳定波形的作用。由于在实际中晶振并不能输出正弦波形,而是类似三角波但这样的波形是达不到要求的,根据电容稳定电压所以加入电容,这样晶振两端才有稳定的电压,才能输出稳定的波形(正弦波)。在复位电路中,运用电容的充电和放电时的波形,选择适当的电容能使复位时间达到设计的要求。
4.4 系统原理图
使用proteus软件绘制的电喷汽车喷油嘴清洗机电路原理图见图4.8,电喷汽车喷油嘴清洗机原理图共设有5个输入按键、一个油面传感器和一个油温传感器。两位数码管显示器用于显示输入时间、指示剩余工作时间及报警状态显示。蜂鸣器作报警提醒,继电器用于控制汽油泵电机的通断。
15
沈阳航空航天大学北方科技学院毕业设计(论文)
IC27805+5v1VIGNDVO3+12vC5100uC60.1u2C70.1uC81000uGNDC3AT89S5130pf19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617GNDX1CRYSTAL18R1410kC430pfXTAL2C1VCC910uF293031RSTR1R2R3R410k10k10k10kPSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51PROGRAM=吴斌.hexR22470+5V+12VU14U416524OPTOCOUPLER-NPNGNDR6+12v1k2516OPTOCOUPLER-NPNGNDR710kRL1U24R91kR81kG2RL-1A-CF-DC12GND2516+5VLS1SPEAKEROPTOCOUPLER-NPNR10300R234.7kT1IRF730D11N4004C2U34R114702C1384R244.7k10uFR25100+88.8R122k561OPTOCOUPLER-NPND21N4004GND4.7kNPNC90.1uR13GND 图4.8 电喷汽车喷油嘴清洗机电路图
按启动/停止键,两位数码管显示器显示“00” ,“电喷汽车喷油嘴清洗机”处于待机状态。此时按时间+、时间-键就能选择工作时间,时间的选择范围为00~60分钟。选好时间,再延时5秒P3.6输出低电平,继电器吸合工作,汽油泵运行在额定电压12V状态,数码管同时显示剩余的工作时间。按压力+、压力-键即使P3.6输出的脉冲占空比发生变化,即改变汽油泵转速来调整清洗压力。当剩余工作时间小于4分钟时,蜂鸣器开始鸣叫。定时结束时,继电器释放,汽油泵停止工作,蜂鸣器停止鸣叫,数码管显示“00”。若5分钟内无任何操作则数
16
沈阳航空航天大学北方科技学院毕业设计(论文)
码管熄灭,自动关机。在作业过程中,若油面过低时,油面传感器开关(Soil)闭合(实验时由开关代替),此信号经P1.5送入CPU,经运算处理,P3.7输出高电平,汽油泵自动断电,数码管g段显示“——”;若油温过高时,温度继电器开关(Stem)闭合(实验时由开关代替),经P1.6送入CPU,P3.7输出高电平, 汽油泵也自动断电,数码管g段显示“——”。用protel绘制的系统接线原理图见附录Ⅰ。
17
沈阳航空航天大学北方科技学院毕业设计(论文)
5 程序设计
5.1 软件的选择
考虑到用汇编编程的复杂我选择用 C 语言来开发单片机系统软件,它最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此 C 语言编程在单片机系统设计中已得到越来越广泛的运用。
但在单片机上用 C 语言写程序和在 PC 机上写程序绝对不能简单等同。现在的 PC 机资源十分丰富,运算能力强大。写单片机的 C 程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系结构和硬件资源作详尽的了解,是无法进行对单片机的编程的。
随着国内单片机开发工具研制水平的提高,现在的单片机仿真器普遍支持C语言的调试,为单片机编程使用C语言提供了便利的条件。C语言的模块化程序结构特点,可以使程序模块大家共享,不断丰富;C语言的可读性的特点,更容易使我们借鉴前人的开发经验,提高自己的软件设计水平。采用C语言,可针对单片机常用的接口芯片编制通用的驱动函数;可针对常用的功能模块、算法等编制相应的函数。这些函数经过归纳整理可形成专家库函数,供广大的单片机爱好者使用和完善。这样可大大提高国内单片机软件设计水平。国内嵌入式系统的程序设计也采用C语言,可以借鉴其编程经验进行交流,以达到和国际接轨的目的。过去长时间困扰人们的“高级语言产生代码太长,运行速度太慢,不适合单片机使用”的致命缺点已被大幅度的克服。目前,8051上C语言的代码长度,在未加入人工优化的条件下,已经做到了最优汇编程序水平的1.2-1.5倍,可以说,比得上中等程序员的水平。只要有好的仿真器的帮助,用人工优化关键代码就是简单的事了。如果谈到开发速度、软件质量、结构严谨性和程序固定性等方面,则C语言的完美绝非汇编语言编程所能比拟的。
18
沈阳航空航天大学北方科技学院毕业设计(论文)
5.2 主程序设计
5.2.1 主程序流程图
主程序的工作过程为:先进行初始化工作,然后判断是否启动?若启动则读取键值信号或传感器输入信号,进行对应处理。否则进入工作状态。流程图如5-1 开始 初始化 Y N 启动? Y 有键按入? Y 根据键值散转 关机处理 Y N 已延时5S? 延时5S N Y 油 温高 时间+ 时间- 压力+ 压力- 油面低处理 正常工作 图5-1 主程序状态流程图
19
沈阳航空航天大学北方科技学院毕业设计(论文)
5.2.2 初始化程序
程序设计时需设立一系列的变量、标志,具体如下:
uint deda; //1ms计时单元 uchar sec; //计时秒 char set_min;//设定分 uchar min_5m;//5分钟计数器 uchar val;//中间变量
uchar pwm_val; //调宽脉冲变量值 char push_val;//压力变化值 sfr WDT=0xa6;//定义看门狗定时器 sbit pushdec_key=P1^4; //压力-键 sbit pushinc_key=P1^3; //压力+键 sbit timedec_key=P1^2; //时间-键 sbit timeinc_key=P1^1; //时间+键 sbit buzz=P3^5; //驱动蜂鸣器端 sbit out=P3^6;//调宽脉冲输出端 sbit relay=P3^7; //驱动继电器端 uchar dis_sel;//显示内容散转标志 bit over_5m;//5分钟溢出标志 bit flag_5m;//5分钟标志 bit flag_5s;//5秒钟标志 bit start;//启动标志 bit dis_flag; //显示标志 bit key_flag;//按下键标志 bit buzz_sound;//蜂鸣器声响标志 bit y;//中间变量
bit out_flag;//pwm输出标志
/*******************初始化**********************/
20
沈阳航空航天大学北方科技学院毕业设计(论文)
void init() {EX0=1; EX1=1; IT0=1; IT1=1; }
//选择下降沿触发方式 //外部中断0响应控制位
初始量变量的定义是用到整个程序当中的,所以并不是一开始就能把所有用到的变量都初始化有些变量是在编程的过程中要用才将其初始化的特别是一些中间的变量。在初始化中时对外部中断0和1开中断并选择下降沿触发的方式,外部中断0是判断开始按键是否有值键入(P3^2)。关于定时器的初始化见5.3
5.3定时器的初始化
5.3.1定时/计数器工作原理
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 s。
21
沈阳航空航天大学北方科技学院毕业设计(论文)
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。 (1)工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下表:
表5.1寄存器TMOD控制字
位 字节地址:89H 7 GAME 6 5 M1 4 M0 3 GAME 2 1 M1 0 M0 TMOD GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。
:定时/计数模式选择位。=0为定时模式;=1为计数模式。
M1M0:工作方式设置位,定时/计数器有四种。
表5.2定时/计数器工作方式设置表
M1M0 00 01 10 工作方式 方式0 方式1 方式2 说明 13位定时/计数器 16位定时/计数器 8位自动重装定时/计数器 T0分成两个独立的8位定时/计11 方式3 数器;T1此方式停止计数 工作方式,由M1M0进行设置。在本课设中选择定时器0、1都是选择方式1则TMOD=0X11.
(2)控制寄存器TCON
TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
22
沈阳航空航天大学北方科技学院毕业设计(论文)
表5.3 TCON控制字
位 7 6 5 4 3 2 1 0 字节地址:88H TF1 TF0 TR1 TR0 TCON TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。 TR0(TCON.4):T0运行控制位,其功能与TR1类同。
其次进行定时器初值的计算。对于工作在方式1下的定时器计数总值是65536,设计数单位值为A,TH0=(65536-A)/10,TL0=(65536-A)%10。以上程序是用定时器0做1ms的定时初值TH0=-(1000/256)=(65536-1000)/256,TL0的值也是同理。 再则是开中断。EA=1开总中断,ET0=1开定时器0允许中断响应,TR0=1开定时器0控制运行位。满足以上的条件时才能对定时器正常使用。
在本程序中用到定时器0和定时器1两个定时初值时间设置,时间差距很大很可能会出现初值小的定时器不能得到响应。这主要的原因是初值差距大,可能在初值小的定时器溢出标志位置1时,同时另一个定时器也可能溢出,这时如果初值大定时器优先级比另一个大的话,那就会出现一个定时器不能得到响应。所以在有几个定时器的时候一定要注意初值的设定。具体的定时器初始化设计见5.3.2。
5.3.2 定时器初始化
/*********************定时器T0初始化************************/ void init_timer0()
23
沈阳航空航天大学北方科技学院毕业设计(论文)
{
TMOD=0x11;
TH0=-(1000/256); //1ms初值 TL0=-(1000%256); TR0=0;ET0=1;EA=1; }
/*************定时器T1初始化************/ /*定时器T1初始化*/ void init_timer1() {
TH1=-(50000/256); //5ms初值 TL1=-(50000%256); TR1=1;ET1=1;EA=1; }
5.4部分程序分析
5.4.1 读键子程序分析
void key(void) {
delay(10); while(P1!=0xff) {
switch (P1)
{case 0xfd:time_inc(); break; case 0xfb:time_dec(); break; case 0xf7:push_inc(); break; case 0xef:push_dec(); break; case 0xdf:oil_low(); break;
24
沈阳航空航天大学北方科技学院毕业设计(论文)
case 0xbf:temp_over(); break; case 0x9f:other(); break; default:break; }
delay(500); }
以上程序通过应用”switch()„case:” 语句判断键入值,并跳入相应的子
程序处理。”Switch()„case:”语句是判断switch()括号中的数据并把该数据的各种情况写入case判断条件中,当和其中的情况对应上时就跳出该语句转入对应的情况中;在进入程序开始有调用延时程序这主要是为了消抖,因为在实际按键时并不是按下键就直接变为高或低,而是出现不稳定的波形如图6-2,因而要在确定有键按下时先进行延时,跳过按下抖动这段时间相应在释放时也加入延时跳过释放抖动。
理想波形 实际波形 稳定闭合 按下抖动 释放抖动
图5-2按键输出波形
25
沈阳航空航天大学北方科技学院毕业设计(论文)
5.4.2 用程序产生PMW脉冲调速子程序分析
void pwm_out(void) {
if(out_flag) //如果输出标志有效 {
if(pwm_val<=(push_val+30)) {out=ON;}// 输出有效 else
{out=OFF;} //输出关闭
if(pwm_val>=50) pwm_val=0; }
else out=OFF; }
主要通过对变量pwm_val调宽脉冲输出端和一些数做比较,在pwm_val大于此数的时候输出ON,小于的时候输出OFF。这样就产生PWM脉冲波形并且能够自动调节脉宽的大小,在此设计中就是调节电压的大小。 6.4.3显示子程序分析
void normal_dis(void) {
if(dis_flag)
{ P2=DATA_7SEG[set_min/10]; P3_0=0;P3_1=1; dis_flag=0;} else
{ P2=DATA_7SEG[set_min%10]; P3_0=1;P3_1=0;dis_flag=1;} }
以上为正常显示子程序,在硬件设计中时把所有的数码管段选端并联端串在一起所以是采用动态显示。动态显示的特点是将所有位数码管的段选线并联在一
26
沈阳航空航天大学北方科技学院毕业设计(论文)
起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
要显示的值放在set_min中set_min/10是对寄存器的数求整因为是对10求整而且是两位数的显示,所以得到的值为就是十位上的数字,这时只开十位上的位选;同理set_min%10是对寄存器中的数对10进行求余放在个位上只开个位上的位选。根据数码管显示的原理必须有段选和位选两者同时选通才能显示要显示的数值。本设计中用了动态显示所以直接可以送数据,不存在段选的问题。直接位选选通要显示那位。
5.5完整代码
见附录2
27
沈阳航空航天大学北方科技学院毕业设计(论文)
6调试应用
6.1 软件调试
本次设计是用keil-51Uv3软件调试,其主要优点在于能把编写的程序转换成多种格式文件,还有强大调试功能。刚接触时对这个软件及C语言编程一点都不懂,对该软件操作还是学得比较轻松,最困难的还是用C语言编程。在有关书籍的指导下开始理解并编写一些小程序例如:延时子程序、二极管亮灭、数码管显示、按键显示等等,这样开始才对本次设计有一些信心。设计要求有时间的加减和电压的加减,第一步编写了一个按键(时间+)时,完成对电机转动的时间的倒计时,虽然还是有些吃力,但是至少一步步按照逻辑关系编写出来了。在这个程序调试成功后,另外几个按键的处理程序就很快编写出来了。把设计中用到的一些关键处理程序编成功后,就可以整体规划了。
首先把单片机的输入输出口分配好,在编程时用到那个点就定义那个点。在每编写一个程序时要有一个流程图,要不就会容易乱。用C语言编程当然也有它的好处—程序可移植性很强,运用这个特点有很多程序都不用自己重头写,只要稍作改动。比如用到按键输入,就移植一个读键子程序,把单片机上的按键输入点编码和按键对应,运用C语言语句能找出相应的点。有显示就移植一个动态显示子程序,由于用到的只是两位数码管显示所以只要把移植过来的程序改为两位显示。注意在编写程序的时候不要把程序都集中在主线程中,这样会给程序的调试和分析带来很多的麻烦(虽然主程序放上几千行程序没有问题),可以把它们模块化成子程序,要调用的时候只要找到相应的头文件。
程序就是这样一步步的写出来的,能把写好的程序能调试成功这才是关键,也是自我想法实现的一个过程。到调程序的时候遇到问题的很正常的,所以必须要有一个好的心态并保持冷静和耐心,发现问题并解决问题是一个非常享受的过程。当然在困难的时候同学和老师的帮助是很必要的,程序就这样在调试中改进。虽然最终实现了其中的部分功能,但还是很高兴。因为这个过程本来就是一个自学与自我实现的过程,在有限的时间内把一个陌生的事物达到某个效果,这不就是在今后的工作中的情形嘛!
28
沈阳航空航天大学北方科技学院毕业设计(论文)
6.2 硬件调试
在仿真实现后就可以硬件焊接,焊接时是有先后顺序的,这必须和调试联系在一起,先把按键、单片机、数码管焊接起来这样就可以先调试了。上电按下开始按钮后就出现问题,比如共阴极数码管在公共端加入三极管放大,上电后应该是两个数码管全亮的但是却出现乱码,这肯定是数码管的接线有问题。可以先用万用表调到蜂鸣器的档,分别检查数码管的各个引脚焊接和接线是否有问题,如果数码管的接线都没有问题,那再把单片机通上电用万用表测量单片机接入7段数码管的输出点是否都输出高电平。如果输出高电平那说明数码管有问题,否则说明单片机有问题。硬件中的很多问题都可以这样查找只要严谨的态度。
6.3 实验室调试注意事项
1.电源检测.12V电压经稳压变成5V,插芯片前必先检测电源. 2.单片机先不接,先检测光电耦合使用是否正常.
6.4 功能调试
通电前应检查焊接质量,确认无故障并将程序写入单片机AT89S51中。 (1) 按启动/停止键,两位数码管显示器显示“00”。
(2)按时间+、时间-键选择工作时间,每次累加(减)1分钟,时间的选择范围为00~60分钟。
(3)选好时间,延时5秒后继电器吸合工作,数码管同时显示剩余的工作时间。
(4)按压力+、压力-键通过改变直流电机上的电压(即改变汽油泵转速)调整清洗压力,数码管有显示。
(5)当剩余工作时间小于4分钟时,蜂鸣器开始鸣叫。直到定时结束,继电器释放,蜂鸣器停止鸣叫,数码管显示“00”。
(6)5分钟内无任何操作则自动断电,数码管无显示。油面过低保护: 为防止无油损坏汽油泵,油面过低时,传感器开关闭合,数码管g段显示“——”。油温过高保护; 为防止油温过高起火,温度过高时,温度继电器开关闭合,数码管g段显示“——”。
29
沈阳航空航天大学北方科技学院毕业设计(论文)
7 结 论
这次毕业设计我做的题目是。按照老师交给的任务书逐项来完成的。设计过程中的数据计算、硬件设计,软件处理等诸多方面进行论述,以求得较完善的工作性能来提高产品质量。因为做的题目是综合单片机,电机拖动,及自动化相关知识结合才能完成的。所以在学习的过程中不断学习新知识,一边学一边做。不断学习不断完善。
单片机应用技术是实现测试与自动控制的重要环节。在测试系统中,被作为一次仪表定位,其主要特征是能准确传递和检测出某一形态的信息,并将其转换成另一形态的信息。汽车喷油嘴清洗机的设计能把感受到的信号转换为电机变化。
首先是设计一个系统的框架图把整个系统模块化,随后,对各个模块进行设计这个过程也就是选择的过程,从单片机的选择,电机调速方式的选择,显示电路方式的选择等等都要对它们先有所了解在结合设计的要求选择。在硬件电路确定后就是编写控制程序,当然整个程序不可能一次性完成。
其次,画出总程序流程图,再对各个小模块进行编写再和PROTUES联调一步步添加程序最终实现设计要求。当然以上的每个过程都不是那么容易实现的,毕竟是从0开始,必须要有坚持不懈的精神。由于是初次应用单片机,无论是在硬件电路的设计还是在编写程序方面都有很多困难,但好在有老师和同学的帮助,困难一一解决。最后还是做出了一些成果,心里还是非常高兴的。总结本次设计还是学到了很多知识,尤其是单片机方面的知识,这对我日后走向工作岗位从容的从事各种单片机设计是极其有利的。
30
沈阳航空航天大学北方科技学院毕业设计(论文)
8结束语
本次毕业设计,在经过4个月的努力,通过C51单片机为核心实现了单片机控制直流电机的功能,能够对电机运行时间进行调整及电压的调整。当然,在设计中遇到了一些问题,例如,学习用Protel99设计硬件电路时遇到的困难比较大,但经过导师的指导和自己的学习及同学的帮助,可以用它来设计一些简单的电路图。起初,在收集课题资料方面有一定难度,在张军老师的指点在图书馆找到了与课题相关的一些资料,通过看书、作实验,基本了解了设备的工作原理,在自己设计过程中,自己购买了一些相关元件并且在学校实验室里进行了焊接,在参数设计方面请教了多名实验室老师才一步步把问题解决。
毕业设计在仿真软件上实现毕设要求,但硬件方面还是没得到圆满的结局,有不尽人意之处。但是在这段时间里,感觉真正学到了不少东西。并且我坚信如果以后有单片机控制电机方面的实例,我完全可以凭借自己的能力实现其功能。 其次要感谢一起作毕业设计的对我帮助很大的同学,他们在本次设计中勤奋工作,克服了许多困难来完成此次毕业设计,并承担了一部分的工作量。如果没有他们对我的帮助,此次设计的完成将变得非常困难。
然后还要感谢大学四年来所有的老师,为我们打下自动化专业知识的基础;同时还要感谢所有的同学们,正是因为有了你们的支持和鼓励,此次毕业设计才会顺利完成。
最后感谢各位领导老师大学四年来对我的大力栽培。
31
沈阳航空航天大学北方科技学院毕业设计(论文)
致 谢
本文是在导师张军老师的悉心指导下完成的。张军老师敏锐的洞察力,渊博的知识、严谨的治学态度和一丝不苟的工作作风给我留下了深刻的印象。在整个毕业设计过程中创造的良好的科研和学习环境及对我的严格要求和勉励,本人也从张军老师的独特的教学和管理方式上受益匪浅。在此谨向张军老师表示衷心的感谢和崇高的敬意。
衷心感谢邸庆龙学长在本课题的设计过程中对我工作的支持和帮助。感谢所有在学习过程中帮助过我的朋友们。当然,还要感谢航空学院的图书馆为我提供参考书籍,在此深表感谢。作为一名沈航学子,作者衷心感谢沈航对自己四年来的培养,将永远为她而骄傲。
32
沈阳航空航天大学北方科技学院毕业设计(论文)
参考文献
[1]刘建辉 翼常鹏等. 单片机智能控制技术[M]国防工业出版社,1999. [2]李朝青. 单片机外围数IC技术手册[M] 北京航空航天大学出版社,2001. [3]关德新 冯文全 . 单片机外围器件实用手册 电源分册[M] 北京: 北京航空航天大学出版社
[4]曹 冬 尹成群 何玉钧 基于AT89S51的新型打铃器[J] 《电子世界》 2005年第4期
[5]刘灿军编著.实用传感器.国防工业出版社,2004
[6]张洪润编著. 传感器技术与应用教程.清华大学出版社,2006
[7] 刘宏伟 基于单片机的模糊控制方法及应用研究[D];硕士;武汉理工大学;20070501
[8]谭浩强 C++程序设计[M] 北京:清华大学出版社 2004.6
[9] 中国电子学会. 2000/2001传感器与执行器大全(年卷)[Z]. 北京:电子工业出版社, 2001.
[10] 凌阳大学计划——凌阳单片机网. http://www.unsp.com.cn/1996, 7:单成祥. 传感器的理论与设计基础及其应用[M]. 北京: 国防工业出版社, 1999. [11] HACHOL A, DZIUBAN J, BOCHENEK A. Ophthalmic geometer with silicon micro machined structure[J]. Sensors and Actuators A Physical, 1996, 57(10): 23-33.
[12] Guan De Xin Feng Wen Quan. MCU peripheral devices practical manual power volumes [M] Beijing: Beijing University of Aeronautics and Astronautics Press, 1998. 6 158-162
[13]Christian A rbinger,W erner Enderle,O t to W agner. GPS based star senso r aiding for at t itude determ inat ion in high dynam ics[EB/OL]. ION GPS22001, 2952~ 2959.
[14] Liu Hongwei Based of SCM fuzzy control method and application [D]; master degree; Wuhan University of Technology; 20070501
33
沈阳航空航天大学北方科技学院毕业设计(论文)
附录Ⅰ protel接线图
34
沈阳航空航天大学北方科技学院毕业设计(论文)
附录Ⅱ 完整代码
#include #define reset() {WDT=0x1e;WDT=0xe1;}//看门狗复位宏定义 uchar code DATA_7SEG[10]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};/*0~9的数码管段码*/ uint deda;//=0; //1ms计时单元 uchar sec;//=0; //计时秒 char set_min;//=0; //设定分 uchar min_5m;//=0; //5分钟计数器 uchar val;//=0; //中间变量 uchar pwm_val; //调宽脉冲变量值 char push_val;//=20; //压力变化值 sfr WDT=0xa6;//定义看门狗定时器 sbit pushdec_key=P1^4; //压力-键 sbit pushinc_key=P1^3; //压力+键 sbit timedec_key=P1^2; //时间-键 sbit timeinc_key=P1^1; //时间+键 sbit buzz=P3^5; //驱动蜂鸣器端 sbit out=P3^6;//调宽脉冲输出端 sbit relay=P3^7; //驱动继电器端 uchar dis_sel;//=0; //显示内容散转标志 bit over_5m;//=0; //5分钟溢出标志 bit flag_5m;//=0; //5分钟标志 bit flag_5s;//=0; //5秒钟标志 35 沈阳航空航天大学北方科技学院毕业设计(论文) bit start;//=0; //启动标志 bit dis_flag; //显示标志 bit key_flag;//=0; //按下键标志 bit buzz_sound;//=1; //蜂鸣器声响标志 bit y;//=0; //中间变量 bit out_flag; //pwm输出标志 /*****************函数声明列表*****************/ void time_conv(void);// 时间计算子函数 void pwm_out(void);// 调宽脉冲输出子函数 void push_dis(void); //显示压力子函数 void oil_dis(void); //显示缺油子函数 void normal_dis(void) ;//显示正常工作子函数 void other_dis(void); //显示(缺油、超温)子函数 void temp_dis(void); //显示超温子函数 void oil_low(void); //缺油处理子函数 void temp_over(void); //超温处理子函数 void other(void); //(缺油、超温)处理子函数 void buzz_control(void); //控制蜂鸣器子函数 void delay(uint k); //延时子函数 void init(void); //初始化子函数 void init_timer0(void);//定时器0初始化子函数 void init_timer1(void);//定时器1初始化子函数 void key(void) ; //按键/感应开关处理子函数 void close(void); //关机子函数 void time_inc(void); //时间+子函数 void time_dec(void); //时间-子函数 void push_inc(void); //压力+子函数 void push_dec(void); //压力-子函数 36 沈阳航空航天大学北方科技学院毕业设计(论文) void normal_work(void); //正常工作子函数 /**********************************/ /*******************初始化**********************/ void init() {//push_val=20; IT0=1; IE=0x8b; reset() } /*********************定时器T0初始化************************/ void init_timer0() { TMOD=0x11; TH0=-(1000/256); TL0=-(1000%256); TR0=0;ET0=1;EA=1; } /*************定时器T1初始化************/ /*定时器T1初始化*/ void init_timer1() { TH1=-(50000/256); TL1=-(50000%256); TR1=1;ET1=1;EA=1;IT1=1 } /*************延时子函数***************/ void delay(uint k) 37 沈阳航空航天大学北方科技学院毕业设计(论文) { uint i,j; for(i=0;i /********************外中断0服务子函数*********************/ void int0_serve(void) interrupt 0 using 1 { delay(20); if(P3_2==0) start=!start; while(P3_2==0) { delay(20); if(P3_2==1) break; } } /****************************************/ /*1mS定时中断服务子函数*/ void timer0(void) 38 沈阳航空航天大学北方科技学院毕业设计(论文) interrupt 1 using 2 { TH0=-(1000/256); TL0=-(1000%256); deda++; pwm_val++; pwm_out(); time_conv(); } /*************调宽脉冲输出子函数***************/ void pwm_out(void) { if(out_flag) { if(pwm_val<=(push_val+30)) out=ON; else { out=OFF; } if(pwm_val>=50) pwm_val=0; } else out=OFF; } /****************时间计算子函数***************/ void time_conv(void) 39 沈阳航空航天大学北方科技学院毕业设计(论文) { if(deda>=1000) { sec++;deda=0; } if(deda==500) { buzz_sound=!buzz_sound; } if(sec>=60) { set_min--; sec=0; if(flag_5m) min_5m++; } if(min_5m>=5) { over_5m=1;min_5m=0; } if(set_min<=0) set_min=0; /***************/ } /**************** T1 5ms定时中断服务子函数(显示用)******************/ void timer1(void) interrupt 3 using 3 { 40 沈阳航空航天大学北方科技学院毕业设计(论文) TH1=-(45000/256); TL1=-(45000%256); if(start) { switch (dis_sel) { case 0:normal_dis();break; case 1:oil_dis();break; case 2:temp_dis();break; case 3:other_dis();break; case 4:push_dis();break; default:break; } } else { P2=0x00; P3=0xff; } reset() } /*******************压力调整显示子函数*********************/ void push_dis(void) { if(dis_flag) { P2=DATA_7SEG[(push_val)/10]; P3_0=0;P3_1=1; dis_flag=0;} 41 沈阳航空航天大学北方科技学院毕业设计(论文) else { P2=DATA_7SEG[(push_val)%10]; P3_0=1;P3_1=0; dis_flag=1;} } /********************正常工作显示子函数********************/ void normal_dis(void) { if(dis_flag) { P2=DATA_7SEG[set_min/10]; P3_0=0;P3_1=1; dis_flag=0;} else { P2=DATA_7SEG[set_min%10]; P3_0=1;P3_1=0;dis_flag=1;} } /***********************缺油显示子函数***********************/ void oil_dis(void) { if(buzz_sound) { if(dis_flag) { P2=0x38;P3_0=0;P3_1=1; dis_flag=0;} else {P2=0x38;P3_0=1;P3_1=0; dis_flag=1;} } else {P3_0=1;P3_1=1;} } /*****************超温显示子函数******************/ void temp_dis(void) 42 沈阳航空航天大学北方科技学院毕业设计(论文) { if(dis_flag){P2=0x78;P3_0=0;P3_1=1;dis_flag=0;} else {P2=0x78;P3_0=1;P3_1=0; dis_flag=1;} } /*********************超温、缺油同时发生显示子函数*************************/ void other_dis(void) { if((deda<250)||((deda>500)&&(deda<750))) { if(dis_flag){P2=0x40;P3_0=0;P3_1=0;P3_3=1;P3_4=1;dis_flag=0;} else {P2=0x40;P3_0=1;P3_1=1;P3_3=0;P3_4=0;dis_flag=1;} } else {P3_0=1;P3_1=1;P3_3=1;P3_4=1;} } /*******************按键\\感应开关处理子函数**********************/ void key(void) { delay(10); while(P1!=0xff) { switch (P1) { case 0xfd:time_inc(); break; case 0xfb:time_dec(); break; case 0xf7:push_inc(); break; case 0xef:push_dec(); break; case 0xdf:oil_low(); break; case 0xbf:temp_over(); break; 43 沈阳航空航天大学北方科技学院毕业设计(论文) case 0x9f:other(); break; default:break; } delay(500); } if(set_min>=4){key_flag=1;TR0=1;} } /******************主函数******************/ void main(void) { init(); init_timer0(); //定时器T0初始化 init_timer1(); //定时器T1初始化 while(1) //无限循环 { /*------------------------------------*/ if(start) { if(P1!=0xff)key(); else normal_work(); } else close(); } } /*********************正常工作子函数*************************/ void normal_work() { dis_sel=0; 44 沈阳航空航天大学北方科技学院毕业设计(论文) if((key_flag)&&(!flag_5s)) {relay=OFF;buzz=OFF;delay(6000);flag_5s=1;} if(flag_5s) { y=0; buzz_control();dis_sel=0; if(set_min) {out_flag=0;buzz=OFF;flag_5m=1; flag_5s=0;key_flag=0;delay(1000);relay=OFF;} else {relay=ON;delay(1000);out_flag=1;} } if(over_5m){over_5m=0;flag_5m=0;start=0;min_5m=0; out=OFF;relay=OFF;reset()} } /*****************超温、缺油同时发生处理子函数******************/ void other(void) { delay(10); if(P1==0x9f){while(1){dis_sel=3; buzz=OFF;relay=OFF; out_flag=0;if(!start)break;}} else dis_sel=0; } /*******************超温发生处理子函数*****************/ void temp_over(void) { delay(10); if(P1==0xbf){while(1){dis_sel=2;relay=OFF;buzz=OFF;out_flag=0;if(!start)break;}} else dis_sel=0; 45 沈阳航空航天大学北方科技学院毕业设计(论文) } /*******************缺油发生处理子函数*****************/ void oil_low(void) { delay(10); if(P1==0xdf){while(1){dis_sel=1;relay=OFF;out_flag=0;buzz=OFF;if(!start)break;}} else dis_sel=0; } /*****************关机处理子函数*******************/ void close(void) { P2=0xff;P3=0xff;relay=OFF;buzz=OFF;P1=0xff;out_flag=0;reset() dis_sel=0;set_min=0;key_flag=0;flag_5s=0;out=OFF;push_val=20;} /*************控制蜂鸣器子函数***************/ void buzz_control(void) { if((set_min>0)&&(set_min<4))buzz=buzz_sound; else buzz=OFF;} /****************时间增加子函数*******************/ void time_inc(void) { if(!timeinc_key)set_min++; if(set_min>=60)set_min=60;dis_sel=0; } /******************时间减少子函数******************/ void time_dec(void) { if(!timedec_key)set_min--; if(set_min<=0)set_min=0;dis_sel=0; 46 沈阳航空航天大学北方科技学院毕业设计(论文) } /*******************压力增加子函数*********************/ void push_inc(void) { while(!y){dis_sel=4;delay(2500);y=1;} if(!pushinc_key)push_val=push_val++; if(push_val>=20)push_val=20; } /*******************压力减少子函数*********************/ void push_dec(void) { while(!y){dis_sel=4;delay(2500);y=1;} if(!pushdec_key)push_val=push_val--; if(push_val<=0)push_val=0; } 47 沈阳航空航天大学北方科技学院毕业设计(论文) 附录Ⅲ 器件清单 序号 1 2 3 4 4 5 元件名称 单片机 按钮 三极管 三极管 LED 磁片电容 元件型号 AT89S52 常开 S8050 C1383 LG5011AH 27pF 0.1uF 100uF 6 7 8 10 11 12 13 14 15 16 17 电解电容 晶振 光电二极管 光电耦合器 场效应管 电源 蜂鸣器 中间继电器 油温传感器 油面高度传感器 电阻(欧姆) 10uF 11.0592M 4004 724-P621 IRF730 7805 HYDZ JZC-23F DA-02-QY 0111-0003 100 300 470 1K 4.7K 数量 1 5 2 1 2 2 3 1 2 1 2 4 1 1 1 1 1 1 1 1 1 2 3 48 因篇幅问题不能全部显示,请点此查看更多更全内容