📄 dzagree.c
字号:
/******************************************************************************************/
/******************************************电总转换协议************************************/
/******************************************************************************************/
//#include <reg52.h>
#include "STC89C51.h"
#include "main.h"
extern unsigned char idata Uart_RxBuf[50];
extern unsigned char idata Uart_TxBuf[50];
extern bit Uart_RecvOk;
unsigned char idata Address;
unsigned char idata ComTxPointer;
unsigned char idata ComTxLength;
unsigned char idata HighByte;
unsigned char idata LowByte;
unsigned char idata ComRxData;
unsigned char ComRxPointer=1;
unsigned char ComRxStep=0;
unsigned char lenghAscTX;
unsigned char ComRxAdr;
unsigned char ComRxChkSum();
unsigned char AscToHex(unsigned char a,unsigned char b);
void HexToAsc(unsigned char a);
/**************************************************************************/
extern unsigned char code lum_grade[10];
extern unsigned char idata LightGrade[8];
#define DeviceSort 0x02 //可调光
//#define DeviceSort 0x01 //不可调光
#define CardNum 0x01
//#define CardNum 0x02
unsigned char code scene[10]={0xAA,0xB9,0x6C,0x6D,0x6E,
0xB0,0xA7,0xC1,0xDC,0xE1};
unsigned char code chligtscene[10][8]= {{135,125,105,95,85,75,135,30},
{30,135,125,105,95,85,30,135},
{55,30,135,125,105,95,85,75},
{75,55,30,135,125,105,95,85},
{85,75,55,30,135,125,105,95},
{95,85,75,55,30,135,125,105},
{105,95,85,75,55,30,135,125},
{125,105,95,85,75,55,30,135},
{55,125,105,95,85,75,30,135},
{135,125,105,135,85,75,55,30},};
/**************************************************************************/
void DoComUnPacket(void)
{
unsigned int idata ChkTXSum;
unsigned char p;
unsigned char Cid1;
unsigned char Cid2;
unsigned char RtnCode;
unsigned char ComRxVer;
// unsigned char ComRxAdr; //
unsigned char i;
unsigned char ChkSumHigh;
unsigned char ChkSumLow;
RtnCode=ComRxChkSum();//
ComRxVer=Uart_RxBuf[1];
ComRxAdr=Uart_RxBuf[2];
Cid1=Uart_RxBuf[3];
Cid2=Uart_RxBuf[4];
if((RtnCode==0)&&(Uart_RecvOk==1))
{
unsigned char CommandType1;
unsigned char CommandType;
CommandType1=Cid2;
if(ComRxAdr==CardNum||ComRxAdr==0xFF)
{
switch(CommandType1)
{
case 0x42://控制单盏灯
{
CommandType=Uart_RxBuf[7];
switch(DeviceSort)
{
case 0x01:
{
switch(CommandType)
{
case 0xFF: //全开
P0_state=0x00;
break;
case 0x00: //全关
P0_state=0xFF;
break;
case 0x01: //单盏灯的开关
if(Uart_RxBuf[8]==0xFF)P0_0OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_0OnOff=1;
break;
case 0x02:
if(Uart_RxBuf[8]==0xFF)P0_1OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_1OnOff=1;
break;
case 0x03:
if(Uart_RxBuf[8]==0xFF)P0_2OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_2OnOff=1;
break;
case 0x04:
if(Uart_RxBuf[8]==0xFF)P0_3OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_3OnOff=1;
break;
case 0x05:
if(Uart_RxBuf[8]==0xFF)P0_4OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_4OnOff=1;
break;
case 0x06:
if(Uart_RxBuf[8]==0xFF)P0_5OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_5OnOff=1;
break;
case 0x07:
if(Uart_RxBuf[8]==0xFF)P0_6OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_6OnOff=1;
break;
case 0x08:
if(Uart_RxBuf[8]==0xFF)P0_7OnOff=0;
else if(Uart_RxBuf[8]==0x00)P0_7OnOff=1;
break;
default:
break;
}//end of 01 switch(CommandType)
}
break;
case 0x02:
{
switch(CommandType)
{
case 0xFF: //全开
P0_state=0x00;
P1_state=0x00;
break;
case 0x00: //全关
P0_state=0xFF;
P1_state=0xFF;
break;
case 0x08:
if(Uart_RxBuf[8]==0xFF)
{
P1_0OnOff=0;
P0_0OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_0OnOff=1;
P0_0OnOff=1;
}
else
{
P1_0OnOff=0;
P0_0OnOff=0;
LightGrade[0]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x07:
if(Uart_RxBuf[8]==0xFF)
{
P1_1OnOff=0;
P0_1OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_1OnOff=1;
P0_1OnOff=1;
}
else
{
P1_1OnOff=0;
P0_1OnOff=0;
LightGrade[1]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x06:
if(Uart_RxBuf[8]==0xFF)
{
P1_2OnOff=0;
P0_2OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_2OnOff=1;
P0_2OnOff=0;
}
else
{
P1_2OnOff=0;
P0_2OnOff=0;
LightGrade[2]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x05:
if(Uart_RxBuf[8]==0xFF)
{
P1_3OnOff=0;
P0_3OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_3OnOff=1;
P0_3OnOff=1;
}
else
{
P1_3OnOff=0;
P0_3OnOff=0;
LightGrade[3]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x04:
if(Uart_RxBuf[8]==0xFF)
{
P1_4OnOff=0;
P0_4OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_4OnOff=1;
P0_4OnOff=1;
}
else
{
P1_4OnOff=0;
P0_4OnOff=0;
LightGrade[4]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x03:
if(Uart_RxBuf[8]==0xFF)
{
P1_5OnOff=0;
P0_5OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_5OnOff=1;
P0_5OnOff=1;
}
else
{
P1_5OnOff=0;
P0_5OnOff=0;
LightGrade[5]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x02:
if(Uart_RxBuf[8]==0xFF)
{
P1_6OnOff=0;
P0_6OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_6OnOff=1;
P0_6OnOff=1;
}
else
{
P1_6OnOff=0;
P0_6OnOff=0;
LightGrade[6]=lum_grade[Uart_RxBuf[8]-1];
}
break;
case 0x01:
if(Uart_RxBuf[8]==0xFF)
{
P1_7OnOff=0;
P0_7OnOff=0;
}
else if(Uart_RxBuf[8]==0x00)
{
P1_7OnOff=1;
P0_7OnOff=1;
}
else
{
P1_7OnOff=0;
P0_7OnOff=0;
LightGrade[7]=lum_grade[Uart_RxBuf[8]-1];
}
break;
default:
break;
}//end of 02 switch(CommandType)
}
break;
default:
break;
}//end of switch(DeviceSort)
}//end of case 42
break;
case 0x41://读取设备号
{
lenghAscTX=lenghAscTX+4;
Uart_RxBuf[5]=0xC0;
Uart_RxBuf[6]=0x04;
Uart_RxBuf[7]=DeviceSort;
Uart_RxBuf[8]=0x08;
Uart_RxBuf[9]=0xFC;
Uart_RxBuf[10]=0xD8;
}//end of case 41
break;
case 0x44://设置场景
{
switch(DeviceSort)
{
case 0x01:
{
CommandType=Uart_RxBuf[7];
P0_state=scene[CommandType-1];
}
break;
case 0x02:
{
P1_state=0x00;
CommandType=Uart_RxBuf[7];
for(i=0;i<8;i++)
{
LightGrade[i]=chligtscene[CommandType-1][i];
}
}
break;
default:
break;
}
}//end of case 44
break;
default:
break;
}//end of switch(CommandType1)
Uart_TxBuf[0]=Uart_RxBuf[0];
Uart_RxBuf[4]=RtnCode;
ChkTXSum=0;
p=1;
for(i=1;i<lenghAscTX;i++)
{
HexToAsc(Uart_RxBuf[p]);
p++;
Uart_TxBuf[i++]=HighByte;
ChkTXSum+=HighByte;
Uart_TxBuf[i]=LowByte;
ChkTXSum+=LowByte;
}
ChkTXSum = (~ChkTXSum) + 1;
ChkSumHigh = ChkTXSum >> 8;
HexToAsc(ChkSumHigh);
Uart_TxBuf[i++] = HighByte;
Uart_TxBuf[i++] = LowByte;
ChkSumLow = ChkTXSum & 0x00FF;
HexToAsc(ChkSumLow);
Uart_TxBuf[i++] = HighByte;
Uart_TxBuf[i++] = LowByte;
Uart_TxBuf[i]=0x0D;
// Uart_TxBuf[i]=Uart_RxBuf[p];
CTRL485=0; //RS-485转换成发送
SBUF=Uart_TxBuf[0];
}//end of if(ComRxAdr==CardNum||ComRxAdr==0xFF)
else
{
SBUF=01;
}
}
}
/******************************************************************************************/
unsigned char ComRxChkSum()//ChkSum
{
unsigned int idata ChkSum;
unsigned char ComRxData; //
unsigned char LengthHigh;
unsigned char LengthLow;
unsigned char LengthChkSum;
unsigned char RtnCode;
unsigned char i;
unsigned char p;
LowByte=Uart_RxBuf[9];
LengthChkSum=AscToHex(0,LowByte);
LowByte=Uart_RxBuf[10];
LengthHigh=AscToHex(0,LowByte);
LengthChkSum+=LengthHigh;
LowByte=Uart_RxBuf[11];
ComRxData=AscToHex(0,LowByte);
LengthChkSum+=ComRxData;
LowByte=Uart_RxBuf[12];
ComRxData=AscToHex(0,LowByte);
LengthChkSum+=ComRxData;
LengthChkSum&=0x0f;
HighByte=Uart_RxBuf[11];
LowByte=Uart_RxBuf[12];
LengthLow=AscToHex(HighByte,LowByte);
LengthLow+=13;
if((LengthChkSum!=0)||(LengthHigh!=0))
{ if(LengthHigh!=0)
{
RtnCode=0xe1;
}
else
{
RtnCode=0x03;
}
}
else
{
ChkSum=0;
for(i=1;i<LengthLow;i++)
{
ChkSum+=Uart_RxBuf[i];
}
HighByte=Uart_RxBuf[i++];
LowByte=Uart_RxBuf[i++];
ComRxData=AscToHex(HighByte,LowByte);
ChkSum+=(ComRxData<<8);
HighByte=Uart_RxBuf[i++];
LowByte=Uart_RxBuf[i++];
ComRxData=AscToHex(HighByte,LowByte);
ChkSum+=ComRxData;
if(ChkSum!=0)
RtnCode=0x02;
else
RtnCode=0;
}
p=1;
lenghAscTX=LengthLow;
for(i=1;i<LengthLow+4;i++)
{
HighByte=Uart_RxBuf[i++];
LowByte=Uart_RxBuf[i];
ComRxData=AscToHex(HighByte,LowByte);
Uart_RxBuf[p++]=ComRxData;
}
Uart_RxBuf[p]=Uart_RxBuf[i];
return(RtnCode);
}
/****************************************************************/
unsigned char AscToHex(unsigned char a,unsigned char b)
{
if(a<0x3a)
{
a&=0x0f;
}
else
{
a-=0x07;
a&=0x0f;
}
if(b<0x3a)
{
b&=0x0f;
}
else
{
b-=0x07;
b&=0x0f;
}
a<<=4;
a|=b;
return (a);
}
/******************************************************************************************/
void HexToAsc(unsigned char a) //a=ASC_H, b=ASC_L
{
LowByte=a;
a&=0xf0;
a>>=4;
if(a<0x0a)
{
a+=0x30;
}
else
{
a+=0x37;
}
HighByte=a;
a=LowByte;
a&=0x0f;
if(a<0x0a)
{
a+=0x30;
}
else
{
a+=0x37;
}
LowByte=a;
}
/******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -