~表明你的态度~





当前已表态的用户(1人):
一稚杨
#include #define ENABLE 1 #define DISENABLE 0 typedef unsigned int uint16; typedef unsigned char uchar8; sbit P1_0 = P2^0; sbit P1_1 = P2^1; sbit P1_2 = P1^2; sbit P1_3 = P1^3; sbit p2_3=P2^3; // M1加速 sbit p2_4=P2^4; // M1减速 /* 占空比的时间计算: 占空比 = High_Level_Time_P1_x/Cycle; */ uchar8 Cycle = 200; //设置PWM周期:200*定时器溢出周期(100us)= 20000us; 控制PWM周期可以控制电机的最大速度 uchar8 High_Level_Time_P1_0 = 180; //这里四个全局变量控制每个周期内高电平时间; 控制PWM占空比可以控制电机的速度 uchar8 High_Level_Time_P1_1 = 180; uchar8 High_Level_Time_P1_2 = 170; uchar8 High_Level_Time_P1_3 = 100; void Time0_Init(void); void delay(unsigned int x) //延时 x ms { unsigned int i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void main() { Time0_Init(); while(1) { if (p2_3==0&&High_Level_Time_P1_0<=Cycle) // M1 加速 { High_Level_Time_P1_0+=50; delay(1000); } if (p2_4==0&&High_Level_Time_P1_0>=0) // M1减速 { High_Level_Time_P1_0-=50; delay(1000); // 防抖 } } } /* 定时器的配置: 1.假设单片机晶振频率为12MHz;则定时器累加周期为1us; 2.定时器初值为:9C(十进制的156,即定时器的溢出周期为100us); 3.定时器0设置成8位自动重装载工作方式; */ void Time0_Init(void) { TMOD = 0x02; TH0 = 0x9c; TL0 = 0x9c; TR0 = ENABLE; ET0 = ENABLE; EA = ENABLE; } void Timer0_IT() interrupt 1 { static uchar8 count_P1_0,count_P1_1,\ count_P1_2,count_P1_3; if(count_P1_0==High_Level_Time_P1_0) { P1_0 = 0; } count_P1_0++; if(count_P1_0==Cycle) { P1_0= 1; count_P1_0 = 0; } if(count_P1_1==High_Level_Time_P1_1) { P1_1 = 0; } count_P1_1++; if(count_P1_1==Cycle) { P1_1= 1; count_P1_1 = 0; } if(count_P1_2==High_Level_Time_P1_2) { P1_2=0; } count_P1_2++; if(count_P1_2==Cycle) { P1_2 = 1; count_P1_2=0; } if(count_P1_3==High_Level_Time_P1_3) { P1_3 = 0; } count_P1_3++; if(count_P1_3==Cycle) { P1_3 = 1; count_P1_3= 1; } }仿真