#include <reg51.h>#define uint unsigned int#define uchar unsigned charuchar time;double count = 26; //定义占空比,并初始占空比为26%sbit PWM = P2 ^ 0; //P2^0口输出PWMsbit key_add = P3 ^ 4; //电机加速的按键 的I/O口sbit key_dec = P3 ^ 5; //电机减速的按键 的I/O口/************函数声明**************/void delayxms(uint z); //延时void Motor_add(); //电机加速,即增加占空比void Motor_dec(); //电机减速,即减少占空比void timer0_init(); //定时器0初始化/*********主函数********************/void main(){ timer0_init(); delayxms(5); while (1) { Motor_add(); Motor_dec(); }}/****************延时处理**********************/void delayxms(uint z) //延时xms程序{ uint x, y; for (y = z; x > 0; x--) for (y = 110; y > 0; y--);}void Motor_add() //电机加速{ if (key_add == 0) { delayxms(2); //此处时间不能太长,否者会的中断产生冲突 if (key_add == 0) { count += 0.5; //每按一次加速按键占空比加0.5 if (count >= 32) //限定占空比上限 { count = 32; } } while (!key_add); }}void Motor_dec() //电机减速{ if (key_dec == 0) { delayxms(2); //此处时间不能太长,否者会的中断产生冲突 if (key_dec == 0) { count -= 0.5; //每按一次减速按键占空比减0.5 if (count <= 25) //限定占空比下限 { count = 25; } } while (!key_dec); }}/***********定时器0初始化***********/void timer0_init(){ TMOD = 0x01; //定时器0工作于方式1 TH0 = (65536 - 10) / 256; TL0 = (65536 - 10) % 256; TR0 = 1; ET0 = 1; EA = 1;}/**************定时0中断处理******************/void timer0_int() interrupt 1{ TR0 = 0; //设置定时器初值期间,关闭定时器 TH0 = (65536 - 10) / 256; TL0 = (65536 - 10) % 256; TR0 = 1; time++; if (time < count) //count为占空比 { PWM = 1; //输出高电平 } else PWM = 0; if (time >= 100) { time = 0; }}