?? rs_main.c
字號(hào):
case 0x10: /* 重復(fù)按鍵譯碼*/
case 0x11:
case 0x12: if(( RS_High == 0 ) && ( RS_Index == 50 ))
RS_Index ++;
else
RS_Index = 0;
break;
case 0x21: /* 幀頭搜索*/
case 0x22:
case 0x23: if( RS_High == 0 )
RS_Index = 1;
else
RS_Index = 0;
break;
case 0x37: /* 幀尾搜索*/
case 0x38:
case 0x39: Error_Flag = 1;
if(( RS_Index == 33 ) && ( RS_High == 1 ))
if(( RS_CODE.KEY[0] == 0x1E ) && ( RS_CODE.KEY[1] == 0xE1 ))
if(( RS_CODE.KEY[2] ^ RS_CODE.KEY[3] ) == 0xFF )
{
KEY_DECODE = RS_CODE.KEY[3];
RS_Index = 50; /* 數(shù)據(jù)幀尾結(jié)束*/
KEY_DECODE_OK = 1;
Error_Flag = 0;
}
if( Error_Flag )
RS_Index = 0;
break;
case 0xF0: /* 重復(fù)按鍵譯碼*/
case 0xF1:
case 0xF2: if(( RS_High == 2 ) && ( RS_Index == 51 ))
{
RS_Index = 50;
KEY_DECODE_OK = 1; /* 重復(fù)按鍵*/
}
else
RS_Index = 0;
break;
default: RS_Index = 0; /* 誤碼,重新定幀*/
break;
}
/* 重新啟動(dòng)遙控器解碼脈沖測量*/
RS_High = 0;
TH0 = 0;
TL0 = 0;
}
/********************************************************************/
/* 定時(shí)器中斷0服務(wù)程序( 遙控解碼) */
/********************************************************************/
void Interrupt_T0( void ) interrupt 1
{
RS_High++;
if( RS_High > ( IDLE_Cnt + 2 )) /* 1個(gè)單位為32.768ms */
{
Fresh_KEY_Flag = 1; /* 首次按鍵標(biāo)志*/
RS_Index = 0;
RS_High = IDLE_Cnt + 2;
}
}
/********************************************************************/
/* 外部中斷1服務(wù)程序( 10ms脈沖輸入) */
/* 同時(shí)用于系統(tǒng)定時(shí)任務(wù) */
/********************************************************************/
void Interrupt_INT1( void ) interrupt 2
{
/* 定時(shí)器復(fù)位,時(shí)間基準(zhǔn)對齊*/
TimeSlot = PWM_INIT;
TH1 = 0xFE;
TL1 = 0x70;
/* 系統(tǒng)定時(shí)標(biāo)志*/
System_Timer = 1;
}
/********************************************************************/
/* 定時(shí)器中斷1服務(wù)程序( PWM 定時(shí)器) */
/********************************************************************/
void Interrupt_T1( void ) interrupt 3
{
unsigned char CH_Mirror;
/* 0.2ms定時(shí)器,PWM步長為0.2ms,占空比從2%起*/
TH1 = 0xFE;
TL1 = 0x70;
P1 = P1_Mirror; /*輸出到端口*/
/* 計(jì)算各通道PWM 脈沖輸出*/
TimeSlot --;
CH_Mirror = 0x55;
if( POWER_FLAG ) /*電源標(biāo)志,ON*/
{
if( CH_Vol[0] == TimeSlot )
CH_Mirror &= 0xFE;
if( CH_Vol[1] == TimeSlot )
CH_Mirror &= 0xFB;
if( CH_Vol[2] == TimeSlot )
CH_Mirror &= 0xEF;
if( CH_Vol[3] == TimeSlot )
CH_Mirror &= 0xBF;
}
P1_Mirror = CH_Mirror | LED_Mirror; /*數(shù)據(jù)輸出,0表示有效*/
}
/********************************************************************/
/* 應(yīng)用程序初始化 */
/********************************************************************/
void APP_Initlization( void ) /* 應(yīng)用程序初始化*/
{
/* 初始化初始亮度,保持微亮*/
CH_Vol[0] = 0;
CH_Vol[1] = 0;
CH_Vol[2] = 0;
CH_Vol[3] = 0;
Current_CH = 1;
}
/********************************************************************/
/* 通道指示燈 */
/********************************************************************/
void CH_LED_Control( void ) /* 通道指示燈*/
{
unsigned char CH_LED_Mirror;
CH_LED_Mirror = 0xAA;
if( POWER_FLAG )
CH_LED_Mirror &= 0xFD;
switch( Current_CH )
{
case 0: CH_LED_Mirror &= 0x02; /* 全亮*/
break;
case 1: CH_LED_Mirror &= 0xF7; /* 1個(gè)亮*/
break;
case 2: CH_LED_Mirror &= 0xDF; /* 高位亮*/
break;
case 3: CH_LED_Mirror &= 0xF7; /* 2個(gè)亮*/
CH_LED_Mirror &= 0xDF;
break;
case 4: CH_LED_Mirror &= 0x7F; /* 高位亮*/
break;
}
LED_Mirror = CH_LED_Mirror;
}
/********************************************************************/
/* 電源控制 */
/********************************************************************/
void CH_Power_ON ( void ) /* 電源控制*/
{
POWER_FLAG = 1; /* 電源開啟*/
if(( CH_Vol[0] < VOL_MIN ) || ( CH_Vol[0] > VOL_MAX ))
CH_Vol[0] = VOL_INIT;
if(( CH_Vol[1] < VOL_MIN ) || ( CH_Vol[1] > VOL_MAX ))
CH_Vol[1] = VOL_INIT;
if(( CH_Vol[2] < VOL_MIN ) || ( CH_Vol[2] > VOL_MAX ))
CH_Vol[2] = VOL_INIT;
if(( CH_Vol[3] < VOL_MIN ) || ( CH_Vol[3] > VOL_MAX ))
CH_Vol[3] = VOL_INIT;
}
/********************************************************************/
/* 運(yùn)行指示燈控制 */
/********************************************************************/
void RUN_LED_Control( void ) /* 運(yùn)行指示燈控制*/
{
if( Timer_Flag )
{
LED_FLASH_Cnt ++;
if( RS_High > IDLE_Cnt ) /* 正常運(yùn)行*/
{
if( LED_FLASH_Cnt == 50 )
{
RUN_LED = !RUN_LED;
LED_FLASH_Cnt = 0;
}
}
else /* 接收遙控碼時(shí)間*/
{
if( LED_FLASH_Cnt == 10 )
{
RUN_LED = !RUN_LED;
LED_FLASH_Cnt = 0;
}
}
}
}
/********************************************************************/
/* 通道功率增加 */
/********************************************************************/
unsigned char VOL_INC( unsigned char VOL ) /* 通道功率增加*/
{
if( VOL < VOL_MAX )
VOL ++;
return( VOL );
}
/********************************************************************/
/* 通道功率減小 */
/********************************************************************/
unsigned char VOL_DEC( unsigned char VOL ) /* 通道功率減小*/
{
if( VOL > VOL_MIN )
VOL --;
return( VOL );
}
/* ---------------------------------------------------------------------------------------*/
/* TCON */
/* TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 */
/* TFx 定時(shí)器溢出標(biāo)志,1=溢出*/
/* TRx 定時(shí)器啟動(dòng)標(biāo)志,1=啟動(dòng)*/
/* IEx 外部中斷申請標(biāo)志,1=申請*/
/* ITx 外部中斷中斷模式,1=下跳沿,0=低電平*/
/* ---------------------------------------------------------------------------------------*/
/* TMOD D7~D4-定時(shí)器1, D3~D0-定時(shí)器0*/
/* GATE C/T M1 M0, GATE C/T M1 M0 */
/* GATE 門控,1=測INTx高脈沖寬度,0=計(jì)數(shù)器,不受INTx外部輸入控制*/
/* C/T 定時(shí)器模式,1=計(jì)數(shù)器模式,計(jì)數(shù)Tx脈沖個(gè)數(shù)0=定時(shí)器模式*/
/* M1 M0 定時(shí)器工作模式: 0=13位計(jì)數(shù)器,1=16位計(jì)數(shù)器,2=波特率發(fā)生器*/
/* ---------------------------------------------------------------------------------------*/
/* IE */
/* EA x x ES ET1 TX1 ET0 EX0 */
/* ---------------------------------------------------------------------------------------*/
/* SCON */
/* SM0 SM1 SM2 REN TB8 RB8 TI RI */
/* SM0 SM1 通信模式,常用方式1*/
/* SM2 多機(jī)通信使能*/
/* REN 允許接收控制*/
/* TB8 發(fā)送第8位數(shù)據(jù)*/
/* RB8 接收第8位數(shù)據(jù)*/
/* TI 發(fā)送中斷標(biāo)志*/
/* RI 接收中斷標(biāo)志*/
/* ---------------------------------------------------------------------------------------*/
/* IP */
/* X X X PS PT1 PX1 PT0 PX0 */
/* ---------------------------------------------------------------------------------------*/
/* PCON */
/* SMOD X X X GF1 GF0 PD IDL */
/* SMOD 波特率加倍使能*/
/* GFx 通用標(biāo)志寄存器*/
/* PD 掉電模式*/
/* IDL 待機(jī)模式*/
/* 波特率計(jì)算 */
/* 波特率=(2^SMOD/32) * (OSC/(12*(256-TH1))) */
/* TH1=256-(2^SMOD*OSC)/(384*波特率) */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -