芯片解密单片机IR收发程序
单片机源程序如下:
- 芯片解密#include "IRSEND.h"
- 芯片解密unsigned char SDATA[5] = {0,0,0,0,0};
- 芯片解密unsigned char SNDATA[5] = {0,0,0,0,0};
- 芯片解密unsigned char gSendBitCount = 0; //发送的位计数
- 芯片解密unsigned char gSendCount = 0; //发送个数计数
- unsigned char gSendTimeCount = 0; //发送计时
- unsigned char gIRSendMode = 0; //发送模式
- unsigned char gFinishCount = 0;
- void IRSENDInit()
- {
- _IRSENDOUT_;
- _IRSENDUP_;
- _DATAH_;
- }
- void IRSEND() //125us
- {
- switch(gIRSendMode)
- {
- case IR_DELAY:
- _DATAH_;
- gSendTimeCount++;
- if(gSendTimeCount >= _DELAY_)
- {
- gSendTimeCount = 0;
- gSendBitCount = 0;
- gSendCount = 0;
- SNDATA[0] = SDATA[0];
- SNDATA[1] = SDATA[1];
- SNDATA[2] = SDATA[2];
- SNDATA[3] = SDATA[3];
- SNDATA[4] = (unsigned char)(~(SDATA[0]+SDATA[1]+SDATA[2]+SDATA[3]+0xbb));
- gIRSendMode = IR_SEND;
- }
- break;
- case IR_SEND:
- gSendTimeCount++;
- if(gSendTimeCount >= _ROUND_)
- {
- gSendTimeCount = 0;
- gSendBitCount++; //已发送1位
- SNDATA[gSendCount] <<= 1; //数据移位
- if(gSendBitCount >= 8) //已发送8位
- {
- gSendBitCount = 0;
- gSendCount++;
- if(gSendCount >= 5)
- {
- gSendTimeCount = 0;
- gSendBitCount = 0;
- gSendCount = 0;
- // _DATAH_;
- gIRSendMode = IR_LAST;
- goto _2;
- }
- }
- }
- if((SNDATA[gSendCount] & B10000000) != 0) //如果等于1
- {
- if(gSendTimeCount < _DATAHTIME_)
- {
- _DATAL_;
- }
- else
- {
- _DATAH_;
- }
- }
- else
- {
- if(gSendTimeCount < _DATALTIME_)
- {
- _DATAL_;
- }
- else
- {
- _DATAH_;
- }
- }
- _2:
- break;
-
- case IR_LAST:
- if(gFinishCount <= _DATAHTIME_)
- {
- _DATAL_;
- }
- else
- {
- _DATAH_;
- }
- gFinishCount++;
- if(gFinishCount >= _ROUND_)
- {
- gFinishCount = 0;
- gIRSendMode = IR_DELAY;
- }
- break;
- }
- }

芯片解密