基于AT89C52单片机的智能寻迹灭火小车的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
版本:doc
附源程序代码
毕业论文
基于AT89C52单片机的智能寻迹灭火小车的设计
I
摘要
随着社会的发展、科技的进步,工业的生产和管理进入了自动化、信息化和智能化时代,智能化已经成为时代发展的需要。
当工作现场环境恶劣时,人工不能完成的任务如物料运输和灭火等,可采用智能寻迹小车完成相应的任务。
基于工作现场和日常生活的实际需要,研究和开发智能小车寻迹系统具有十分重要的意义。
本文首先简单描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本次毕业设计所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序和流程和实现过程。
本设计数字集成电路技术为基础和单片机技术为核心。
本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。
关键词AT89C52单片机;小车;温度
I
Abstract
Along with the progress of social development, science and technology, production and management of industry got into automation, information-based turns ages with intelligence, intelligence's turning has already become the demand that the ages develops.When working the spot environment is bad, the artificial can not complete of task such as material conveyance with extinguish fire etc., can adopt intelligence to look for the vestige small car to complete a homologous task.According to the effective demand of the work the spot and the daily life, research and the development intelligence small car look for vestige system to have very important meaning.
This text in brief describes the system hardware work principle first, and attach to take into to explain by the system structure frame diagram, emphasized to introduce each hardware applied of this graduation design to connect the function and work process that a people's technique and each one connect a people mold piece, elaborated procedure and process and carry out process in detail secondly.This design number integrated circuit technique is foundation and single slice of machine technique is cores.The predominant thought that this text writes is a soft hardware to combine together and take hardware as foundation, carry on writing of each function mold piece.
Keyword:The AT89 C52 single slice of machine;Small car;Temperature
II
目录
摘要 (I)
Abstract (II)
第1章绪论 (1)
1.1智能寻迹灭火小车控制系统的设计背景和意义 (1)
1.2智能寻迹灭火小车控制系统的目标 (1)
第2章智能寻迹灭火小车控制系统介绍 (2)
2.1智能寻迹灭火小车系统功能概述 (2)
2.2系统工作原理 (2)
2.3本章小结 (3)
第3章系统硬件设计 (4)
3.1硬件设计框图 (4)
3.2硬件设计及主控芯片介绍 (5)
3.2.1AT89C52主控芯片介绍 (5)
3.2.2寻迹系统方案设计 (7)
3.2.3电机驱动系统方案设计 (11)
3.2.4电源系统方案设计 (11)
3.2.5显示系统方案设计 (12)
3.2.6温度系统方案设计 (13)
3.2.7车体方案设计 (14)
3.2.8水泵风扇方案设计 (14)
3.3本章小结 (15)
第4章系统软件设计 (16)
4.1软件设计思路 (16)
4.2系统程序流程图 (16)
4.2.1寻迹模块程序流程图 (16)
4.2.2驱动电机模块程序流程图 (17)
4.2.3显示模块程序流程图 (18)
4.2.4温度模块程序流程图 (19)
4.2.5水泵风扇模块程序流程图 (20)
4.3各功能模块软件程序设计 (21)
4.3.1寻迹模块主程序 (21)
4.3.2驱动电机模块主程序 (23)
4.3.3显示模块主程序 (24)
4.3.4温度模块主程序 (25)
III
4.3.5水泵风扇模块主程序 (27)
4.3.6延时子程序 (28)
4.4本章小结 (28)
第5章系统调试 (29)
5.1硬件调试 (29)
5.1.1RPR220信号产生的调试 (29)
5.1.2温度模块的时序调试 (30)
5.2调试软件WAVE介绍 (30)
5.2.1主界面 (30)
5.2.2菜单介绍 (31)
5.3软件程序调试 (31)
5.3.1调试的主要方法和技巧 (31)
5.3.2利用WAVE调试本系统 (32)
5.4综合调试 (33)
5.5本章小结 (34)
结论 (35)
致谢 (36)
参考文献 (37)
附录1 (38)
附录2 (42)
附录3 (48)
附录4 (49)
IV
第1章绪论
1.1智能寻迹灭火小车控制系统的设计背景和意义
火灾在现实生活中是非常普遍的,它被称为三大自然灾害之一。
消防人员时时刻刻冲到第一线,面临生命危险,在这种背景下,智能寻迹灭火系统应运而生,实现了对安全防护的质的提高,也大大地减低了消防人员的危险。
在智能寻迹灭火系统中应用单片机来代替人的思考,还可以实现自动化控制,简化了灭火的工作流程,使单片机代替多余的消防人员,节省了国家不必要的支出,减低了危险。
现今,单片机以其强大的控制能力已经被广泛应用于诸多领域,配以各种接口传感器可以实现系统的智能化。
无论在安全防护领域、工业控制领域、医疗卫生领域、还是在国防军事领域、航天航空领域,微控制器都起着举足轻重的作用。
从最初的8位控制器到现在的32位控制器都还有很大的发展和应用空间。
根据本设计的要求,将采用ATMEL公司生产的AT89C52型单片机
1.2智能寻迹灭火小车控制系统的目标
本设计开发的智能寻迹灭火小车控制系统应用范围十分广泛,设计的智能寻迹灭火小车应该能够实现温度监控、报警、具有自动寻迹、吹风灭火、喷水灭火、返回起始点等功能,可通过温度的监控来进行设定小车是否前进。
本设计具有很好的开发前景,将会受到广大安全防护人员的欢迎。
1
第2章智能寻迹灭火小车控制系统介绍
2.1智能寻迹灭火小车系统功能概述
经过开题期间的文献查阅和实际情况调研,了解到目前的消防车的研究与设计一般采用的方案大都为:通过人为报警,再由消防人员开着小车去灭火。
那样消防人员会随时面临着危险。
通过自己的想法。
采用的方案为:通过温度传感器、检测到火灾发生地点的温度的因素与其标准区间值不符,系统会自动派出无人消防车进行灭火等操作。
该控制系统的最大特点:
1.结构简单
2.体积小、功率低
3.信号无干扰,传输准确度高
4.成本低廉
5.安全
系统各个功能模块简介:
1.寻迹模块:主要用来给小车做导航前进用。
2.电源模块:主要用来分别区分给单片机与电机、水泵驱动模块供电。
3.温度模块:主要用来对温度传感器给单片机传值的功能。
4.显示模块:主要用来显示单片机传过来的温度值。
5.电机驱动模块:主要用来驱动两个减速直流电机,实现小车的前进、
后退、前左转、前右转、后左转、后右转、停车等功能。
6.风扇、水泵驱动模块:主要是用来控制水泵是否喷水、风扇是否吹
风,来实现小车灭火功能。
2.2系统工作原理
在智能寻迹灭火小车控制系统的设计中,工作原理:首先小车检测水罐水位,是否到达水位线。
如果没有,则等待装水直至装满为止。
然后通过18B20检测传回来的温度,实时显示。
当温度达到上限时,开始启动报警,并驱动小车沿着黑线寻迹前进。
到达指定地点时,小车停止,启动风扇和水泵,开
2
始吹风、喷水。
当温度降回原先的区间或者水罐的水降低到警戒线。
小车开始寻迹返回。
然后等待水装满。
再一次运行。
2.3本章小结
本章结合目前的智能寻迹灭火小车控制系统对当前的控制系统进行了概述,系统具备的功能以及系统控制的工作原理,通过阅读本章内容可对该系统有一个总体的了解。
3
4
第3章 系统硬件设计
3.1 硬件设计框图
本控制系统硬件设计框图3-1如下所示:
图3-1 硬件设计框图 在智能寻迹灭火小车控制系统的设计中,以AT89C52为核心,用了两片L298N ,一片用于驱动两个减速电机,一片用于驱动水泵和风扇。
12V 电源单独给电机供电,再用7805把12V 电源降压至5V 给单片机供电。
首先单片机根据检测水位及温度是否到达上限的信号,来判断小车是否前进。
如果没有该信号,则一直等待。
当产生信号驱动小车前进时,是通过寻迹模块里的RPR220
是否寻到黑线产生的电平信号返回到单片机,单片机根据程序设计
的要求做出相应的判断送给电机驱动模块,让小车来实现前进、左转、右转、停车等基本功能。
到达火灾地点时,单片机通过L298N来控制水泵、风扇工作灭火。
3.2硬件设计及主控芯片介绍
在智能寻迹灭火小车控制系统的设计中,共用了一片AT89C52单片机作为本控制系统的主控芯片,硬件设计模块共分为:寻迹模块、电机、风扇水泵驱动模块、电源模块、显示模块、温度模块、水泵风扇模块。
3.2.1AT89C52主控芯片介绍
AT89C52简介
本系统的核心部件AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含2k字节的可反复擦写的只读程序存储器(PEROM)和128字节的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,具有较高的性价比。
设计本着应用性,因此选择AT89C52单片机作为本控制系统的中央处理器。
AT89C52包括:
(1)一个8位微处理器CPU。
(2)片内数据存储器RAM和特殊功能寄存器SFR。
(3)片内程序存储器ROM。
(4)两个定时/计数器T0、T1,可用作定时器,也可用以
对外部脉冲进行计数。
(5)四个8位可编程的并行I/O端口,每个端口既可作输
入,也可作输出。
(6)一个串行端口,用于数据的串行通信。
(7)中断控制系统。
(8)内部时钟电路。
AT89C52单片机的基本组成如图3-2所示。
5
T0 T1
01
图3-2 AT89C52单片机基本结构
AT89C52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个
16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89C52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式以适应不同产品的需求。
AT89C52芯片的40个引脚功能为:
1.Vcc:电源电压。
2.GND:地。
INT XTAL
P
P
P
P
P
P
P
P RXD/P3.0 TXD/P3.1
/P3.2 INT1/P3.3 T0/P3.4 T1/P3.5 WR/P3.6 RD/P3.7
2 XTAL1 GND
6
7
3. P0口(P0.0~P0.7):该端口为漏极开路的8位准双向口,它为外部低8位地址线和8位数据线复用端口,驱动能力为8个LSTTL 负载。
P1口(P1.0~P1.7):它是一个内部带上拉电阻的8位准双向I/O 口,P1口的驱动能力为4个LSTTL 负载。
P2口(P2.0~P2.7):它为一个内部带上拉电阻的8位准双向I/O 口,P2口的驱动能力也为4个LSTTL 负载。
在访问外部程序存储器时,作为高8位地址线。
P3口(P3.0~P3.7):为内部带上拉电阻的8位准双向I/O 口,P3口除了作为一般的I/O 口使用之外,每个引脚都具有第二功能。
P3口还用于实现AT89C52的各种功能,如下表3-1所示。
表3-1 P3口各功能对照表
P 3.2P 3.3位线引脚第二功能
P 3.010RXD (串行输入口)P 3.111TXD (串行输出口)12INT 0(外部中断0)13INT 1(外部中断
1)P 3.414T 0(定时器0的计数输入)P 3.515T 1(定时器1的计数输入)16WR (外部数据存储器写脉冲)17
RD (外部数据存储器读脉冲)
P 3.7
P 3.6
4. RST :复位输入。
RST 一旦变成高电平,所有的I/O 引脚就复位到“1”。
当振荡器正在运行时,持续给出RST 引脚两个机器周期的高电平便可完成复位。
每一个机器周期需12个振荡器或时钟周期。
5. XTAL1:作为振荡器反相放大器的输入和内部时钟发生器的输入。
6. XTAL2:作为振荡器反相放大器的输出。
3.2.2 寻迹系统方案设计
这里的寻迹是指小车在地板上,寻着黑线行走,通常采取的方法是以下三种方案。
方案1:用光敏电阻组成光敏探测器。
光敏电阻的阻值可以跟随周围环境光线的变化而变化。
当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。
因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。
将阻值的变化值经过比较器就可以输出高低电平。
但是这种方案受光照影响很大,不能够稳定的工作。
因此我考虑其他更加稳定的方案。
方案2:用红外发射管和接收管自己制作光电对管寻迹传感器。
红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。
这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳定,且容易受外界光线的影响,因此我放弃了这个方案。
方案3:用RPR220型光电对管。
RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。
RPR220采用DIP4封装,其具有如下特点:
塑料透镜可以提高灵敏度。
内置可见光过滤器能减小离散光的影响。
体积小,结构紧凑。
当发光二极管发出的光反射回来时,三极管导通输出低电平。
此光电对管调理电路简单,工作性能稳定。
因此我选择了方案3。
RPR220主要使用一片LM393比较器芯片,根据寻到黑线时,电压进行比较,传回单片机一个值。
该设计的寻迹原理图3-2-2如下所示:
8
9
图3-2-2 寻迹模块原理图
3.2.2.1 用光电对管电路的设计
我设计并论证了两种光电对管检测及调理电路,电路原理图分别如
3-2-2-1和图3-2-2-2所示:
图3-2-2-1 光电对管检测电路1
图3-2-2-1所示电路中,R1起限流电阻的作用,当有光反射回来时,光电对管中的三极管导通,R2的上端变为高电平,此时VT1饱和导通,三极管集电极输出低电平。
当没有光反射回来时,光电对管中的三极管不导通,VT1截至,其集电极输出高电平。
VT1在该电路中起到滤波整形的作用。
经试验和示波器验证,该电路工作性能一般,输出还有杂散干扰波的成分。
如果输出加施密特触发器就可以实现良好的输出波形。
但是这种电路用电量比较大,给此种传感器调理电路供电的电池压降较快。
究其原因,是因为光敏三极管和三极管VT1导通时的导通电流较大。
因此我考虑用比较器的方案。
图3-2-2-2光电对管检测电路2 在图3-2-2-2中,可调电阻R3可以调节比较器的门限电压,经示波器观察,输出波形相当规则,可以直接够单片机查询使用。
而且经试验验证给此电路供电的电池的压降较小。
因此我选择此电路作为我的传感器检测与调理电路。
10
3.2.3驱动电机系统方案设计
方案1:采用专用芯片L298N作为电机驱动芯片。
L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。
用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
方案2:对于直流电机用分立元件构成驱动电路。
由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。
但是这种电路工作性能不够稳定。
因此我们选用了方案1。
驱动电路的设计如图3-2-3所示:
图3-2-3 驱动电机模块原理图
3.2.4电源系统方案设计
由于本系统需要电池供电,我考虑了如下集中方案为系统供电。
方案1:采用8节1.5V干电池供电,电压达到12V,给支流电机供电,然后将12V电压再次降压、稳压后给单片机系统和其他芯片供电。
并且电池的价格比较低。
11
12
方案2:采用3节4.2V 可充电式锂电池串联共12.6V 给直流电机供电,经过7812的电压变换后给支流电机供电,然后将12V 电压再次降压、稳压后给单片机系统和其他芯片供电。
锂电池的电量比较足,并且可以充电,重复利用,因此,这种方案比较可行。
但锂电池的价格过于昂贵,使用锂电池会大大超出我的预算,因此,我放弃了这种方案。
方案3:采用12V 蓄电池为直流电机供电,将12V 电压降压、稳压后给单片机系统和其他芯片供电。
蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。
但蓄电池的体积过于庞大,在小型电动车上使用极为不方便,
综上考虑,我选择了方案1。
3.2.5 显示系统设计
由于本系统需要显示温度,我考虑如下几种方案来显示:
方案1:使用七段数码管直接与单片机相连。
需要八个段码口接上拉电阻和三级管放大。
其缺点占用口太多。
方案2:使用CD4511芯片直接与四位一体的七段数码共阴管相连,优点只占用八个数据口,四个片选口,四个段码值口。
唯一的缺点是数据管不能显示小数点。
综上考虑,我选择了方案2。
显示模块电路设计如图3-2-5:
图3-2-5
LED 数码显示器是由LED
发光二极管组合显示字符的显示器件。
它使
用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点,故通称之为7段发光二极管数码显示器。
它分为静态显示和动态显示。
1)静态显示
所谓静态显示,就是在同一时刻只能显示一种字符,或者说被显示的字符在同一时刻是稳定不变的。
其显示方法比较简单,只要将显示段码送到段码口,并把位控字送到片选口即可。
2)动态显示
如果要在同一时刻显示不同的字符,从电路上看,这是办不到的。
因此只能利用人眼对视觉的残留,采用动态扫描显示的方法,逐个地循环点亮各位数码管,每位显示1ms左右,可人看起来就好象在同时显示不同的字管一样。
3.2.6温度系统设计
本控制系统采用18B20温度传感器。
它是以9位数字量的形式反映器件的温度值,具有如下特性:
1)独特的单线接口仅需要一个端口引脚进行通迅
2)简单的多点分布应用
3)无需外部器件
4)可通过数据线供电
5)零待机功耗
6)测温范围-55~+125度,以0.5度递增。
7)温度数字量转换时间200MS(典型值)
8)应用包括温度控制、工业系统、温度计或任何热感测系统。
它的引脚图为:
13
引脚说明:
3.2.7车体方案设计
方案1:购买玩具电动车。
购买的玩具电动车具有组装完整的车架车轮、电机及其驱动电路。
但是一般的说来,玩具电动车具有如下缺点:首先,这种玩具电动车由于装配紧凑,使得各种所需传感器的安装十分不方便。
其次,这种电动车一般都是前轮转向后轮驱动,不能适应该题目的方格地图,不能方便迅速的实现原地保持坐标转90度甚至180度的弯角。
再次,玩具电动车的电机多为玩具直流电机,力矩小,空载转速快,负载性能差,不易调速。
14
而且这种电动车一般都价格不菲。
因此我们放弃了此方案。
方案2:自己制作电动车。
经过反复考虑论证,我制定了左右两轮分别驱动,前万向轮转向的方案。
即左右轮分别用两个转速和力矩基本完全相同的直流减速电机进行驱动,车体前部装一个万向轮。
这样,当两个直流减速电机转向相反同时转速相同时就可以实现电动车的原地旋转,由此可以轻松的实现小车坐标不变的90度和180度的转弯。
在安装时我保证两个驱动电机同轴。
当小车前进时,左右两驱动轮与前万向轮形成了三点结构。
这种结构使得小车在前进时比较平稳,可以避免出现后轮过低而使左右两驱动轮驱动力不够的情况。
为了防止小车重心的偏移,前万向轮起支撑作用。
对于车架材料的选择,我们经过比较选择了有机玻璃。
用有机玻璃做的车架比塑料车架更加牢固,比铁制小车更轻便,美观。
综上考虑,我们选择了方案2。
3.2.8水泵、风扇模块设计
采用的方案与驱动电机系统模块一样。
采用的是L298N。
3.3本章小结
本章通过框图的形式介绍了各个系统模块的设计,将寻迹模块、驱动电机模块、电源模块、温度模块、显示模块、水泵风扇等几部分的设计思路作了详细分析,通过阅读本章内容可对本智能寻迹灭火小车控制系统的硬件设计全面了解。
15
第4章系统软件设计
对于一个完整控制系统来说,除了要有一个完整的硬件控制以外,还应该有一个能充分发挥硬件功能的软件系统来支持它,本章将详细介绍寻迹模块、电机驱动、显示模块、温度系统的软件实现方法。
4.1软件设计思路
根据总体设计的思想及本系统实现的功能,在软件设计中完成以下功能。
1.寻迹模块主程序:由是否遇到黑线产生信号的操作,信号返回到单
片机,再通过单片机来实现相应的功能。
2.电机驱动模块主程序:主要用来控制两个直流减速电机,实现前进、
后退、前左转、前右转、后左转、后右转、停车等功能。
3.显示模块主程序:主要通过单片机用来显示实时温度值。
4.温度模块主程序:主要用来给单片机传递温度的相应执行模块。
5.水泵风扇模块程序:主要用来控制一个水泵和风扇,实现喷水、吹
风等功能。
4.2系统程序流程图
根据软件的总体设计思想及本系统所要实现的功能,进行其系统程序流程图设计,本系统程序流程图共分为:寻迹程模块序流程图、电机驱动模块程序流程图、显示模块程序流程图、温度模块程序流程图、水泵风扇模块程序流程图。
4.2.1寻迹模块程序流程图
在用户没有对水缸装满和温度没到达上限时,程序不停的进行水缸水位和温度扫描,直到水位达到和温度达到上限的时候,程序跳转到对应的位置执行。
其寻迹模块程序流程图如下图4-1所示:
16
图4-1寻迹模块程序流程图
4.2.2驱动电机模块程序流程图
程序运行后,首先进行初始化将AT89C52单片机的P1口全部置0,等到水位满和温度达到上限时,然后就循环判断寻迹系统送过的信号,对电机进行相应的功能驱动。
具体如下图4-2和表4-1所示:
17
18
图4-2
驱动电机模块程序流程图 表4-1 驱动电机模块程序功能对照表
4.2.3 显示模块程序流程图
该程序主要用来把18B20所传过来的温度值实时显示出来。
如下图4-3所
示:
图4-3 显示模块程序流程图
4.2.4温度模块程序流程图
程序运行后,首先对程序进行初始化,给P0.0-P0.1赋初值。
然后对AT89C52单片机的P0.0-P0.1端口进行循环扫描,把扫描到的值送到温度读取函数得到值,送显示模块继续执行。
具体如下图4-4所示:
19
图4-4 温度模块程序流程图
4.2.5水泵风扇模块程序流程图
该模块程序与驱动电机模块采用的驱动电路是一样的。
都是用L298N。
针对该模块程序流程的相应调用而执行的模块。
如下图4-5所示:
20
图4-5 水泵风扇模块程序流程图
4.3各功能模块软件程序设计
在各个硬件功能模块的基础上,针对其预定实现的相应功能对各个功能模块进行软件程序设计。
4.3.1寻迹模块主程序
程序运行后,首先进行初始化,将P1口置低,然后等待水满和温度达到上限报警,
void zhengxiang() //正向前进函数
{
while(1)
{
if(chuan_gan1==0&&chuan_gan2==0)
{
21
ting();
biaozhi=1;
}
if(chuan_gan1==1&&chuan_gan2==0)
{
zuozhuan();
}
if(chuan_gan1==0&&chuan_gan2==1)
{
youzhuan();
}
if(chuan_gan1==1&&chuan_gan2==1)
{
qianjin();
}
if(wendu<30&&wendu1<30)
stop=1;
if(biaozhi==1&&chuan_gan1==0&&chuan_gan2==0) {
biaozhi=0;
ting();
stop=1;
}
if(stop==1)
{
stop=0;
ting();
hh=1;
sbqd();
break;
}
}
}
22
4.3.2驱动电机模块主程序
程序运行后,首先进行初始化将AT89C52单片机的P1口全部置0,通寻迹模块得出来的信号,传送给L298N。
该程序的具体函数代码如下:void qianjin() //前进
{
IN0=0;
IN1=1;
IN2=0;
IN3=1;
}
void houtui() //后退
{
IN0=1;
IN1=0;
IN2=1;
IN3=0;
}
void ting() //停止
{
IN0=0;
IN1=0;
IN2=0;
IN3=0;
}
void zuozhuan() //正向左转
{
IN0=0;
IN1=0;
IN2=0;
IN3=1;
}
23
void youzhuan() //正向右转
{
IN0=0;
IN1=1;
IN2=0;
IN3=0;
}
4.3.3显示模块主程序
该模块主程序运行后,首先进行初始化,从CPU得到温度值。
显示具体函数代码如下:
void xswd(uchar i,uchar j) //主程序温度显示函数
{
smxs(0,(j/10)); //第一个温度的十位
dly(17);
smxs(1,(j%10)); //第一个温度的个位
dly(17);
smxs(2,(i/10)); //第二个温度的十位
dly(17);
smxs(3,(i%10)); //第二个温度的个位
dly(17);
}
void xianshiwendu() //温度读出,显示
{
uchar wendu=0,wendu1=0;
wendu = ReadTemperature(); //将温度读出
wendu1 = ReadTemperature1();
xswd(wendu,wendu1); //将温度显示
}
void smxs(uchar ledcs,uchar leddata)//数码显示
{
uchar wdsmpx,wdsmsj; //定义温度数码片选、数据变量
24
wdsmpx = smpx[ledcs]; //将片选数据选出
wdsmsj = smsj[leddata]; //将数码数据选出
P2 = (wdsmsj & wdsmpx) ; //数据按位与给P2口
}
4.3.4温度模块主程序
程序运行后,首先对程序进行初始化,然后对AT89C52单片机的P0.0-P0.1端口进行循环扫描,扫描到的值送到显示模块继续执行。
具体函数代码如下:wdcsh(void) //初始化函数
{
uchar x=0;
WD = 1; //DQ复位
delay(8); //稍做延时
WD = 0; //单片机将DQ拉低
delay(80); //精确延时大于 480us
WD = 1; //拉高总线
delay(14);
x=WD; //稍做延时后如果x=0则初始化成功 x=1则初始化失败 delay(20);
}
ReadOneChar(void) //读一个字节
{
uchar i=0;
uchar shuju = 0;
for (i=8;i>0;i--)
{
WD = 0; // 给脉冲信号
shuju>>=1;
WD = 1; // 给脉冲信号
if(WD)
shuju|=0x80;
delay(4);
25。