1、陕西邮电职业技术学院毕业设计 通信系2013届毕业设计论文 题 目:直流电机转速控制系统专 业:电子信息工程班 级:电子信息工程技术1131班学生姓名:王文瑞 (025113115)导师姓名:冯伟 起止时间:2013年 11月 1日 至2014年 5月15 日通信系2010级毕业设计(论文)任务书题 目直流电机转速控制系统指导老师冯伟电话15991880351Emailfengwei299要求:设计一个5V直流电机的转速控制系统,本系统中利用51单片机作为主控制器,能够通过外部按键操作实现电机转速的增加和减小,并能够控制电机的转动方向。要求:1、利用PROTEL 99SE软件设计电路原理图,并
2、制作PCB; 2、程序设计和功能调试; 3、制作实物并进行调试。*论文字数不少于8000字!参考资料:学生自行解决毕业设计的封面、成绩评定表以及格式要求等相关资料,须在陕邮职院通信系2013届毕业设计论文成绩评定表学生姓名王文瑞性别男系别通 信 系专业电子信息技术课题名称直流电机转速控制系统班级电子信息工程1131班起止时间 2013年 11月 2014年 4月 指导教师冯伟课题任务完成情况论文 9 (千字); 图纸 12 (张);其它(含附件):表 2 (张),流程图10(张)指导教师意见评阅成绩: 评阅/指导教师(签字): 年 月 日学生实得成绩(百分制)评 阅 成 绩 评 定 级 别 (
3、级别为“优秀”、“合格”、“不合格”三档) 摘要在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。据资料统计,现在有的90%以上的动力源来自于电动机,电动机与人们的生活息息相关,密不可分。随着现代化步伐的迈进,人们对自动化的需求越来越高,使电动机控制向更复杂的控制发展。本文选用单片机作为控制系统的核心一提高整个系统的可靠性和可行性。本文设计了一个89C51单片机控制系统,包括键盘和A/D转化器,采用直流脉宽调制PWM对电动机进行转速控制。键盘用于转速数值输入。本文给出了转速控制系统的电器原理图和软件流程图。关键词:直流电动机、单片机、键盘、PWM目 录1 引言12 系统论述
4、22.1 设计背景22.2 设计思路22.3 系统框架设计23 PWM脉宽调制定理43.1 PWM调速原理43.2 PWM调速方法43.3 PWM实现方法54 系统硬件设计64.1 系统基本组成64.1.1 硬件模块组成64.1.2 单片机整个控制模块64.2 AT89C51单片机简介74.2.1 AT89C51主要性能74.2.2 AT89C51主要功能例举74.2.3 AT89C51各引脚功能介绍84.2.4 AT89C51的内部资源94.3 L298电机驱动模块94.3.1 L298电机驱动简介94.3.2 L298内部原理图104.3.3 L298引脚符号及功能104.3.4 L298
5、逻辑功能114.4 独立式键盘控制模块114.4.1 键盘的功能及分类114.4.2 独立式键盘124.4.3 独立式键盘与单片机的连接135 系统软件设计135.1 流程图125.1.1主程序流程图125.2 实物实现过程13结论14参考文献15附录16附录116附录220VI1 引言 早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。随着计算机控制技术的发展,微处理器已经广泛使用于直流传动系统,实现了全数字化控制。由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。所以,全数
6、字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。所以,直流传动控制采用微处理器实现全数字化,使直流调速系统进入一个崭新的阶段。 微处理器诞生于上个世纪七十年代,随着集成电路大规模及超大规模集成电路制造工艺的迅速发展,微处理器的性价比越来越高。此外,由于电力电子技术的发展,制作工艺的提升,使得大功率电子器件的性能迅速提高。为微处理器普遍用于控制电机提供了可能,利用微处理器控制电机完成各种新颖的、高性能的控制策略,使电机的各种潜在能力得到充分的发挥,使电机的性能更符合工业生产使用要求,还促进了电机生产商研发出各种如步进电机、无刷直流电机、开关磁阻电动机等便于控制且实用的新型电机,使电
7、机的发展出现了新的变化。 对于简单的微处理器控制电机,只需利用微处理器控制继电器、电子开关元器件,使电路开通或关断就可实现对电机的控制。现在带微处理器的可编程控制器,已经在各种的机床设备和各种的生产流水线中普遍得到应用,通过对可编程控制器进行编程就可以实现对电机的规律化控制。对于复杂的微处理器控制电机,则要利用微处理器控制电机的电压、电流、转矩、转速、转角等,使电机按给定的指令准确工作。通过微处理器控制,可使电机的性能有很大的提高。目前相比直流电机和交流电机他们各有所长,如直流电机调速性能好,但带有机械换向器,有机械磨损及换向火花等问题;交流电机,不论是异步电机还是同步电机,结构都比直流电机简
8、单,工作也比直流电机可靠,但在频率恒定的电网上运行时,它们的速度不能方便而经济地调节。高性能的微处理器如DSP (DIGITAL SIGNAL PROCESSOR即数字信号处理器)的出现,为采用新的控制理论和控制策略提供了良好的物质基础,使电机传动的自动化程度大为提高。在先进的数控机床等数控位置伺服系统,已经采用了如DSP等的高速微处理器,其执行速度可达数百万兆以上每秒,且具有适合的矩阵运算。2 系统论述21设计背景 近年来,随着科技的进步,电力电子技术得到了迅速的发展,直流电机得到了越来越广泛的应用。直流它具有优良的调速特性,调速平滑、方便,调速范围广;过载能力大,能承受频繁的冲击负载,可实
9、现频繁的无级快速起动、制动和反转;需要能满足生产过程自动化系统各种不同的特殊运行要求,从而对直流电机的调速提出了较高的要求,改变电枢回路电阻调速,改变电枢电压调速等技术已远远不能满足要求,这时通过PWM方式控制直流电机调速的方法应运而生。22 设计思路 直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够很方便的实现电机的智能控制。主体电路:即直流电机PWM控制模块。这部分电路主要由AT89C51单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,能够很方便的实现
10、电机的智能控制。其间是通过AT89C51单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成: 设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速以及电机的正转、反转和急停控制。 设计控制部分:主要由AT89C51单片机的外部中断扩展电路组成。直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。23 系统框架设计图2-1 直流电机PWM调速方案 方案说明:直流电机PWM调速系统以AT89C51单片机为控制核心,由命令输入模块及电机驱动模块组成。采用带中断的独立式键盘作为命令的
11、输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转和急停控制。203 PWM脉宽调制原理31 PWM调速原理 载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负速、温度控制、压力控制等等7。 在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动
12、装置”。如图3-1所示:图3-1 PWM信号的占空比 设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax * D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。 由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。严格来说,平均速度Vd与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似的看成是线性关系。3. 2 PWM调速方法 基于单片机类由软件来实现PWM:在PWM调速系统中占空比D是一个重要参数在电源电压不
13、变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。改变占空比D的值有三种方法: A、定宽调频法:保持不变,只改变t,这样使周期(或频率)也随之改变。 B、调宽调频法:保持t不变,只改变,这样使周期(或频率)也随之改变。 C、定频调宽法:保持周期T(或频率)不变,同时改变和t。 前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整,此种方式可简化硬件电路,操作性强等
14、优点。3.3 PWM实现方式 方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。 方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。故采用方案一。 4系统硬件设计4.1系统基本组成4.1.1 硬件模块组成 (1)单片机控制模块 (2)L298电机驱动模块 (3)独立键盘控制模块4.1.2 单片机整个控制模块图4-1单片机整个控制模块 这里利用定时计数器让单片机P3口的P3.6、3.7引脚输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电机。驱动芯片的输入电压是两引脚的电压差,在调速时一根引脚线为低电平,
15、另一个引脚产生调速方波,这样两个引脚的电压差就可通过控制其中一个引脚来控制。当需要改变电机转动方向时,两个引脚的输出相反。 定时计数器若干时间(1us)中断一次,就使P3.6或P3.7产生一个高电平或低电平。直流电机的速度分成100个等级,因此一个周期就有100个脉冲,周期为一百个脉冲的时间,速度等级对应一个周期的高电平脉冲的个数。占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。一个周期加在电机两端的电压为脉冲高电压乘以占空比。占空比越大,加在电机两端的电压越大,电机转动越快。电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。当我们改变占空比时,就可以得到不同的电机平均速度,从而
16、达到调速的目的。精确的讲,平均速度与占空比并不是严格的线性关系,在一般的应用中,可以将其近似看成线性关系。4.2 AT89C51的简介4.2.1 89C51主要性能 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系
17、统提供了一种灵活性高且价廉的方案。4.2.2AT89C51主要功能列举 1、8031 CPU与MCS-51 兼容 2、全静态工作:0Hz-24KHz 3、4K字节可编程FLASH存储器(寿命:1000写/擦循环) 4、三级程序存储器保密锁定 5、128*8位内部RAM 6、32条可编程I/O线 7、两个16位定时器/计数器 8、 6个中断源 10、可编程串行通道 11、低功耗的闲置和掉电模式 12、片内振荡器和时钟电路4.2.3AT8C51各引脚功能介绍图4-2 AT89C51引脚图 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当
18、P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚
19、被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也
20、可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。4.2.4 AT89C51的内部资源I/O口的内部结构: I/O口作为输入口时有两种工作方式即所谓的读端口与读引脚读端口时实际上并不从外部读入数据而是把端口锁存器的内容读入到内部总线经过某种运
21、算或变换后再写回到端口锁存器只有读端口时才真正地把外部的数据读入到内部总线上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作这是由硬件自动完成的不需要我们操心 读引脚时也就是把端口作为外部输入线时首先要通过外部指令把端口锁存器置1然后再实行读引脚操作否则就可能读入出错为什么看上面的图如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q为1加到场效应管栅极的信号为1该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1若先执行置1操作则可以使场效应管截止引脚信号直接加到三
22、态缓冲器中实现正确的读入由于在输入操作时还必须附加一个准备动作所以这类I/O口被称为准双向口89C51的P0/P1/P2/P3口作为输入时都是准双向口接下来让我们再看另一个问题从图中可以看出这四个端口还有一个差别除了P1口外P0 P2 P3口都还有其他的功能 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意
23、的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次 /PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部
24、程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。4. 3 L298电机驱动模块4. 3.1 L298电机驱动简介 L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 36 V;Vs 电压最大值也是 36 V。L
25、298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。4.3.2 L298内部的原理图图4-3 L298内部原理图4. 3.3 L298 引脚符号及功能引 脚功 能SENSA、SENSB分别为两个H桥的电流反馈脚,不用时可以直接接地ENA 、ENB使能端,输入PWM信号IN1、IN2、IN3、IN4输入端,TTL逻辑电平信号OUT1、OUT2、OUT3、OUT4输出端,与对应输入端同逻辑VCC逻辑控制电源,4.57VVSS电机驱动电源,最小值需比输入的低电平电压高GND地表4-1 L298 引脚符号及功能4. 3.4 L298的逻辑功能IN1IN2ENA电机状态XX0停止101顺时针01
26、1逆时针000停止110停止表4-2 L298的逻辑功能 当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;IN1与IN2相 同时,电机快速停止。当使能端为低电平时,电动机停止转动。 在对直流电动机电压的控制和驱动中,半导体功率器件(L298)在使用上可以分为两种方式:线性放大驱动方式和开关驱动方式在线性放大驱动方式。半导体功率器件工作在线性区优点是控制原理简单,输出波动小,线性好,对邻近电路干扰小,缺点为功率器件工作在线性区,功率低和散热问题严重。开关驱动方式是使半导体功率器件工作在开关状态,通过脉调制(P
27、WM)来控制电动机的电压,从而实现电动机转速的控制。4.4独立式键盘控制模块图4-4独立式键盘控制模块4.4.1键盘的功能及分类 键盘是一种最常用的输入设备,它是一组按键的集合,从功能上可分为数字键和功能键两种,作用是输入数据与命令,查询和控制系统的工作状态,实现简单的人机对话。键盘的分类(a)键盘按照接口原理可分为编码键盘与非编码键盘两类。这两类键盘的主要区别是识别键符及给出相应键码的方法。 编码键盘主要是用硬件来实现对键的识别; 非编码键盘主要是由软件来实现键盘的定义与识别。(b)键盘按照其结构可分为独立式键盘与矩阵式键盘两类。 独立式键盘主要用于按键较少的场合,矩阵式键盘主要用于按键较多
28、的场合,也称行列式键盘4.4.2独立式键盘独立式键盘的按键相互独立,每个按键接一根I/O口线,一根I/O口线上的按键工作状态不会影响其它I/O口线的工作状态。因此,通过检测I/O口线的电平状态,即可判断键盘上哪个键被按下。4.4.3独立式键盘与单片机的链接图4-5 独立式键盘与单片机的链接5系统软件设计 直接应用AT89C51的软件方法实现PWM信号输出,这比硬件实现PWM信号成本低。限制少。实现便捷。其流程图如下所示。 5.1流程图5.1.1主程序流程图图5-1系统主单片机总程序框图5.2 软件系统的实现过程主系统流程:开始时系统初始化,再调用按键子程序,看是否有按键按下:如果有按键按下则调
29、用按下按键子程序发送数据至处理器,如果没有按键按下则进行中断处理。在中断处理中若定时中断为0外中断为0则测量数据转速,发送测量值到从处理器,若定时中断为1,则系统时间定时、处理;最后中断返回。5.3 实物实现过程图5.3实物图 在产品通电的情况下,打开电源开关使AT89C51单片机运行编程好的程序,通过4个按键的控制来改变PWM信号的频率,再通过L298N电机驱动接收并运用这些PWM信号使得电机进行正反转和调速功能。 结论 通过本次毕业设计,使我学到了许多书本上无法学到的知识,也使我深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大
30、的兴趣。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:直流电机PWM调速、AT89C51单片机、L289引脚图及其引脚功能等,为本次毕业设计提供了一定的资料。 在做毕业设计的初期阶段,难度很大,没有头绪。通过求助于冯老师、理清了思路。同时,在图书馆里、网上查阅资料,攻克了毕业设计中的道道难题。通过本次科技创新实践,我学到了许多东西,知道光靠书本上的东西是不够的,需额外去查资料。无论是在硬件还是软件设计上,我都遇到了不少的问题,在克服困难的过程中,我学到了许多,特别是在课堂上学不到的东西如(PWM)。也锻炼了我的protel画图能力,以前学的时候元器件都是给定的只
31、要到库里面找出名字就可以,只要连线就可以,而这次是根据自己的设计需要去画,感觉不同。本次设计我能独立完成,算是有了很大的收获。总的感受有以下几方面: 1、通过本次毕业设计,我不但对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等有了一定的认识。 2、进一步加强了我的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案。特别是深刻体会到了软件和硬件结合的重要性,以及两者的联系和配合作用。 3、让我了解到单片机技术对当今人们生活的重要性。同时这次做毕业设计的经历也使我受益匪浅,让我知道做任何事情都应脚踏实地,刻苦努力地去做,只有这样,才能做好
32、。参考文献1 林志琦.基于Proteus的单片机可视化软硬件仿真M.北京:北京航空航天大学出版 社,2006.92 周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真M.北京:北京航空航天大学出版社,2006.53 张靖武,周灵彬.单片机系统的PROTEUS设计与仿真M.北京:电子工业出版社,2007.44 周润景,张丽娜.PROTEUS入门实用教程M.北京:机械工业出版社,2007.95 楼然苗,李光飞.51系列单片机设计实例M.北京:北京航空航天大学出版社,2003.36 楼然苗,李光飞.单片机课程设计指导M.北京:北京航空航天大学出版社,2007.77 贾东耀,汪仁煌. 数字
33、温度传感器在仓库温度检测系统的应用J. 传感器世界,20018 DALLAS DS18B20数据手册Z.http:/、9李朝青单片机原理及接口技术M北京:北京航空航天大学出版社,200610康华光,陈大钦电子技术基础(模拟部分)M北京:高等教育出版社,199911康华光,邹寿彬电子技术基础(数字部分)M北京:高等教育出版社,200012胡祝兵基于单片机控制的直流电机调速系统的设计J承德石油高等专科学校学报,2008(1)13 卢春华,姚海燕,张莉. 基于单片机的直流电机调速系统设计J.硅谷,2009(20).14 吴守箴,戚英杰.电气传的脉宽调制控制技术.北京:机械工业出版社.15 贾玉瑛,王
34、臣.基于单片机控制的PWM直流调速系统.包头钢铁学院学报,2005年.16 康华光,邹寿彬.电子技术基础(数字部分第四版).北京:高等教育出版社,2004年.18 浦龙梅,李私.单片机控制的直流PWM调速装置的研究.变频器世界,2006年3月附录附录1 程序#include #include #define uchar unsigned char#define uint unsigned int sbit MOTOR_A_1=P36;sbit MOTOR_A_2=P37; sbit k1=P10; /定义k1为p1.0口sbit k2=P11; /定义k2为p1.1口sbit k3=P12;
35、/定义k3为p1.2口sbit k4=P13; /定义k4为p1.3口uchar T=0; /定时标记uchar W=0; /脉宽值 0100uchar A=0; /方向标记 0,1uchar k=0; /按键标记uchar i=0; /计数变量void delayms(uint t); void init(void) /启动中断TMOD=0x01;EA=1;ET0=1;TR0=1; /设置定时时间TH0=0xff;TL0=0xf6;void timer0() interrupt 1 /重置定时器时间TH0=0xff;TL0=0xf6;T+; /定时标记加1 if(k=0)if(TW)MOTO
36、R_A_1 =0;elseMOTOR_A_1 =1;elseif(TW)MOTOR_A_2 =0;elseMOTOR_A_2 =1; if(T=100)T=0; void delayms(uint t)uchar j;while(t-)for(j=0;j250;j+)/循环250次 _nop_(); /系统延时 _nop_();/系统延时 _nop_();/系统延时 _nop_();/系统延时void key(void) /按键判断程序if(k1=0) /按键1按下while(k1=0); /按键1抬起if(W=100) /如果脉宽为100W=0; /脉宽置0elseW+=1; /否则加1else if(k2=0) /按键2按下 while(k2=0); /按键2抬起if(W=0) /如果脉宽为0W=100; /脉宽设置成100elseW-=1; /否则减1else if(k3=0) /按键3按下 while(k3=0); /按键3抬起A=!A; /方向标记取反k=!k; /按键标记取反 else if(k4=0) /按键4按下 while(k4=0); /按键4抬起W=0; /脉宽清0void main(void)init(); /系统初始化 while(1) if(k=0) MOTOR_A_2=0;elseMOTOR_A_1=0; key(); /查询按键附录2 电路板图