freedomhit

四通道遥控遥控信号模拟程序(原创)

0
阅读(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;
}