?? rs_main.c
字號:
case 0x10: /* 重復按鍵譯碼*/
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; /* 數據幀尾結束*/
KEY_DECODE_OK = 1;
Error_Flag = 0;
}
if( Error_Flag )
RS_Index = 0;
break;
case 0xF0: /* 重復按鍵譯碼*/
case 0xF1:
case 0xF2: if(( RS_High == 2 ) && ( RS_Index == 51 ))
{
RS_Index = 50;
KEY_DECODE_OK = 1; /* 重復按鍵*/
}
else
RS_Index = 0;
break;
default: RS_Index = 0; /* 誤碼,重新定幀*/
break;
}
/* 重新啟動遙控器解碼脈沖測量*/
RS_High = 0;
TH0 = 0;
TL0 = 0;
}
/********************************************************************/
/* 定時器中斷0服務程序( 遙控解碼) */
/********************************************************************/
void Interrupt_T0( void ) interrupt 1
{
RS_High++;
if( RS_High > ( IDLE_Cnt + 2 )) /* 1個單位為32.768ms */
{
Fresh_KEY_Flag = 1; /* 首次按鍵標志*/
RS_Index = 0;
RS_High = IDLE_Cnt + 2;
}
}
/********************************************************************/
/* 外部中斷1服務程序( 10ms脈沖輸入) */
/* 同時用于系統定時任務 */
/********************************************************************/
void Interrupt_INT1( void ) interrupt 2
{
/* 定時器復位,時間基準對齊*/
TimeSlot = PWM_INIT;
TH1 = 0xFE;
TL1 = 0x70;
/* 系統定時標志*/
System_Timer = 1;
}
/********************************************************************/
/* 定時器中斷1服務程序( PWM 定時器) */
/********************************************************************/
void Interrupt_T1( void ) interrupt 3
{
unsigned char CH_Mirror;
/* 0.2ms定時器,PWM步長為0.2ms,占空比從2%起*/
TH1 = 0xFE;
TL1 = 0x70;
P1 = P1_Mirror; /*輸出到端口*/
/* 計算各通道PWM 脈沖輸出*/
TimeSlot --;
CH_Mirror = 0x55;
if( POWER_FLAG ) /*電源標志,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; /*數據輸出,0表示有效*/
}
/********************************************************************/
/* 應用程序初始化 */
/********************************************************************/
void APP_Initlization( void ) /* 應用程序初始化*/
{
/* 初始化初始亮度,保持微亮*/
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個亮*/
break;
case 2: CH_LED_Mirror &= 0xDF; /* 高位亮*/
break;
case 3: CH_LED_Mirror &= 0xF7; /* 2個亮*/
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;
}
/********************************************************************/
/* 運行指示燈控制 */
/********************************************************************/
void RUN_LED_Control( void ) /* 運行指示燈控制*/
{
if( Timer_Flag )
{
LED_FLASH_Cnt ++;
if( RS_High > IDLE_Cnt ) /* 正常運行*/
{
if( LED_FLASH_Cnt == 50 )
{
RUN_LED = !RUN_LED;
LED_FLASH_Cnt = 0;
}
}
else /* 接收遙控碼時間*/
{
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 定時器溢出標志,1=溢出*/
/* TRx 定時器啟動標志,1=啟動*/
/* IEx 外部中斷申請標志,1=申請*/
/* ITx 外部中斷中斷模式,1=下跳沿,0=低電平*/
/* ---------------------------------------------------------------------------------------*/
/* TMOD D7~D4-定時器1, D3~D0-定時器0*/
/* GATE C/T M1 M0, GATE C/T M1 M0 */
/* GATE 門控,1=測INTx高脈沖寬度,0=計數器,不受INTx外部輸入控制*/
/* C/T 定時器模式,1=計數器模式,計數Tx脈沖個數0=定時器模式*/
/* M1 M0 定時器工作模式: 0=13位計數器,1=16位計數器,2=波特率發生器*/
/* ---------------------------------------------------------------------------------------*/
/* IE */
/* EA x x ES ET1 TX1 ET0 EX0 */
/* ---------------------------------------------------------------------------------------*/
/* SCON */
/* SM0 SM1 SM2 REN TB8 RB8 TI RI */
/* SM0 SM1 通信模式,常用方式1*/
/* SM2 多機通信使能*/
/* REN 允許接收控制*/
/* TB8 發送第8位數據*/
/* RB8 接收第8位數據*/
/* TI 發送中斷標志*/
/* RI 接收中斷標志*/
/* ---------------------------------------------------------------------------------------*/
/* IP */
/* X X X PS PT1 PX1 PT0 PX0 */
/* ---------------------------------------------------------------------------------------*/
/* PCON */
/* SMOD X X X GF1 GF0 PD IDL */
/* SMOD 波特率加倍使能*/
/* GFx 通用標志寄存器*/
/* PD 掉電模式*/
/* IDL 待機模式*/
/* 波特率計算 */
/* 波特率=(2^SMOD/32) * (OSC/(12*(256-TH1))) */
/* TH1=256-(2^SMOD*OSC)/(384*波特率) */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -