基于AT89C51单片机直流电机PWM调速程序分享
基于AT89C51单片机的PWM直流调速系统

摘要本文基于对PWM控制技术和AT89C51单片机直流调速系统的研究,设计了应用于直流电动机的单片机控制的PWM电流转速双闭环直流调速系统,该系统能够实现对电机的正转、反转、急停、加速、减速的控制以及恒速调节。
论文以直流电机调速系统为控制对象,主要介绍了PWM控制技术的理论以及用单片机实现PWM 控制电机转速的基本原理,绘制出了系统的程序流程图,设计出了系统的硬件电路和软件电路,编写了KeilC51汇编语言,进行了Proteus软件的调试与仿真,仿真结果表明系统满足各项性能指标要求。
关键词:PWM技术;单片机;双闭环;直流电机;调速控制ABSTRACTBased on the study of PWM technology and DC governor system controlled by AT89C51 microprocessor control unit, that applied to DC motorspeed contml governor system which is controlled by microprocessor control unit is designed. This system can make motorspeed contml speed up or slow down or stop rapidly even rotate positively and negatively. One more thing is that DC motorspeed contml controlled by this system can adjust its rotate speed smoothly.The article mainly concentrates on the DC governor system. The theory of PWM technology and basic theory of system controlled by AT89C51 and PWM technology which adjusts the speed of DC motorspeed contml are introduced. The chat of process is drawn out, so as the circuits of system. The KeilC51 language is operated on the simulation platform debugging after it's written out. The consult indicates that the system meets all conditions which are needed.Keywords: PWM technology ;microprocessor control unit ;Double-loop ;DC motorspeed contml ;digital control目录1. 绪论................................................................1 1.1 概况................................................................1 1.2 国内外发展概况....................................................21.3 设计目的和意义....................................................22. 直流调速系统概述.................................................4 2.1 直流电机的工作原理...............................................4 2.2 直流电机的调速方法...............................................52.3 H桥电机驱动的概述...............................................83. 方案论证和选择...................................................7 3.1 稳压电源的选择...................................................10 3.2 电机调速控制模块.................................................8 3.3 PWM调速工作方式.................................................9 3.4 PWM调脉宽方式....................................................93.5 PWM软件实现方式.................................................94. 系统硬件电路设计................................................10 4.1 时钟电路..........................................................10 4.2 复位电路..........................................................11 4.3 稳压电源电路.....................................................10 4.4 信号输入电路.....................................................124.5 电机PWM驱动模块的电路..........................................175. 系统的软件设计...................................................185.2 系统软件设计分析.................................................196. 单片机系统综合调试..............................................20 6.1 PROTEUS设计与仿真平台..........................................20 6.2 PROTEUS设计与单片机传统开发过程比较..........................21 6.3 仿真结果与分析...................................................27参考文献..............................................................23附录...................................................................32附录一程序清单......................................................23附录二硬件原理图....................................................38致谢...................................................................391 绪论1.1 概况现代工业的电力拖动一般都要求局部或全部的自动化,因此必然要与各种控制元件组成的自动控制系统联系起来,而电力拖动[1]则可视为自动化电力拖动系统的简称。
基于单片机89C51产生PWM信号来控制直流电机调速程序

基于单片机89C51产生PWM信号来控制直流电机调速程序利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。
/* =======直流电机的PWM速度控制程序======== */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */#include#include#define uchar unsigned char#define uint unsigned intsbit en1=P1^0; /* L298的Enable A */sbit en2=P1^1; /* L298的Enable B */sbit s1=P1^2; /* L298的Input 1 */sbit s2=P1^3; /* L298的Input 2 */sbit s3=P1^4; /* L298的Input 3 */sbit s4=P1^5; /* L298的Input 4 */uchar t=0; /* 中断计数器 */uchar m1=0; /* 电机1速度值 */uchar m2=0; /* 电机2速度值 */uchar tmp1,tmp2; /* 电机当前速度值 *//* 电机控制函数 index-电机号(1,2); speed-电机速度(-100~100) */void motor(uchar index, char speed){if(speed>=-100 && speed<=100){if(index==1) /* 电机1的处理 */{m1=abs(speed); /* 取速度的绝对值 */if(speed<0) /* 速度值为负则反转 */{s1=0;s2=1;}else /* 不为负数则正转 */{s1=1;s2=0;}}if(index==2) /* 电机2的处理 */{m2=abs(speed); /* 电机2的速度控制 */ if(speed<0) /* 电机2的方向控制 */ {s3=0;s4=1;}else{s3=1;s4=0;}}}}void delay(uint j) /* 延时函数 */{for(j;j>0;j--);}void main(){uchar i;TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值 */TL0=0x9B;EA=1; /* 开中断 */ET0=1; /* 定时器0允许中断 */TR0=1; /* 启动定时器0 */while(1) /* 电机实际控制演示 */{for(i=0;i<=100;i++) /* 正转加速 */{motor(1,i);motor(2,i);delay(5000);}for(i=100;i>0;i--) /* 正转减速 */{motor(1,i);motor(2,i);delay(5000);}for(i=0;i<=100;i++) /* 反转加速 */{motor(1,-i);motor(2,-i);delay(5000);}for(i=100;i>0;i--) /* 反转减速 */{motor(1,-i);motor(2,-i);delay(5000);}}}void timer0() interrupt 1 /* T0中断服务程序 */{if(t==0) /* 1个PWM周期完成后才会接受新数值 */ {tmp1=m1;tmp2=m2;}if(tif(tt++;if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */ }。
基于单片机AT89C51控制的直流电机PWM调速控制系统课程设计报告

第一章:前言1.1前言:直流电机的定义:将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。
近年来,随着科技的进步,直流电机得到了越来越广泛的应用,直流具有优良的调速特性,调速平滑,方便,调速范围广,过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速起动、制动和反转,需要满足生产过程自动化系统各种不同的特殊要求,从而对直流电机提出了较高的要求,改变电枢回路电阻调速、改变电压调速等技术已远远不能满足现代科技的要求,这是通过PWM方式控制直流电机调速的方法就应运而生。
采取传统的调速系统主要有以下的缺陷:模拟电路容易随时间飘移,会产生一些不必要的热损耗,以及对噪声敏感等。
而用PWM技术后,避免上述的缺点,实现了数字式控制模拟信号,可以大幅度减低成本和功耗。
并且PWM调速系统开关频率较高,仅靠电枢电感的滤波作用就可以获得平滑的直流电流,低速特性好;同时,开关频率高,快响应特性好,动态抗干扰能力强,可获很宽的频带;开关元件只需工作在开关状态,主电路损耗小,装置的效率高,具有节约空间、经济好等特点。
随着我国经济和文化事业的发展,在很多场合,都要求有直流电机PWM调速系统来进行调速,诸如汽车行业中的各种风扇、刮水器、喷水泵、熄火器、反视镜、宾馆中的自动门、自动门锁、自动窗帘、自动给水系统、柔巾机、导弹、火炮、人造卫星、宇宙飞船、舰艇、飞机、坦克、火箭、雷达、战车等场合。
1.2本设计任务:任务: 单片机为控制核心的直流电机PWM调速控制系统设计的主要内容以及技术参数:功能主要包括:1)直流电机的正转;2)直流电机的反转;3)直流电机的加速;4)直流电机的减速;5)直流电机的速度在数码管上显示;6)直流电机的启动;7)直流电机的停止;第二章:总体设计方案1、系统的硬件电路设计与分析电动机PWM驱动模块的电路设计与实现具体电路见下图。
本电路采用的是基于PWM 原理的H型桥式驱动电路。
基于C51单片机的直流电机PWM调速控制(包含原理图及C源代码)

基于C51单片机的直流电机PWM调速控制--SQ这是最近一阶段自己学习所获,现分享与大家。
这里采用A T89C52单片机做主控制芯片,实现两路直流电机的PWM调速控制,另外还可以实现转向、显示运行时间、显示档位等注:考虑小直流电机自身因素,调速范围仅设有四级电路原理图:C语言程序源代码:/******************** 硬件资源分配*********************/数码管:显示电机状态(启停、正反、速度)、运行时间、是否转弯按键:K4 启动/暂停K3 正反转/转弯允许K2 加速/左转/运行时间清零K1 减速/右转/停止定时器:T0 数码管动态显示,输出PWMT1 运行时间记录********************************************************//*******主程序文件PWM.c******/#include <reg52.h>#include "Afx.h"#include "Config.c"#define CIRCLE 5 //脉冲周期//按键定义uchar key,key_tmp=0, _key_tmp=0;//显示定义uchar LedState=0xF0; //LED显示标志,0xF0不显示,Ox00显示uchar code LED_code_d[4]={0xe0,0xd0,0xb0,0x70}; //分别选通1、2、3、4位uchar dispbuf[4]={0,0,0,0}; //待显示数组uchar dispbitcnt=0; //选通、显示的位uchar mstcnt=0;uchar Centi_s=0,Sec=0,Min=0; //分、秒、1%秒//程序运行状态标志bit MotState=0; //电机启停标志bit DirState=0; //方向标志0前,1后uchar State1=-1;uchar State2=-1;uchar State3=0;uchar State4=-1;uchar LSpeed=0;uchar RSpeed=0;//其他uint RunTime=0;uint RTime_cnt=0;uint LWidth;uint RWidth; //脉宽uint Widcnt=1;uint Dispcnt;//函数声明void key_scan(void);void DisBuf(void);void K4(void);void K3(void);void K2(void);void K1(void);void disp( uchar H, uchar n );void main(void){P1|=0xF0;EA=1;ET0=1;ET1=1;TMOD=0x11;TH0=0xFC;TL0=0x66; //T0,1ms定时初值TH1=0xDB;TL1=0xFF; //T1,10ms定时初值TR0=1;Widcnt=1;while(1){key_scan();switch(key){case 0x80: K1(); break;case 0x40: K2(); break;case 0x20: K3(); break;case 0x10: K4(); break;default:break;}key=0;DisBuf();LWidth=LSpeed;RWidth=RSpeed;}}//按键扫描**模拟触发器防抖void key_scan(void){key_tmp=(~P3)&0xf0;if(key_tmp&&!_key_tmp) //有键按下{key=(~P3)&0xf0;}_key_tmp=key_tmp ;}//按键功能处理/逻辑控制void K4(void){if(State4==-1){State4=1;TR1=1;dispbuf[3]=1;LedState=0x00; //打开LEDMotState=1; //打开电机LSpeed=1;RSpeed=1; //初速设为1}else if(State4==1){State4=0;TR1=0;MotState=0; //关闭电机}else if(State4==0){MotState=1;if(State3==0){State4=1;TR1=1;}else if(State3==1){LSpeed=2;RSpeed=2;}}}void K3(void){if(State4==1)DirState=!DirState;if(State4==0){if(State3==0){State3=1; //可以转向标志1可以,0不可以TR1=1;dispbuf[3]=9;MotState=1;LSpeed=2;RSpeed=2;}else if(State3==1){State3=0;TR1=0;dispbuf[3]=0;MotState=0;}}}void K2(void){if(State4==1&&LSpeed<4&&RSpeed<4){LSpeed++;RSpeed++;}else if(State4==0){if(State3==0){//State4=-1;//LedState=0xF0;MotState=0;Sec=0;Min=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=0;LSpeed=2;RSpeed++;}}}void K1(void){if(State4==1&&LSpeed>1&&RSpeed>1){LSpeed--;RSpeed--;}else if(State4==0){if(State3==0){State4=-1;LedState=0xF0;MotState=0;}else if(State3==1&&LSpeed<4&&RSpeed<4){//TurnState=1;LSpeed++;RSpeed=2;}}}//显示预处理void DisBuf(void){if(RTime_cnt==100){Sec++;RTime_cnt=0;}if(Sec==60){Min++;Sec=0;}if(State4==1){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;if(!DirState) //正转dispbuf[3]=LSpeed;if(DirState) //反转dispbuf[3]=LSpeed+4;}if(State4==0){if(State3==0){dispbuf[0]=Sec%10;dispbuf[1]=Sec/10;dispbuf[2]=Min;dispbuf[3]=0;}if(State3==1){dispbuf[0]=RSpeed;dispbuf[1]=LSpeed;dispbuf[2]=Min;dispbuf[3]=9;}}}//LED驱动void disp( uchar H, uchar n ){P1=n;P1|=LedState ;P1|=LED_code_d[H];}//T0中断**显示/方波输出void Time_0() interrupt 1{TH0=0xFC;TL0=0x66;Widcnt++;Dispcnt++;//电机驱动/方波输出if(Widcnt>CIRCLE){Widcnt=1;}if(Widcnt<=LWidth)LMot_P=!DirState&&MotState;elseLMot_P=DirState&&MotState;LMot_M=DirState&&MotState;if(Widcnt<=RWidth)RMot_P=!DirState&&MotState;elseRMot_P=DirState&&MotState;RMot_M=DirState&&MotState;//显示if(Dispcnt==5){disp(dispbitcnt,dispbuf[dispbitcnt]);dispbitcnt++;if(dispbitcnt==4){dispbitcnt=0;}Dispcnt=0;}}//T1中断**运行时间void Time_1() interrupt 3{TH1=0xDB;TL1=0xFF;RTime_cnt++;}/******配置文件Afx.h******/#ifndef _AFX_#define _AFX_typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#endif/******IO配置文件Config.c******/#ifndef _Config_#define _Config_#include "Afx.h"#include <reg52.h>//显示定义sbit led=P3^2;//电机引脚定义sbit LMot_P=P2^2; sbit LMot_M=P2^3; sbit RMot_P=P2^0; sbit RMot_M=P2^1;#endif。
基于AT89S51单片机直流电机PWM调速系统

基于AT89S51单片机直流电机PWM调速系统摘要本文介绍了一种基于AT89S51单片机控制的PWM直流电机电压占空比调速系统。
利用AT89S51的定时计数中断输出有一定脉宽的PWM信号,以小直流电机为对象,经过L298驱动直流电机,采用光电管测得实际转速显示在LCD上。
系统具有稳定,可靠,简单且廉价,功能强,是一个电动小车模型的完整系统。
关键词单片机;PWM直流电机调速;光电管测速51单片机以其价格低廉,开发周期短,性能稳定,效率高,功能强大等特点被广泛的应用于控制系统。
对直流电机的调速传统的思路是通过调节电枢电路电阻来改变端电压,以达到调速的目的。
但由于接入的电阻会消耗功率,这种方法的效率很低。
利用PWM(Pulse Width Modulation)控制可以消除这部分功率损耗,对于直流电机,采用PWM控制技术构成的无级调速系统,启停对直流系统无冲击,并且具有启动功率小,开关频率高,运行稳定的特点。
1系统的原理框图2PWM的原理及实现PWM是Pulse Width Modulation缩写,中文意思就是脉冲宽度调制,简称脉宽调制。
如图,我们将开关接通的时间设为T1高电平为V,断开时间设为T2低电平作为0,周期设为T,很容易得出加在电机上的平均电压即,一般固定频率在800Hz-1000Hz比较合适。
利用51单片机可以很容易产生这样的脉冲信号,51单片机内部有T0、T1两个定时计数器,这里我们只利用T0的定时功能,设定一定时间进入中断,再用一个寄存器记录进入中断的次数,从而根据我们的需要来在中断程序里面设置输出端口的0和1。
具体过程参考流程图,设N为需要的高低电平时间只比,T3为进入中断的时间,用R0记录次数,即T=(N+1)*T3。
3系统硬件的实现1)电源模块。
采用+5V稳压电源即可,也可自己做一个,先要经过桥式整流电路再通过小电容滤,最后在经过L7805芯片稳压输出。
2)单片机模块。
AT89S51中的S表示该芯片含有可串行下载功能的Flash存储器,即具有ISP可在线编程功能,这样大大方便我们烧写程序和测试。
基于AT89C51单片机的PWM电机控制

基于AT89C51单片机的PWM电机控制(正转、反转、0-20级调速)/*******************************************************************/ /* 程序名:PWM直流电机调速*//* 晶振:11.00592 MHz CPU型号:AT89C51 *//* 直流电机的PWM波控制,可以直接的调速从0到20级的调速*//*****************************************************************/#include<reg51.h>#define TH0_TL0 (65536-1000)//设定中断的间隔时长unsigned char count0 = 50;//低电平的占空比unsigned char count1 = 0;//高电平的占空比bit Flag = 1;//电机正反转标志位,1正转,0反转sbit Key_add=P2 ^ 0; //电机减速sbit Key_dec=P2 ^ 1; //电机加速sbit Key_turn=P2 ^ 2; //电机换向sbit PWM1=P2^6;//PWM 通道1,反转脉冲sbit PWM2=P2^7;//PWM 通道2,正转脉冲unsigned char Time_delay;/************函数声明**************/void Delay(unsigned char x);void Motor_speed_high(void);void Motor_speed_low(void);void Motor_turn(void);void Timer0_init(void);/****************延时处理**********************/void Delay(unsigned char x){Time_delay = x;while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔}/*******按键处理加pwm占空比,电机加速**********/void Motor_speed_high(void)//{if(Key_add==0)Delay(10);if(Key_add==0){count0 += 5;if(count0 >= 100){count0 = 100;}}while(!Key_add);//等待键松开}}/******按键处理减pwm占空比,电机减速*****/ void Motor_speed_low(void){if(Key_dec==0){Delay(10);if(Key_dec==0){count0 -= 5;if(count0 <= 0){count0 = 0;}}while(!Key_dec );}}/************电机正反向控制**************/ void Motor_turn(void){if(Key_turn == 0){Delay(10);if(Key_turn == 0){Flag = ~Flag;}while(!Key_turn);}/***********定时器0初始化***********/void Timer0_init(void){TMOD=0x01; //定时器0工作于方式1TH0=TH0_TL0/256;TL0=TH0_TL0%256;TR0=1;ET0=1;EA=1;}/*********主函数********************/void main(void){Timer0_init();while(1){Motor_turn();Motor_speed_high();Motor_speed_low();}}/**************定时0中断处理******************/ void Timer0_int(void) interrupt 1 using 1{TR0 = 0;//设置定时器初值期间,关闭定时器TL0 = TH0_TL0 % 256;TH0 = TH0_TL0 / 256 ;//定时器装初值TR0 = 1;if(Time_delay != 0)//延时函数用{Time_delay--;}if(Flag == 1)//电机正转{PWM1 = 0;if(++count1 < count0)PWM2 = 1;}elsePWM2 = 0;if(count1 >= 100){count1=0;}}else //电机反转{PWM2 = 0;if(++count1 < count0){PWM1 = 1;}elsePWM1 = 0;if(count1 >= 100){count1=0;}}}。
基于51单片机的PWM直流电机调速报告

课程名称:微机原理课程设计题目:基于51单片机的PWM直流电机调速直流电机脉冲宽度调制(Pulse Width Modulation-简称PWM)调速产生于20世纪70 年代中期,最早用于自动跟踪天文望远镜、自动记录仪表等的驱动,后来由于晶体管器件水平的提高及电路技术的发展, PWM 技术得到了高速发展,各式各样的脉宽调速控制器,脉宽调速模块也应运而生,许多单片机也都有了PWM输出功能。
而51单片机却没有PWM 输出功能,采用定时器配合软件的方法可以实现51单片机PWM的输出功能。
本设计就是由单片机STC89C52RC芯片,直流电机(搭建H桥电路驱动)和四位一体LED数码管为核心,辅以必要的电路,构成了一个基于51单片机PWM可调速的直流电机。
该可调直流电机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域中得到了广泛的应用。
该可调直流电机布置合理,全部器件分布在7*9cm洞洞板上,看起来小巧精简。
采用的是单片机内部定时器产生方波并且两个P口交换输出,可以方便灵活地调速度和方向。
该可调直流电机从0到最大速度1200转每分钟一共设置了60个档次的转速,采用红光四位数码管,可以直观地显示出来(显示的是每分钟的转速)。
有红光和绿光的两个二极管作为转速指示灯。
四个控制按键就可以控制电机的转速,方向与暂停。
每按一个键,该可调电机就会实现相对应的功能,操作非常简单。
关键词:直流电机,51单片机,C语言,数码管一、设计任务与要求 (4)1.1 设计任务 (4)1.2 设计要求 (4)二、方案总体设计 (5)2.1 方案一 (5)2.2 方案二 (5)2.3 系统采用方案 (5)三、硬件设计 (7)3.1 单片机最小系统 (7)3.2 数码管显示模块 (7)3.3 系统电源 (8)3.4驱动电路 (8)3.5 整体电路 (9)四、软件设计 (10)4.1 keil软件介绍 (10)4.2 系统程序流程 (10)五、仿真与实现 (13)5.1 proteus软件介绍 (13)5.2 仿真过程 (13)5.3 实物制作与调试 (15)5.4 使用说明 (17)六、总结 (18)6.1 设计总结 (18)6.2 经验总结 (18)七、参考文献 (21)一、设计任务与要求1.1 设计任务1).对更多小器件的了解2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用3).掌握仿真软件的运用和原理图的绘制4).加深焊接的技巧,提高焊接的能力5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求1).四个按键分别实现改变转向,加速,减速与暂停的功能2).H桥电路驱动直流电机3).一个红光和一个绿光二级管指示电机转向4).四位数码管显示转速二、方案总体设计设计一个基于51单片机的可调直流电机。
单片机AT89S51的直流电机PWM调速控制系统

