|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-2-15 17:56:41
|
显示全部楼层
代码的关键部分:
void main(void)
{
unsigned char *InitIform;
unsigned int temp;
InitIform="Init_is_OK";
LCD_Init();
DelayMs(10);
LCD_Write_String(3,0,InitIform);
//初始化Timer0
TMOD=0x01;//timer0 方式1
ET0=1;//允许timer0中断
//初始化INT0
IT0=1;//负跳变触发中断;
EX0=1;
EA=1;
DelayMs(10000);
while(1)
{
temp=filter(PPM_channel1);
DepartNum(temp);
LCD_Write_Char(0,0,'A');
LCD_Write_Char(1,0,qian);
LCD_Write_Char(2,0,bai);
LCD_Write_Char(3,0,shi);
LCD_Write_Char(4,0,ge);
temp=filter(PPM_channel2);
DepartNum(temp);
LCD_Write_Char(5,0,'B');
LCD_Write_Char(6,0,qian);
LCD_Write_Char(7,0,bai);
LCD_Write_Char(8,0,shi);
LCD_Write_Char(9,0,ge);
temp=filter(PPM_channel3);
DepartNum(temp);
LCD_Write_Char(10,0,'C');
LCD_Write_Char(11,0,qian);
LCD_Write_Char(12,0,bai);
LCD_Write_Char(13,0,shi);
LCD_Write_Char(14,0,ge);
temp=filter(PPM_channel4);
DepartNum(temp);
LCD_Write_Char(0,1,'D');
LCD_Write_Char(1,1,qian);
LCD_Write_Char(2,1,bai);
LCD_Write_Char(3,1,shi);
LCD_Write_Char(4,1,ge);
temp=filter(PPM_channel5);
DepartNum(temp);
LCD_Write_Char(5,1,'E');
LCD_Write_Char(6,1,qian);
LCD_Write_Char(7,1,bai);
LCD_Write_Char(8,1,shi);
LCD_Write_Char(9,1,ge);
temp=filter(PPM_channel6);
DepartNum(temp);
LCD_Write_Char(10,1,'F');
LCD_Write_Char(11,1,qian);
LCD_Write_Char(12,1,bai);
LCD_Write_Char(13,1,shi);
LCD_Write_Char(14,1,ge);
// DelayMs(1000);
}
}
void ISIR_INT0(void) interrupt 0
{
unsigned int PPM_temp;
if(TR0)
{
TR0=0;//停止计数;
PPM_temp=TH0;
PPM_temp=(PPM_temp<<8)|TL0;
TH0=0;
TL0=0;
TR0=1;//给TH0和TL0赋初值后重新启动定时器
}
else
{
TH0=0;//如果是第一次启动中断,则启动timer0
TL0=0;
TR0=1;
}
if(PPM_temp>3000|| Timer0_OverFlowFlag)//判断引导区,如果脉宽大于3000us,则是引导区
{
channel=0;
Timer0_OverFlowFlag=0;
i++;
if(i==10) i=0;
}
switch(channel)
{
case 1: PPM_channel1=PPM_temp; break;
case 2: PPM_channel2=PPM_temp; break;
case 3: PPM_channel3=PPM_temp; break;
case 4: PPM_channel4=PPM_temp; break;
case 5: PPM_channel5=PPM_temp; break;
case 6: PPM_channel6=PPM_temp; break;
case 7: break;
case 8: break;
default:break;
}
channel++;
}
void ISIR_Timer0(void) interrupt 1
{
Timer0_OverFlowFlag=1; //timer0最大值是65536us,理论上不会溢出,如果溢出则出错,重新从通道1开始
}
PPM信号接INT0 |
|