本科毕业论文-—基于51单片机的红外遥控控制电机转速设计.doc
郑州/*/大学毕业设计摘 要本文首先描述了红外线通信原理和红外线接收电路,其次,介绍了直流电机的结构和工作原理,然后,详细的阐述了单片机内部结构及其原理,最后,着重介绍了PWM调速和直流电动机正转,反转和制动的原理。直流电机具有良好的调速特性。调速简单,平滑,调速范围大,过载能力强的特点。能满足工业和生活中各种不同的要求,在近代社会发展中起着重要的作用。电机采用红外遥控功能控制后,整个电机控制更简单、方便、且易于操作。本文中通过红外线按键发射遥控信号,经过红外线接收元件接收信号,然后通过单片机对直流电动机的控制,实现对电动机的启动,降速、升速和停止功能。关键词红外线遥控,直流电机,单片机,调速,制动 PS:毕业设计 14届 知网查的重复率是0.3% 拿出来给学弟学妹们参考一下 也可以代做毕业设计 论文全手工 保证不重复 写论文或者做板子都可以 电路设计 单片机软件编程 PLC也差不多 扣扣9.1.4.0.7.8.0.9.9 联系我AbstractThis paper describes the principle of infrared communication and the infrared receiving circuit, secondly, introduced the structure and working principle of DC motor, and then, described in detail the internal structure and principle of single chip microcomputer, finally, introduces the PWM control and the DC motor forward, reverse, brake principleDC motor with a speed regulation characteristic of good. Speed control is simple, smooth, wide speed range, the characteristics of strong overload capacity. To meet the requirements of different kinds of industry and daily life, in the development of modern society play a important role. The use of infrared remote control function to control the motor, the motor control more simple, convenient, and easy to operate.This paper through the infrared remote control signal transmitter, through the infrared receiving element receives the signal, and then through the singlechip control of DC motor, the motor starting, speed, speed up and stop function.KEY WORDS: Infrared remote control, dc motor, single chip microcomputer, speed control, brakeis .2.目录前 言4 第1章 红外线通信5 1.1 红外通信原理5 1.1.1 红外接收电路51.1.2红外发光管61.1.3红外接收器件61.1.4红外遥控系统结构61.1.5硬件电路设计71.1.6红外解码过程7 第2章 直流电动机原理8 2.1 直流电动机8 2.2 直流电动机结构8 2.2.1 定子的结构和原理8 2.2.2转子的结构和原理9 2.2.3其它部分的结构和原理9 2.3直流电动机的控制原理9 第3章 单片机STC89C5111 3.1 单片机概况11 3.2 单片机内部结构和原理11 3.2 复位电路及时钟电路12 3.1 单片机最小系统13 第4章PWM调制和电机的使用14 4.1 PWM调制14 4.2 直流电机的使用14 4.2.1 电机的启动14 4.2.2 电机的调速14 4.2.3 电机的反转15 4.2.4电机的制动15 4.3 电机驱动芯片L293d15 第5章 系统硬件设计17 5.1 系统硬件电路图17 5.2 系统硬件PCB图18 5.3 实物图19 结论20 致谢21 参考文献22 附录23.10.前 言红外线器件应用范围的越来越广,也逐渐的走进了人们的日常生活。因此很多人对红外遥控也不再陌生和好奇,更多的是应用在电视机,电风扇,空调中被大家熟知。但是仅仅了解和知道是不够的,很有必要去理解它的原理。直流电动机有着快速性、可靠性、可控性、效率高等许多特点,受到了各行各业的热爱,比如电气仪表,汽车,家用电器,儿童玩具等方面得到日益普及,成为我们日常生活的一部分。由于近代科技的飞速发展,使我们不再仅仅局限于直流电机,交流电动机逐渐取代直流电动机,成为目前国内外研究热门课题之一。但直流电动机仍被采用在许多行业上,比如数控机床。同时,直流电动机作为交流电动机的基础,了解直流电机驱动也是不可少的。本设计通过红外按键控制,经过单片机解码对电动机进行一系列操作。当处理的信息比较复杂和精细时,仅仅采用硬件电路来设计,耗时耗力,并且不易于检测和维修,因此本文采用软件编程和硬件电路设计的结合,这样更简单,直观,使用起来也方便。红外遥控的应用带动整个微电子行业的发展,尤其在自动控制领域。单片机作为软硬件的大脑,在实时检测和自动控制领域中是要学习的必不可少的知识。但只知道单片机的功能还不行,对电路原理也要有一定的知识。更重要的是,要学会如何对现场信号的采集,排除干扰信号,收集有效信号,最后通过分析应用到实践中。第1章 红外线通信1.1 红外通信原理红外通信原理是是通过红外线波段进行信号交流传递。红外线的发射部分将数据调制为一系列的脉冲信息。然后将接收的信号转变为电信号,最后再经过内部电路的滤波,放大等几项操作后送给解调电路进行解调。还原为单片机或者计算机能识别的信号进行控制。简而言之,红外通信原理实际上就是一个调制和解调的过程,最后变成所人们需要的二进制数字信号,通过利用红外线信号通道进行传输,控制实现一系列功能,因此红外通信接口可以看成是针对红外信号通道的调制解调器1.1.1 红外接收电路大多数红外接收器通过集成为单个元件。它通常有三个引脚,输出为方波信号(一系列的高低电平),本设计选用集成块为VS18383,如图1-1。图1-1 红外接收电路发射器发出的红外线信号,由红外线接受器件接收,经VS18383处理后获得一系列方波信号。然后送给单片机P3.2端口,经过单片机的内部处理计算,根据处理结果,再由单片机产生控制电机的相关信息,对器件控制。红外线接收器原理分析:当红外接收器件接收产生的信号时,光信号转换为的电信号的下降沿触发单片机外部中断INT0引脚。单片机接收下降沿信号时对其识别。对第1位数码的宽度进行计算。若采集的第1位低电平数码的脉宽不到8 ms,将作为错误信号处理,为非引导码。当经过计算的脉冲冲宽度超过8 ms而不到16ms时候,则认定为引导码,同时对引导码储存。然后分别接收引导码后的操作码和客户码,也储存在定义的数据区。 1.1.2红外发光管红外发光二极管一般使用材料为砷铝化镓,英文简称为GaAs,外加正向偏置电压,制成PN结。通常为浅蓝色、全透明或黑色的树脂封装,通电后会产生的光波波长波段一定的红外线。红外发射管如图1-2: 图1-2 红外发光管1.1.3红外接收器件红外一体化接收头:它元件里面含有一个滤波电路。功能是用来清楚红外线合成信号得有效信号,排除其它无用信号。本文中载波信号为38Kz,并送出接收到的信号。当红外线的信号进入与之配套的红外线接收器件,经过接收器件的解码,在其输出端便可以得到原先红外发射器发出的二进制数字编码。红外接收头如图1-3:图1-3 红外接收器件1.1.4红外遥控系统结构通常的红外遥控系统有两部分组成,一部分为接收电路,还有就是发射电路。应用编码或者解码集成电路芯片来进行相应的控制操作。发射一端为红外遥控板、经过编码和调制、通过红外灯管发出信号。接收器件内部集成内部光电放大电路、经过解调步骤之后送给单片机解码。红外遥控系统结构流程如图1-4:图1-4 红外发遥控系统1.1.5硬件电路设计发射电路:图1-5 红外发射电路1.1.6红外解码过程通常由红外发光管与38Kz载波发射,红外接收头VS18383采集,并收集能识别的信号,在它内部进行解码,形成一系列的高低电平矩形方波。很显然,这种矩形方波是我们很难利用的,所以把红外接受的引脚接单片机的外部中断INT0,由单片机外部中断和单片机内定时器配合。对其解码的高低点评进行识别,并加以分析。识别出红外发射管发射的高低电平,通过定时器计算,把高低电平变成十六进制的数字,并储存在单片机内部中,形成数字开关,对相应的外围部件进行控制或进行显示。第2章 直流电动机原理2.1 直流电动机 电动机机电能量相互转换的装置。输出或输入为直流的电机,叫做直流电动机。直流电动机把直流电能转化为机械能,它是把电能转化为机械能的装置。启动简便,快捷的特性,使它多用在对启动,调速较高的场合,例如在电车,龙门刨等设备上应用很广泛。直流发电机把机械能转变为直流电能。它是一种把机械能转化为电能的装置。2.2 直流电动机结构直流电动机主要有两部分构成,一部分为定子,另一部分为转子。通常来说静止的部件叫做定子,其余的 部件叫做转子。因为绕组和电枢绕组间是相对运动的,所以从理论上讲,两部分都可以做为定子和转子。但是通常为了维护方便和检测故障,把旋转的一部分规定为转子,它包括机座,主极,换向器等部分。而旋转的一部分叫转子。转子部分则包括电枢铁心,电枢绕组,风扇,轴承和转轴。除此之外的其它部分结构有电刷装置,轴承支撑。2.2.1 定子的结构和原理主磁极:主磁极主要是生成气隙磁场,使电枢表面形成磁通按照一定的规律排列。它的励磁绕组有两部分组成,分别是并励和串励。并励绕组数量比较多,并且细。而串励则相反,它的绕组数量少,导线比较粗。主磁极由0.5mm到3mm厚的钢板冲击成的冲片形成的,叠压成形。主极叠片一般用螺钉固定在磁轭上。换向极:换向极由两部分组成,一部分是换向绕组,另一部分为铁心。它处于两个主磁极中间位置,作用产生换向磁场,帮助主磁极换向。机座和磁轭:机座的主要作用只要是支撑机座,同时作为磁极间的磁通通路,一般用铸钢材料铸成。通常才有叠片的方式,主要是为了减弱涡流效应。磁轭用薄钢制成,相互之间绝缘,同时固定在机座上。2.2.2转子的结构和原理电枢绕组:是进行能量变换的部件,它的功能是产生感应电动势。在磁场和感应电动势下产生电磁转矩。它是由一系列元件结合而成,置于电枢线圈的槽中。为了避免线圈被转动时抛离槽外面,通常将槽口牢固起来。然后按照一定规律放到换向片上,元件的一个边放在一个槽内,另一个边放在另外的槽外,相邻的两个槽依次放上元件,一直到槽内放满为止。换向器:将外部电源的直流电流转换为内部的交流电流,在换向器上电刷的作用,也就使电枢绕组上的电流为交流电流。因此电磁转矩的方向保持恒定不变,电枢绕组上的导体在磁场中受力方向也就不变。通常换向片采用的是绝缘材料,互相之间是绝缘的,云母环对地也是绝缘的。电枢铁心:电枢铁心的作用是提供主极磁通的通路。通常铁心用硅钢片制成,呈片状,这样的最用可以减少磁滞损耗。电枢之间中的磁通会依据电枢在磁场得变动发生连续转变。2.2.3其它部分的结构和原理电刷装置:电刷通常由石墨材料制成。电流和电枢绕组通过电刷与外面的电路连接起来。它的一端固定在刷架上,每个刷架上都有一个或者一组电刷。电刷作用是保证电枢转动时和换向器有紧密良好的接触。同极电刷连在机外连接在一起。轴承支撑:轴承座固定在机座两端的端盖上,轴承通过轴承座直接支撑在电机地板上,需要时,可以自由的调节整轴的中心位置。不同电机使用轴承不同,中小型电机通常使用滚动轴承,而大型电机通常滑动轴承。2.3直流电动机的控制原理 在电动机两端加上电源,电刷两极之间就有电流流过。电流便从从电刷流入,从B处流出。沿着abcd顺序,如图2-1(a)所示。然后从B方向流出,于是在磁场中流过电流的两导体会同时受力,并有一个相对的转矩。由左手定则得出,受力方向相反,使转子转动,方向为逆时针方面旋转。相反当移动到如图2-1(b)位置的时候,换向片1与电刷的B极相互接触,换向片2与电刷的A极相互接触。电流便从电刷A极流入,从B极流出。顺着线圈以dcba方向。此时把根据左手定则判断,两导体受力方向相反。总体受力和之前相同,保持不变,依旧逆时针旋转,这就是直流电机的工作原理。由于电流是直流换向器,实际上,虽然电流通过线圈是交流的,但在磁场中感应受力的方向是一直没有变化的。线圈上就按照逆时针的方面一直受力。循环往复,产生电动势,带动线圈旋转。在第二圈之后方向始终不变,在转矩的作用下,促使着线圈一直保持转动,就带动整个转子转动,这便是直流电动机的原理。简而言之,只要直流电动机的电枢绕组在磁场中旋转,在换向器的作用下,就会使用受到一个同方向的转矩影响,始终保持同一方向旋转。 图2-1 直流电动机原理第3章 单片机STC89C513.1 单片机概况单片机又叫微控制单元,英文名字micro control unit,是一种经过高度集成得电子线路芯片。内部含有中央处理器(CPU),随机储存器(RAM),只读储存器(ROM)等几种集成模块。由于高度集成的原因,它具有体积小,质量轻,速度快的特点,使它在各行各业,日常生活中应用越来月广泛。随着近代科技不断提高和发展,逐渐形成了以单片机为中心的微控制系统。单片机图3-1 图3-1 单片机3.2 单片机内部结构和原理本文选用单片机型号为STC89C51芯片。是八位的单片机,芯片内部集成了中央处理器。十六位定时器/计数器,ROM程序存贮器。四个并行I/O口(P0-P3端口),RAM数据存贮器和中断系统等部件。根据需要使用的方式不一样,单片机有很多封装形式。本次设计使用的是双列直插DIP-40封装,如图3-2 图3-2单片机双列直插PDIP-40封装.20.3.2 复位电路及时钟电路复位电路通常分为两种,一种是手动复位电路,另一种是自动复位电路。下面着重对两种复位电路的工作原理进行了介绍。手动复位电路: 上电复位电路 图3-3(a)手动复位电路 图3-3(b)自动复位电路按键断开时,电容和按键并联之后串联在电路电源和地之间。按键一侧的RST端经电阻接地,为低电平。当需要复位的时候,按下复位按键,电源通过电阻接地导通。电容两端储存的电能也通过电阻进行放电。RST一端由原来的低电平变成高电平。RST位置接单片机复位端,高电平有效,即高电平复位。当松开按键的时候,电源对电容再次充电,形成断路,RST端由高电平恢复到低电平。复位电路是微型系统电路中不可或缺的一部分,有时候硬件故障,程序跑飞,就需要手动复位来重新实现系统功能。如图3-3(a)。本次设计选用手动复位,自动复位电路如图3-3(b)时钟电路: 图3-4 时钟电路时钟电路有两部分组成,一部分是晶体振荡器(本文中选用12M)、另一部分为电容。时钟电路是用来产生时间频率,为程序运行提供时钟,是单片机操作和计算的基础。任何微控制电路系统中都需要时钟电路,时钟频率越大,处理速度就越快。但是晶振频率越大,对系统硬件要求就越高,增加了成本和功耗。由于单片机本身用在控制功能,节省成本,减少功耗就非常重要了。因此在选用晶振的时候要根据硬件设计和使用功能选取合适的频率,并不是越大越好。本文中选用12M晶振两侧并联两个起振电容。时钟电路如图3-4。3.4单片机最小系统 单片机最小系统,又叫做最小应用系统。它是微控制电路中最简单的一部分电路模块。它主要包括三个部分:第一部分单片机,第二部分复位电路,第三部分为晶振也就是时钟电路。前面已经对最小系统的三个部分做了简单的介绍。实质上,它们是至少单片机最小系统芯片可以运行的系统组件。这样的系统运行速度快,功耗低,成本小。但是在很多方面满足不了工业和日常的需要,所以在使用时经常以最小系统为基础进行扩展。单片机最小系统电路如图3-5。 图3-5 单片机最小系统 第4章PWM调制和电机的使用4.1 PWM调制PWM调制又叫脉冲宽度调制。它是根据微型计算机生成二进制脉冲进行内部处理之后,对外围电路进行控制的一种手段。它主要是靠改变脉冲周期或宽度来改变输出频率,实现数字信号对模拟信号的转换。它有控制灵活,简单的特点,在通信,测量行业应用广泛。4.2 直流电机的使用 直流电机是把电能转变为机械能得装置。因为它良好的调速性能,在电力系统中得到了普及使用。4.2.1 电机的启动在接通电源的情况下,直流电动机由原来静止的状态,经过加速,直到稳定的工作转速的过程,叫做启动。起动时刻电枢中流过的电流称为起动电流。电枢在磁场中受到固定方向的力称为起动转矩。满足以下几个条件才能启动:1.启动转矩要尽量大。因为只有启动转矩大于负载反抗转矩时,负载才能在转矩的作用下才能转动。2.启动时的电流不能太大,否则超过了电流的极值,对电源和电机有害的影响。3.启动过程中消耗的能量尽量少。因此,上述三点的性能决定能否良好的启动电机。而直流电机满足以上起动转矩大,起动电流小的特点,并且启动简单和便于控制。4.2.2 电机的调速 在很多工业场合,需要机械工作转速的变化,例如电车进站时速度减速,启动时,要很快回复到正常行驶速度,因此,这就需要对电动机进行调速。调速的好坏可以影响的产品的质量和工作效率,甚至会影响设备的质量。这就需要对调速的严格控制。分析调速性能根据一下几点:1.调速范围的大小,也就是最大转速与最小转速之比2.经济性的好坏,减少运行费用行业降低成本。3调速的平滑性,要可以随意的对电机调速,而不影响使用功能。4.调速要全面,工作稳定可靠。4.2.3 电机的反转改变原来电机旋转的方向,称之为反转。要使电机反转,主要是电磁转矩原来的受力方向改变。我们知道,改变电磁转矩的方式有两种。一种是改变电枢电流的方向,另一种是改变磁通的方向。所以我们可有两种方法来改变转速方向。第一种方法,改变电枢的电压极性,通过将电枢绕组接到电源的正负极对调一下,使极性相反,改变电流方向,从而可以改变转速方向。还有一种方法,就是改变励磁电压的极性,励磁绕组两端的正负极性。改变极性,方向相反的磁场,电磁转矩的方向的应力变化。4.2.4电机的制动同样,对于很多工业设备,我们不仅仅需要它转动和停止,有时候还需要它能够迅速停止,这样可以缩短工作时间,提高工作效率,提高产品产量。再比如电车在进站的时候要快速靠近站台停站,要快速时间电车停止。这时候就需要对电机进行制动。电机制动时电磁转矩的受力方向和电机的旋转方向相反。通常直流电机的电磁制动有三种方式:第一种是电机回馈制动。第二种是反接制动。第三种为能耗制动。其中应用最广泛的是第三种方式能耗制动,在制动过程中,制动转矩作的功全部来源于机组转动部分的动能。4.3 电机驱动芯片L293d 采用集成芯片L293d驱动电机正转,反转和停止,L293d内部结构是一个双H桥,双极性脉冲宽度调制方法可以产生连续的电流。使电机能在四角限转动。当电机停止有小电流流过,使电机平滑的停止,消除电机改变旋转方向时的静摩擦死区。L293d通过内部H桥电路的的输入信号可以控制电机的转动方向。通常L293d有两个H桥,能在同一时刻控制两个电机,每个电机都有它自己的使能信号EN。如图4-1,其中ENA(本文接单片机P26端口),ENB是控制信号的使能位。IN1(接单片机P25端口)、IN2(接单片机P24端口)为电机转动方向控制位,IN1、IN2分别为1,0时,电机正转。当IN1、IN2分别为0,1时,电机反转。当IN1、IN2分别为0,0时,电机停止。选用电机连接单片机的控制引脚,根据功能需要,通过调整软件的占空比来改变电机的转速。 图4-1 电机驱动电路第5章 系统硬件设计5.1 系统硬件电路图 图5-1 系统硬件电路图5.2 系统硬件PCB图图5-2 系统硬件PCB图5.3 实物图图5-3 实物图结论红外线遥控有体积小,质量轻,功耗低等优点,在近代科技浪潮中得到的巨大的发展,这也是本次选题的原因之一。红外遥控控制电机转速继承了红外遥控的所有优点,同时结合单片机,对电机驱动芯片的控制,实现了电机的调速。因此本设计是由红外遥控板发射信号,单片机完成解码,并控制电机驱动芯片,从而实现电机的调速。通过对电路的设计和程序编程,最终通过实验验证了设计的红外线控制电机基本符合其设计原理。但是本次设计也存在了一定的局限性:由于客观条件的因素,有许多元器件都没来的及添加进去,比如霍尔传感器,机械按键,数码管或者TFT屏幕,所以在以后的硬件升级中,可以加入霍尔传感器对电机速度实时显示出来,并显示在数码管或者TFT屏幕中,或者加入机械式按键控制电机转速的做来作为红外遥控板故障时的备用按键。也可以通过软件升级加入定时模式,休眠模式,断电保护模式,甚至可以加入密码开启功能。 致谢通过本次毕业设计,在一定程度上提高了我学习的能力,让我学到了用多种不同思维去解决和分析问题的方法。让我认识到正确并且科学的方法是解决问题的良好途径,同时在学习的过程中要端正自己的态度,严谨的科学态度在是必不可少的,也是我们成功的基础。这次无线遥控控制电机转速设计,使我懂得了理论联系实际重要性。仅仅只有理论知识很难全面的了解产品的特点和功能,必须在真正接触之后去了解它每一个模块的使用功能和工作原理。同时在这期间解决了各种各样的问题,虽然有的很简单,但依然花费了不少时间。这让我对所学知识有深刻的认识。对掌握不牢靠和理解不到位的地方重新进行了温习,加深了定义和理论的理解。设计完成后,经过焊接电路板,在硬件上实验测试通过。按键操作时间电机正反转,并分成1,2,3,4挡。指示灯也根据档位的不同分别显示。最后在这期间中多亏有老师的耐心、辛勤的指导,才得以顺利地完成了这次的毕业设计。在此由衷的感谢贾老师给我的指导和帮助。参考文献1程琤 单片机原理与应用开发 国防工业出版社20102郭天祥 新概念51单片机C语言教程 电子工业出版社20093谭浩强 C语言程序设计 北京 清华大学出版社 20094王鉴光 电动机控制系统M 北京机械工业出版社19945窦振中 单片机原理和程序设计 北京航天大学出版社20006苏长赞 使用遥控技术手册 人民邮电出版社20027李朝青 单片机原理及接口技术北京航天航空大学出版社20058王小明电动机的单片机控制M 北京航空航天大学出版社2002.9何立民 单片机应用技术选编 北京航空航天大学出版社199710 李发海/朱东启 电机学 北京科学出版社 2007.27.附录软件源程序:/*程序功能:红外遥控控制电机正转,反转,加速转。同时,使用PWM调制把速度分为四档,并分别用LED灯指示按键功能:1键键启动(电机不转 启动指示灯亮 只有开启键之后才能进行后续操作)2键停止键(电机不转 所有LED指示灯灭 其它操作无效)3键电机正转(默认一档 启动指示灯和正转灯亮 只有先选择正反转之后才能后续操作)4键电机反转(电机反转 启动指示灯亮和反转灯亮 只有先选择正反转之后才能后续操作)5键电机二档加速(启动指示灯亮 二档指示灯亮 相应的正转或反转指示灯灯亮)6键电机三档加速(启动指示灯亮 三档指示灯亮 相应的正转或反转指示灯灯亮)7键电机四档加速(启动指示灯亮 四档指示灯亮 相应的正转或反转指示灯灯亮)在按键的同时,会进行按键检测,蜂鸣器发声,表明按键按下班级:1*06972* 姓名:钱多多专业:电气工程及其自动化本程序在Keil uVision3中编写 */#include<reg52.h>#include <intrins.h> /我叫钱多多#define uchar unsigned char /叫我高富帅#define uint unsigned intsbit beep=P25;/蜂鸣器端口定义uchar num; /全部变量/uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,/0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/uchar code table1=0x7e,0x7d,0x7b,0x77,0x6f,0x5f;sbit ir=P32; /红外端口定义uchar irtime; /定时器计数次数uchar irdata33; / 引导码 客户吗12 操作码12 uchar bitnum; /标志位uchar startflag; /红外接收头识别客户码开始标志位uchar k_flag; /按键顺序标志位uchar ir_ok; /红外识别标志位uchar ircode4;/数组 储存接收数值uchar ir_pros_ok; /红外处理完成标志位/uchar disnum5;sbit P10 = P10; /定义发光二极管LED端口做指示灯sbit P11 = P11; sbit P12 = P12; sbit P13 = P13; sbit P14 = P14; sbit P15 = P15; sbit P16 = P16; sbit P17 = P17; #define M_EN1 M_ENA=1;M_IN1=0;M_IN2=1 /电机控制 正转定义#define M_EN2 M_ENA=1;M_IN1=1;M_IN2=0 /电机控制 反转定义#define M_DIS M_ENA=0;/电机控制 停止定义bit Start_flag=0;/电机转动标志位bit Stop_flag=0; /电机停止标志位bit dirflag=0; /方向标志位sbit M_ENA=P24; /电机端口定义sbit M_IN1=P23;sbit M_IN2=P22;uchar PWM_ON; /全局变量uchar timer_num=0; /全局变量void timer0init() /定时器0初始化 /256*12*(1/12)=0.256ms 每中断一次需要的时间TMOD=0x12; /定时器初始化TH0=0x00; /定时器1工作方式1TL0=0x00; /定时器0工作方式2EA=1; /开总中断ET0=1; /开定时器0中断TR0=1; TH1=(65536-1000)/256; /设置处置TL1=(65536-1000)%256;ET1=1;/开定时器1中断TR1=1; void delay(uint x) /延迟函数uint z,i;for(z=x;z>0;z-)for(i=120;i>0;i-);void ir_process() /0.56*2/256 = 4.37 红外处理 解码储存uchar num_1,z,k,i;/局部变量定义z=1; for(i=0;i<4;i+)for(k=0;k<8;k+) num_1=num_1>>1; /0.56+1.685=2.245/0.256 =8.76 0.56+0.56=1.12/0.256=4.375if(irdataz>6)num_1=num_1|0x80;z+;ircodei=num_1;ir_pros_ok=1;void didi()/蜂鸣器beep=0;delay(150);beep=1;void ir_display(void)/执行处理部分 if(ircode2=0x0c)&&(Start_flag=0)&&(Stop_flag=0) /取操作码 作数字开关 开启电机didi(); /按键检测Start_flag=1;PWM_ON=0;Stop_flag=0;P10=0;P11=1;P12=1;P13=1; P14=1;P15=1;else if(ircode2=0x18)&&Start_flag)/关闭电机didi();Start_flag=0;Stop_flag=0;k_flag=0;P10=1;P11=1;P12=1;P13=1;P14=1;P15=1;else if(ircode2=0x5e)&&Start_flag) /电机正转 默认一档调速didi(); dirflag=0;Stop_flag=1;k_flag=1;PWM_ON=1;P10=0;P11=0;P12=1;P13=1;P14=1;P15=1;else if(ircode2=0x08)&&Start_flag) /电机反转默认一档调速didi();dirflag=1;k_flag=1;Stop_flag=1;PWM_ON=1;P10=0;P11=1;P12=0;P13=1;P14=1;P15=1; else if(ircode2=0x1c)&&Start_flag&&k_flag&&(Stop_flag=1) /2档调速didi();PWM_ON=2;P10=0;P13=0;P14=1;P15=1;else if(ircode2=0x5a)&&Start_flag&&k_flag&&(Stop_flag=1)/3档调速didi();PWM_ON=4;P10=0;P13=1;P14=0;P15=1;else if(ircode2=0x42)&&Start_flag&&k_flag&&(Stop_flag=1) /4档调速didi();PWM_ON=8;P10=0; P13=1;P14=1;P15=0;void int0init() /中断初始化 EA=1;EX0=1; /打开外部中断IT0=1; /下降沿触发 void main() /主函数timer0init();int0init();/beep=0;while(1)/ if(ir=0) /按键检测 修改放到irwork中 提高实时性/beep=0;/ delay(100);/ beep=1;/if(ir_ok=1)ir_process();ir_ok=0;if(ir_pros_ok=1)ir_display();ir_pros_ok=0;void int0() interrupt 0/外部中断响应函数if(startflag) /13.5ms/0.256=52.7if(irtime>32&&irtim