四通道遥控遥控信号模拟程序(原创)
0赞
发表于 10/11/2011 2:22:06 PM
阅读(18901)
#include#include #include /*提供4路舵机信号,舵机1、2固定不动,调节P_Value1和P_Value2值调整固定位置, 舵机3可以定时改变位置,更改P_Value3的大小改变位置不同,P_Value4备份用,非用 勿改!*/ void ProPPM(int time1,int time2,int time3,int time4); void IRQ_Handler() __irq; int PPM1 = 0,PPM2 = 0,PPM3 = 0,PPM4 = 0,PeriodCount = 0; int input1 = 0,input2 = 0,input3 = 0,input4 = 0; int P_Value1 =37,P_Value2 =37,P_Value3 =25,P_Value4 =25; //修改初始固定位置改这里,25对应左极限位置,50对应右极限位置,其间夹90°角,不准越界!!! int AD_pot = 0,cnt=0; int main() { T1CON = 0xC0; T1LD = 0x688; // configure timer1's load number IRQEN |= 0x08; // GP4DAT = 0x04000000; // p4.2 output 0 GP3DAT = 0x0F000000; // configure p3.0 3.1 3.2 3.3 as output 0 while (1) { if((GP0DAT&0x02)==0x02) { cnt++; GP4DAT |= 0x04000000; // 黄灯亮开始计时 if(cnt>=1600000)//修改时间改这里,2800000对应时间约5秒 { P_Value3 = 50; //改变到右极限位置 GP4DAT |= 0x02000000; //绿灯亮舵机改变位置 cnt=1600000; //修改时间改这里2800000,和上面同时改,数字要一致 } } } return 0; } void ProPPM(int time1,int time2,int time3,int time4) { if(PPM1==time1) { GP3DAT=GP3DAT&0x0F0E0000; } if(PPM2==time2) { GP3DAT=GP3DAT&0x0F0D0000; } if(PPM3==time3) { GP3DAT=GP3DAT&0x0F0B0000; } if(PPM4==time4) { GP3DAT=GP3DAT&0x0F070000; } if(PeriodCount > 500) { GP3DAT = 0x0F0F0000; PPM1 = 0,PPM2 = 0,PPM3 = 0,PPM4 = 0,PeriodCount = 0; } } void IRQ_Handler() __irq { if ((IRQSTA & GP_TIMER_BIT) !=0) { PPM1++;PPM2++;PPM3++;PPM4++;PeriodCount++; ProPPM(P_Value1,P_Value2,P_Value3,P_Value4); T1CLRI = 0; } return; }
