|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
程序写的很糟糕
大神请略过 自己闲暇时意淫的小玩意 大家凑合着看看就行
用延时函数写的精度不高 但玩模拟器足矣 我在FMS 上测试通过
高电平1MS~2MS 低电平固定 0.1MS周期20MS 6通道
在此感谢 蛋糕大神的指点
老规矩上图贴代码
#include <STC15W408AS.h> //STC12C5A60S2 专用头
#include "STC15W-ADC.h" //STC15W4K-ADC 硬件ADC模数转换
#define uint unsigned int
#define uchar unsigned char
//sbit PPM_OUT = P5^5; //
sbit PPM_OUT = P2^5;
void PPW_Sent(void); // PPM波形产生
void delay_n_10us(uint n); //自己定义的延时n_10us函数
void Delay10us(); [url=]//@12.000MHz[/url]
unsigned int ADC0,ADC1,ADC2,ADC3,ADC4,ADC5,ADC6,ADC7,ADC8,calc_rest; //数模转换变量
/*------------------------------------------------
延时函数
------------------------------------------------*/
void Delay(unsigned char s)
{
unsigned char i,j;
for(i=0; i<s; i++)
for(j=0; j<250; j++);
}
/*****************主程序************************/
main()
{
InitADC(); //ADC初始化
Delay(1); //延时一会
while(1)
{
//读取摇杆模拟量与ADC按键
ADC1=ADC(0)/10; //油门
ADC2=ADC(1)/10; //航向
ADC3=ADC(2)/10; //横滚
ADC4=ADC(3)/10; //俯仰
ADC5=ADC(7)/10; //
ADC6=ADC(5)/10; //
PPW_Sent();
}
{
PPW_Sent();
}
}
void Delay10us() [url=]//@12.000MHz[/url]
{
unsigned char i;
i = 25;
while (--i);
}
void delay_n_10us(uint n) //自己定义的延时n_10us函数
{
while(n)
{
Delay10us();
n=n-1;//每循环一次n减小1
}
}
//一个波形20ms,6个PPM波形,高电平每个波形最大1.4ms,最小0.6ms,低电平固定0.4ms
void PPW_Sent(void) // PPM波形产生
{
calc_rest=0;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道1
PPM_OUT=1;
delay_n_10us(100);//0.6ms
delay_n_10us(ADC1);//0~100
calc_rest+=ADC1;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道2
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC2);//1ms
calc_rest+=ADC2;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道3
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC3);//1ms
calc_rest+=ADC3;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道4
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC4);//1ms
calc_rest+=ADC4;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道5
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC5);//1ms
calc_rest+=ADC5;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道6
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC6);//1ms
calc_rest+=ADC6;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
PPM_OUT=1;
delay_n_10us(1300-calc_rest);//
}
|
| |