仿真整体图如下:直流电机的调试功能仿真如下图:1、正转时,电机正转,数码管最高位显示“三”,其它三位先所给定频率,如下图:2、反转时,电机反转,数码管最高位显示“F”,其它三位先所给定频率,如下图:3、输出波形如下:4、加速分5档,波形依次如下:5、减速分5档,波形如下:程序见附件1PCB图见附件2元件清单略附件1/***************基于单片机AT89C51的直流电机PWM调速控制系统*************/ /************头文件*********/#include<reg51.h>#include<absacc.h>#include <intrins.h>/************************** //********自定义变量********/#define uint unsigned int //自定义变量#define uchar unsigned charchar gw,sw,bw,qw;uchar j; //定时次数,每次20msuchar f=5; //计数的次数sbit P10=P1^0; //PWM输出波形1sbit P11=P1^1; //PWM输出波形2sbit P12=P1^2; //正反转sbit P13=P1^3; //加速sbit P14=P1^4; //减速sbit P15=P1^5; //停止sbit P16=P1^6; //启动uchar k;uchar t; //脉冲加减/**************************/*/*********控制位定义********************/uchar code smg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71};//程序存储区定义字型码表char data led[4]={0x08,0x04,0x02,0x01}; //位码uint x; //数码管显示的数值display(); //数码管显示delays(); //延时函数key();displays();/*****************************************//***************主函数********************/main (void){TMOD=0x51; //T0方式1 定时计数T1方式1计数TH0=0xb1; //装入初值 20MSTL0=0xe0;TH1=0x00; // 计数567TL1=0x00;TR0=1; //启动 t0TR1=1; //启动t1gw=sw=bw=qw=0; //数码管初始化P0=0xc0;P2=1;while(1) //无限循环{display(); //数码管显示key();}}/*****************************************//***************数码管显示****************/display(){uchar i;gw=x%10; //求速度个位值,送到个位显示缓冲区sw=(x/10)%10; //求速度十位值,送到十位显示缓冲区bw=(x/100)%10; //求速度百位值,送到百位显示缓冲区qw=x/1000; //求速度千位值,送到千位显示缓冲区for(i=0;i<4;){P2=led[i];if(i==0) //显示个位{P0=smg[gw];delays();}else if(i==1) //显示十位P0=smg[sw];delays();}else if(i==2) //显示百位{P0=smg[bw];delays();}else if(i==3) //显示千位{if(k==0) //正转时显示"三"{P0=0x49;delays();}else{P0=0x71; //反转时显示"F"}}i++;}}/*******************************************************//*****************延时函数*************************/ delays(){uchar i;for(i=5000;i>0;i--);}/************************************************//*********t0定时*中断函数*************/void t0() interrupt 1 using 2{TH0=0xb1; //重装t0TL0=0xe0;f--;if(k==0){if(f<t)P10=1;P10=0;P11=0;}else{if(f<t)P11=1;elseP11=0;P10=0;}if(f==0){f=5;}j++;if(j==50){j=0;x=TH1*256+TL1; //t1方式1计数,读入计数值TH1=0x00;TL1=0x00;x++;display();}}/****************按键扫描**************/ key(){if(P12==0) //如果按下,{while(!P12) //去抖动display();k=~k;}if(P16==0) //启动{while(P16==0);IE=0x8a;}if(P13==0) //加速{while (P13==0);t++;}if(t>=5)t=5;if(P14==0) //减速{while(P14==0);t--;}if(t<1)t=1;if(P15==0) //停止{while(P15==0);EA=0;P10=0;P11=0;}}/******************************************************/ 附件2:元件数量(个)元件数量(个)1 三极管8550 4光电耦合器:TLP521-2按键 5 三极管8050 5自锁按键 1 1N4007 4 At89s52 1 四位一体数码管 1 12M晶振 1 电容104 1 Led 1 直流电机 1 电阻1K 3 电容22P 2 电阻10K 1 电解电容47P/16V 274LS04 1 下载口 1。