- 打卡等级:以坛为家II
- 打卡总天数:425
- 最近打卡:2025-05-03 00:09:43
已绑定手机
超级版主
DebugLab
- 积分
- 8390
|
发表于 2024-8-26 11:39:30
|
显示全部楼层
以前写的15W104读天地飞7通道PPM接收机的程序(还带低压报警,之前想做遥控鸭子玩来着,还定做了鸭子叫声的语音OTP芯片):
#include <STC15F2K60S2.H>
#define LVDF 0x20
#define PWM P33
#define CH1 P30
#define CH4 P31
#define CH5 P34
#define CH6 P35
unsigned char Channel;
unsigned int Counter;
unsigned int On_Time;Off_Time,Max_Time,Min_Time;
unsigned int Ch1,Ch2,Ch3,Ch4,Ch5,Ch6,Ch7,Ch8;
void Init(void)
{
P3M0=0x3b;
P3M1=0x00;
PWM=0;
CH5=0;
CH6=1;
TMOD=0x01;
IT0=1;
TH0=0;
TL0=0;
PCON&=~LVDF;
EA=1;
EX0=1;
ELVD=1;
Max_Time=2000;
Min_Time=1000;
}
void Time(void)
{
Counter=TH0;
Counter<<=8;
Counter=Counter+TL0;
}
void main(void)
{
Init();
while(1)
{
On_Time=Ch3-Min_Time;
if(Ch3>=Max_Time&&Ch3<(Max_Time+1500))
On_Time=Max_Time-Min_Time;
if(On_Time>=(Max_Time+1500))
On_Time=0;
Off_Time=Max_Time-Min_Time-On_Time;
if(PWM==1)
{
PWM=0;
while(Off_Time--);
}
else
{
PWM=1;
while(On_Time--);
}
if(900<Ch5&&Ch5<1400)
CH5=1;
if(1600<Ch5&&Ch5<2100)
CH5=0;
if(900<Ch6&&Ch6<1400)
CH6=1;
if(1600<Ch6&&Ch6<2100)
CH6=0;
}
}
void Int0(void) interrupt 0
{
TR0=0;
Time();
if(Counter>3000)
{
Channel=0;
}
else
{
Channel++;
}
switch(Channel)
{
case 0:
CH1=1;
break;
case 1:
Ch1=Counter;
CH1=0;
// CH2=1;
break;
case 2:
Ch2=Counter;
// CH2=0;
// CH3=1;
break;
case 3:
Ch3=Counter;
// CH3=0;
CH4=1;
break;
case 4:
Ch4=Counter;
CH4=0;
// CH5=1;
break;
case 5:
Ch5=Counter;
// CH5=0;
// CH6=1;
break;
case 6:
Ch6=Counter;
// CH6=0;
// CH7=1;
break;
case 7:
Ch7=Counter;
// CH7=0;
// CH8=1;
break;
case 8:
Ch8=Counter;
// CH8=0;
break;
}
TH0=0;
TL0=0;
TR0=1;
}
//void LVD() interrupt 6
//{
// PCON&=~LVDF;
// CH6=1;
//}
|
|