📄 飞机程序.c
字号:
//---------------------------------------------------------
//funtion :tx IR cortrol PLANE
//body :sn8p2501
//date :2009 02 05
//in/output:
//-------------------------------------
// P22 UP_SOUND
// P23 DOWN_SOUND
// P24 STOP_SOUND
// P21 ID1
// P20 ID2
// P11 ID3
// P13 POWNER
// P25 LED
// P54 TX
// R0_M FP10M
// R0 FP10
// RX1_M FP00M
// RX1 FP00
// TEST_M FP12M
// TEST_R FP12
#include<sn8p2501B.h>
#define R0_M FP24M
#define R0 FP24
#define RX1_M FP23M
#define RX1 FP23
#define RX3_M FP20M
#define RX3 FP20
#define RX2_M FP13M
#define RX2 FP13
#define RX4_M FP00M//FP54//FP00M//微调
#define RX4 FP00//FP54//FP00
#define TEST_M FP12M
#define TEST_R FP12
#define LED FP21
#define ID1 FP54//FP00//FP54
#define ID2 FP10
#define GUN_SOUND FP25
#define TX FP22
//#define KEY1 FP13
#define POWER FP11
/*
//-------------------------------------//
#define MKBF
#define MKBB
//-------------------------------------//
#define FKBF
#define FKBM
#define FKBB
//-------------------------------------//
#define FKBF
#define FKBM
#define FKBB
//--------------------------------------//
*/
bit F41K;
bit MOVFL;
bit LOWFL1;
bit HIGHFL;
bit LOWFL;
bit BEGINFL;
bit FIREFL;
bit TIMEFL;
bit TIMEFL1;
bit BEGINFL1;
unsigned char SOUND_TIME;
unsigned char SOUND_CT;
unsigned char COUNT333;
unsigned char COUNT_ID;
unsigned char TX_COUNT;
unsigned char COUNT1;
unsigned char R0_DATA;
unsigned char R1_DATA;
unsigned char R11_DATA;
unsigned char R2_DATA;
unsigned char R3_DATA;
unsigned char R4_DATA;
unsigned char ID;
unsigned char COUNT_LED;
unsigned char COUNT_2_16;
unsigned char R3_M;
unsigned char R2_M;
//===================//
//unsigned char BEGIN_REG;
unsigned char i;
unsigned char j;
unsigned char TEMP;
unsigned char TEMP1;
union
{
unsigned long AC;
unsigned char TEMPA;
unsigned char TEMPB;
}QWE;
union
{
unsigned long AB;
unsigned char TEMPC;
unsigned char TEMPD;
}QWE2;
#define AIREG QWE.AC
#define TEMP4 QWE.TEMPA
#define TEMP3 QWE.TEMPB
#define QUREG QWE2.AB
#define TEMP2 QWE2.TEMPC
#define TEMP5 QWE2.TEMPD
unsigned char OPREG;
//==================//
//---------------初使化-----------------
void init(void)
{
P0UR=0X0;
P0M=0;
P1M=0X0;//P为输入
P1UR=0X1;
P5M=0X0;//TX
P5UR=0Xff;
P2M=0Xff;
P2UR=0X0;
FGIE=1; //开总中断
T0M=0x30; //5*64=320US
//T0C=0;
FT0IEN=1;
FT0ENB=1;
LOWFL=0;
BEGINFL=1;
BEGINFL1=1;
MOVFL=0;
SOUND_CT=0;
FIREFL=0;
TX_COUNT=255;
}
//---------中断--计数器加一--------------
__interrupt ints (void)
{ if(FTC0IRQ) //t0中断?
{
FTC0IRQ=0;
COUNT1++;
if(F41K)
TX^=1;
//TX=F41K;
}
if(FT0IRQ)//16.384MS;//2.048
{
FT0IRQ=0;
T0C=0;
COUNT_2_16++;
COUNT_ID++;
//-------------------------
if(COUNT_2_16==8)
{
COUNT_2_16=0;
if(TX_COUNT)
TX_COUNT--;
SOUND_TIME++;
if(FIREFL)
SOUND_CT++;
if(SOUND_CT==30)
GUN_SOUND=0;
if(SOUND_TIME==7)
{
SOUND_TIME=0;
if(SOUND_CT>31u)
{
GUN_SOUND^=1;
SOUND_CT=32;
}
}
COUNT_ID++;
COUNT333++;
//if(BEGIN_REG&&BEGINFL)
// BEGIN_REG--;
//else
//{if(MOVFL==0)
// LED=1;
// }
if(COUNT333>6U)
{
COUNT333=0;
COUNT_LED++;
if(MOVFL)
{
if(LOWFL)
LED=TIMEFL;
else
{
if(BEGINFL)
LED^=1;
else
LED=0;
}
}
else
{
LED=TIMEFL1;
}
if(COUNT_LED>3U)
{
COUNT_LED=0;
TIMEFL^=1;
TIMEFL1=TIMEFL;
}
else
if(TIMEFL1==0&&COUNT_LED==1)
TIMEFL1=1;
if(POWER)
{
HIGHFL=0;
if(LOWFL1)
LOWFL=1;
LOWFL1=1;
}
else
{
LOWFL1=0;
if(HIGHFL)
LOWFL=0;
HIGHFL=1;
}
}
}
}
}
void NO_TX(unsigned char time9)
{
COUNT1=0;
F41K=0;
TX=0;
while(COUNT1<time9);
}
void YES_TX(unsigned char time10)
{
COUNT1=0;
F41K=1;
TX=1;
while(COUNT1<time10);
F41K=0;
TX=0;
}
//================发送0======================
void TX_0(void)
{ //COUNT1=0;
//F41K=0;
//TX=0;
//while(COUNT1<24U);
NO_TX(24);
//COUNT1=0;
//F41K=1;
//TX=1;
//while(COUNT1<24U);
//F41K=0;
//TX=0;
YES_TX(24);
}
//============================================
//================发送1=======================
void TX_1(void)
{ //COUNT1=0;
//F41K=0;
//TX=0;
//while(COUNT1<47U);
NO_TX(47);
//COUNT1=0;
//F41K=1;
//TX=1;
//while(COUNT1<24U);
// F41K=0;
// TX=0;
YES_TX(24);
TEMP1++;
}
//--------------------------------------
void TX_BEGIN(void)
{
//COUNT1=0;
//F41K=1;
//TX=1;
//while(COUNT1<31U);
YES_TX(31);
//COUNT1=0;
// F41K=0;
//TX=0;
//while(COUNT1<92U);//123
NO_TX(92);
//COUNT1=0;
// F41K=1;
// TX=1;
//while(COUNT1<31U);
// COUNT1=0;
// F41K=0;
// TX=0;
YES_TX(31);
}
//-------------------------------------------//
void TX_DATA(void)
{
j=0x80;
for(i=0;i<8U;i++)
{ if(TEMP&j)
TX_1();
else
TX_0();
j=j>>1;
}
}
//----------发送数据-------------------------//
void DATA_TX(void)
{
TEMP1=0;
if(ID1||ID2)
{
FIREFL=0;
if(ID1&&ID2)
ID=3;
else
if(ID1)
ID=1;
else
ID=2;
}
//=========================//
TC0M=0x64; //6 4分频1US,5 8分频2US,自动重装
TC0R=243;
TC0C=243; //1us*13=13us//38KHZ
FTC0IEN=1;
FTC0ENB=1;
TX_BEGIN();
//TEMP=TX_DATA;
if(BEGINFL)
{
R1_DATA=0;
R11_DATA=0;
R3_DATA=0;
FIREFL=0;
}
//-----------------------------------//
TEMP=ID;
TEMP<<=6;
TEMP+=R1_DATA;
TX_DATA();
TEMP=R11_DATA;
TEMP<<=3;//2
if(FIREFL)
TEMP+=0X4;//2
if(R3_DATA>7U)
TEMP+=0X2;//1
R3_DATA=R3_DATA&0x7;
if(R3_DATA>3U)
TEMP+=0X1;
TX_DATA();
//----------------------
TEMP=R3_DATA;
TEMP<<=6;
j=0x80;
for(i=0;i<2U;i++)
{ if(TEMP&j)
TX_1();
else
TX_0();
j=j>>1;
}
if(TEMP1&0X1)
TX_1();
else
TX_0();
FTC0IEN=0;
FTC0ENB=0;
COUNT_ID=0;
F41K=0;
TX=0;
}
//=============================================
//-----------------------------------------------
void R2_R4_DEC(void)
{
TEMP=0;
if(TEMP3&0X1)
TEMP=1;
TEMP3>>=1;
TEMP+=TEMP3;
R1_DATA+=TEMP;
if(R11_DATA>TEMP3)
R11_DATA-=TEMP3;
else
R11_DATA=2;
if(R1_DATA>63u)
{
i=R1_DATA-63;
R1_DATA=63;
R11_DATA-=i;
}
}
//============================================
unsigned char DSP_DATA(void)
{
QUREG=0;
for(i=0;i<8u;i++)
{
if(OPREG&0X80)
QUREG+=TEMP;
if(i!=7)
QUREG<<=1;
OPREG<<=1;
}
AIREG=0;
for(i=0;i<16U;i++)
{
AIREG<<=1;
QUREG<<=1;
if(FC)
AIREG+=1;
OPREG<<=1;
TEMP=AIREG-TEMP1;//
if(FC)
{
AIREG=TEMP;
OPREG+=1;
}
}
TEMP=TEMP1-AIREG;
TEMP1>>=1;
if(TEMP<TEMP1)
OPREG++;
return OPREG;
}
//-------------------------------------------//
void discharge(void)
{
do
{
R0_M=0;
RX1_M=0;
RX2_M=0;
RX3_M=0;
RX4_M=0;
TEST_M=1;
TEST_R=0;
R0=0;
RX1=0;
RX2=0;
RX3=0;
RX4=0;
// 都为0
for(i=0;i<80u;i++)
; //延时等待放电完成
TEST_M=0; //作为输入口
}
while(TEST_R)
; //等待放电完成
}
//---------------------------------------//
unsigned char TEST(void)
{
FGIE=0;
for(j=0;TEST_R==0&&j!=255;j++) //计数
{
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
i++;
}
FGIE=1;
return j;
}
//---------------------------------------//
void TEST_RX(void)
{
//---------测量RO----------`1--------
discharge();
R0_M=1;//R0
R0=1; //FGIE=0;
R0_DATA=TEST(); //FGIE=1;
//===================RX1===============================//
discharge();
RX1_M=1;//RX
RX1=1; // FGIE=0;
R1_DATA=TEST(); //FGIE=1;
//--------------------RX2-----------------------------//
discharge();
RX2_M=1;//RX
RX2=1; //FGIE=0;
R2_DATA=TEST(); //FGIE=1;
//--------------------------------------------------//
discharge();
RX3_M=1;//RX
RX3=1;
R3_DATA=TEST();
//--------------------------------------------------//
discharge();
RX4_M=1;//RX
RX4=1;
//FGIE=0;
R4_DATA=TEST();
discharge();
//---------------dsp rx-----------------//
//--------------------------------------//
if(BEGINFL1)
{
if(R3_DATA>75u&&R3_DATA<115u&&R2_DATA>75u&&R2_DATA<115u)//100
{ SOUND_CT++;
R3_M=R3_DATA;//-6;
R2_M=R2_DATA;//-4;
if(SOUND_CT>4U)
BEGINFL1=0;
}
}
//---------------------------------------//
TEMP=10; // 前后
TEMP1=R3_M;
OPREG=R3_DATA;
R3_DATA=DSP_DATA();//前后
if(R3_DATA<3u)
R3_DATA=1;
else
R3_DATA-=2;
if(R3_DATA>15u)
R3_DATA=15;
//========================================//
//TEMP=81;//81 主//63*63=3900//500/63=8
//TEMP1=R0_DATA;
//OPREG=R1_DATA;
TEMP=186;//81 主//63*63=3900//500/63=8
TEMP1=R0_DATA;
OPREG=R1_DATA;
R1_DATA=DSP_DATA();//主电机
if(R1_DATA<16u)
R1_DATA=0;
else
R1_DATA-=16; //130==>120+34=154+32=186
//--------------------------
if(R1_DATA>14u)
{
if(R1_DATA<136u)
{
R1_DATA-=15;
R1_DATA>>=2;
R1_DATA+=15;
}
else
{
R1_DATA-=90;
}
}
if(R1_DATA>63u)
{
R1_DATA=63;
}
if(BEGINFL)
{
if(R1_DATA>6u)//&&R1_DATA<38u)
MOVFL=1;
if(MOVFL&&R1_DATA==0)//<6u)
BEGINFL=0;
}
//--------------------------------------//
//---------------10k+1k------------------//
R11_DATA=0;
if(R1_DATA==0)
{
R3_DATA=8;
}
else
{
R11_DATA=R1_DATA;
TX_COUNT=244;
//--------------------
TEMP=9;//20==>4k==>//6
//TEMP=11; //7
TEMP1=R2_M;
OPREG=R2_DATA;
R2_DATA=DSP_DATA();//左右
if(R2_DATA<3u)
R2_DATA=0;
else
R2_DATA-=3;
if(R2_DATA>12u)
{
R2_DATA=12;
}
TEMP=36;//5.1k//6k==>4.8k==>31==>5.1k==>33
TEMP1=R0_DATA;//4.8k===>20===>5.1k===>22
OPREG=R4_DATA;
R4_DATA=DSP_DATA();//微调
if(OPREG<6u)
OPREG=0;
else
OPREG-=5;
if(OPREG>31u)
{
OPREG=31;
}
TEMP2=0;
TEMP3=0;
if(OPREG>15U)
{
OPREG-=16;
TEMP2=OPREG;
}
else
{
for(i=16,TEMP=0;i>OPREG;i--)
TEMP++;
TEMP3=TEMP;
}
//----------------------
//OPREG=R2_DATA;
//if(OPREG>18u)
// OPREG=18;
// if(OPREG>7U)
/// {
// if(OPREG<11U)
// OPREG=0;
// else
// OPREG-=10;
// TEMP3+=OPREG;
// }
if(R2_DATA>5U)
{
TEMP3=TEMP3+R2_DATA-6;
}
else
{
for(i=6,TEMP=0;i>R2_DATA;i--)
TEMP++;
TEMP2+=TEMP;
}
/*
*/
if(TEMP3>TEMP2)
{
TEMP3=TEMP3-TEMP2;
if(TEMP3>15U)
TEMP3=15;
R2_R4_DEC();//R1+
R11_DATA=R1_DATA-R11_DATA;
R11_DATA+=0X10;
}
else
{
TEMP3=TEMP2-TEMP3;
if(TEMP3>15U)
TEMP3=15;
R2_R4_DEC();//R1+
TEMP1=R1_DATA;
R1_DATA=R11_DATA;
R11_DATA=TEMP1;
R11_DATA=R11_DATA-R1_DATA;
}
}
}
//--------------------------- ----------//
//-----------------主程序----------------//
void main(void)
{
init( );
//DATA_TX( );
while(1)
{
WDTR=0X5A; //watch dog clr;
TEST_RX();
if(ID1==0&&ID2==0&&R1_DATA>10U&&BEGINFL==0&&LOWFL==0)
{
if(FIREFL==0)
{
GUN_SOUND=1;
SOUND_CT=0;
}
FIREFL=1;
}
else
{
FIREFL=0;
if(BEGINFL==0)
{
SOUND_CT=0;
GUN_SOUND=0;
}
}
//--------100----130-----160-//
if(ID==1)
TEMP=34;
else
{
if(ID==2)
TEMP=52;
else
TEMP=65;
}
if(COUNT_ID>TEMP&&TX_COUNT>0u&&MOVFL&&LOWFL==0)
DATA_TX( );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -