📄 main.c
字号:
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
num=tab2[g_chRecvBuf[11]];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
num=tab[g_chRecvBuf[12]];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
num=tab[g_chRecvBuf[13]];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
break;
case 3:
if(g_chRecvBuf[8]==0xa0)
{
for(i=1;i<4;i++)
{
num=tab[12];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
}
}
else if(g_chRecvBuf[8]==0xa1)
{
for(i=1;i<3;i++)
{
num=tab[12];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
}
num=tab[10];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
}
num=tab2[g_chRecvBuf[11]];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
num=tab[g_chRecvBuf[12]];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
num=tab[g_chRecvBuf[13]];
for(c=0;c<8;c++)
{
bSRCLK=0;
bDAT=num&0x80;
num=num<<1;
bSRCLK=1;
_nop_();
bSRCLK=0;
}
break;
default:
break;
}
TR0=0;
bRCLK=0;
_nop_();
_nop_();
bRCLK=1;
_nop_();
_nop_();
bRCLK=0;
TR0=1;
}
//*********************************************************************
//** 函数名: McuWriteFlash()
//* 输 入: m_chDPH-待写入flash地址高位 m_chDPL-待写入地址低位 m_chWriteData-待写入数据
//* 输 出:
//* 功能描述: 写单片机内部flash
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void McuWriteFlash(Uchar m_chDPH,Uchar m_chDPL,Uchar m_chWriteData)
{
Uchar m_chTestData1=0;
Uchar m_chTestData2=0;
Uint m_nLoopCount=0;
DPH=m_chDPH;
DPL=m_chDPL;
ISP_CONTR=ENABLE_ISP;
ISP_CMD=0x02;
ISP_ADDRH=DPH;
ISP_ADDRL=DPL;
ISP_DATA=m_chWriteData;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
_nop_();
EA=1;
ISP_DATA=0;
do{
McuReadFlash(m_chDPH,m_chDPL);
m_chTestData1=g_chMcuFlashTemp1;
McuReadFlash(m_chDPH,m_chDPL);
m_chTestData2=g_chMcuFlashTemp1;
if(m_chTestData1==m_chTestData2)
{
g_bitWriteMcuFlashOK=1;
}
else
{
g_bitWriteMcuFlashOK=0;
m_nLoopCount++;
}
McuReadFlash(m_chDPH,m_chDPL);
m_chTestData1=g_chMcuFlashTemp1;
McuReadFlash(m_chDPH,m_chDPL);
m_chTestData2=g_chMcuFlashTemp1;
if(m_chTestData1==m_chTestData2)
{
g_bitWriteMcuFlashOK=1;
}
else
{
g_bitWriteMcuFlashOK=0;
m_nLoopCount++;
}
}while(g_bitWriteMcuFlashOK==0&&m_nLoopCount<10000);
}
//*********************************************************************
//** 函数名: McuReadFlash()
//* 输 入: m_chDPH-待读入数据的高位地址 m_chDPL-待读入数据的低位地址
//* 输 出:
//* 功能描述: 单片机写内部flash
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void McuReadFlash(Uchar m_chDPH,Uchar m_chDPL)
{
DPH=m_chDPH;
DPL=m_chDPL;
ISP_CONTR=ENABLE_ISP;
ISP_CMD=0x01;
ISP_ADDRH=DPH;
ISP_ADDRL=DPL;
ISP_DATA=0;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
_nop_();
g_chMcuFlashTemp1=ISP_DATA;
EA=1;
McuFlashDisable();
}
//*********************************************************************
//** 函数名: McuFlashSectorErase()
//* 输 入:
//* 输 出:
//* 功能描述: 单片机内部flash扇区擦除
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void McuFlashSectorErase(Uchar m_chDPH,Uchar m_chDPL)
{
DPH=m_chDPH;
DPL=m_chDPL;
ISP_CONTR=ENABLE_ISP;
ISP_CMD=0x03;
ISP_ADDRH=DPH;
ISP_ADDRL=DPL;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
_nop_();
EA=1;
McuFlashDisable();
}
//*********************************************************************
//** 函数名: McuFlashDisable()
//* 输 入:
//* 输 出:
//* 功能描述: 单片机内部flash初始化
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void McuFlashDisable()
{
ISP_CONTR=0x0;
ISP_CMD=0x0;
ISP_TRIG=0x0;
}
//*********************************************************************
//** 函数名: DataOperation()
//* 输 入:
//* 输 出:
//* 功能描述: 数据计算(如合力、差力、操作、传动等数值的计算)
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void DataOperation(void)
{
Uint nTemp1=0;
Uint nTemp2=0;
g_chRecvBuf[4]-=0xA0;
g_chRecvBuf[5]-=0xA0;
g_chRecvBuf[6]-=0xA0;
g_chRecvBuf[7]-=0xA0;
g_chRecvBuf[8]-=0xA0;
g_chRecvBuf[9]-=0xA0;
g_chRecvBuf[10]-=0xA0;
g_chRecvBuf[11]-=0xA0;
if(g_chMcuFlashTemp1==0xa0)
{
g_chRecvBuf[8]=0xa0;
g_chRecvBuf[9]=0x0;
g_chRecvBuf[10]=g_chRecvBuf[7];
g_chRecvBuf[11]=g_chRecvBuf[6];
g_chRecvBuf[12]=g_chRecvBuf[5];
g_chRecvBuf[13]=g_chRecvBuf[4];
}
else if(g_chMcuFlashTemp1==0xa1)
{
g_chRecvBuf[7]=g_chRecvBuf[11];
g_chRecvBuf[6]=g_chRecvBuf[10];
g_chRecvBuf[5]=g_chRecvBuf[9];
g_chRecvBuf[4]=g_chRecvBuf[8];
g_chRecvBuf[8]=0xa0;
g_chRecvBuf[9]=0x0;
g_chRecvBuf[10]=g_chRecvBuf[7];
g_chRecvBuf[11]=g_chRecvBuf[6];
g_chRecvBuf[12]=g_chRecvBuf[5];
g_chRecvBuf[13]=g_chRecvBuf[4];
}
else if(g_chMcuFlashTemp1==0xa2)
{
nTemp1=g_chRecvBuf[8]+g_chRecvBuf[9]*10+g_chRecvBuf[10]*100+g_chRecvBuf[11]*1000;
nTemp2=g_chRecvBuf[4]+g_chRecvBuf[5]*10+g_chRecvBuf[6]*100+g_chRecvBuf[7]*1000;
nTemp1=nTemp1+nTemp2;
g_chRecvBuf[8]=0xa0;
g_chRecvBuf[9]=nTemp1/10000;
g_chRecvBuf[10]=nTemp1/1000%10;
g_chRecvBuf[11]=nTemp1/100%10;
g_chRecvBuf[12]=nTemp1/10%10;
g_chRecvBuf[13]=nTemp1%10;
}
else if(g_chMcuFlashTemp1==0xa3)
{
nTemp1=g_chRecvBuf[8]+g_chRecvBuf[9]*10+g_chRecvBuf[10]*100+g_chRecvBuf[11]*1000;
nTemp2=g_chRecvBuf[4]+g_chRecvBuf[5]*10+g_chRecvBuf[6]*100+g_chRecvBuf[7]*1000;
if(nTemp1>nTemp2)
{
nTemp1=nTemp1-nTemp2;
g_chRecvBuf[8]=0xa1;
}
else
{
nTemp1=nTemp2-nTemp1;
g_chRecvBuf[8]=0xa0;
}
g_chRecvBuf[9]=0x0;
g_chRecvBuf[10]=nTemp1/1000;
g_chRecvBuf[11]=nTemp1/100%10;
g_chRecvBuf[12]=nTemp1/10%10;
g_chRecvBuf[13]=nTemp1%10;
}
DeleteZeroFun();
McuReadFlash(0x20,0x0);
switch(g_chRecvBuf[3])
{
case 0xa0:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa1:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa5:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa6:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa2:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa3:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa7:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa8:
if(g_chMcuFlashTemp1!=0xa0&&g_chMcuFlashTemp1!=0xa1&&g_chMcuFlashTemp1!=0xa2&&g_chMcuFlashTemp1!=0xa3)
{
g_chMcuFlashTemp1=0xa0;
}
else
{
DisplayData();
}
break;
case 0xa4:
while(!g_bitWriteMcuFlashOK)
{
g_chRecvBuf[8]=0xa0;
g_chRecvBuf[9]=1;
g_chRecvBuf[10]=9;
g_chRecvBuf[11]=9;
g_chRecvBuf[12]=9;
g_chRecvBuf[13]=9;
DeleteZeroFun();
DisplayData();
}
ComReturnData();
g_chMcuFlashTemp1=g_chMcuFlashTemp;
break;
default:
break;
}
}
//*********************************************************************
//** 函数名: SetRate()
//* 输 入:
//* 输 出:
//* 功能描述: 设置波特率
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void SetRate(void)
{
McuFlashSectorErase(0x26,0x0);
McuWriteFlash(0x26,0,g_chRecvBuf[4]);
if(!g_bitWriteMcuFlashOK)
{
WriteMcuFlashError();
}
else
{
ComReturnData();
}
switch(g_chRecvBuf[4])
{
case 0x31:
InitSerial(0xa0,0xa0);//1200
break;
case 0x32:
InitSerial(0xd0,0xd0);//2400
break;
case 0x33:
InitSerial(0xe8,0xe8);//4800
break;
case 0x34:
InitSerial(0xf4,0xf4);//9600
break;
case 0x35:
InitSerial(0xfa,0xfa);//19200
break;
default:
break;
}
}
//*********************************************************************
//** 函数名: SetLight()
//* 输 入:
//* 输 出:
//* 功能描述: 设置亮度
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void SetLight(void)
{
McuFlashSectorErase(0x28,0x0);
McuWriteFlash(0x28,0,g_chRecvBuf[4]);
if(!g_bitWriteMcuFlashOK)
{
WriteMcuFlashError();
}
else
{
ComReturnData();
}
switch(g_chRecvBuf[4])
{
case 0x30:
g_SetLightTime=100;
g_SetGoOutTime=1;
break;
case 0x31:
g_SetLightTime=200;
g_SetGoOutTime=1;
break;
case 0x32:
g_SetLightTime=300;
g_SetGoOutTime=1;
break;
case 0x33:
g_SetLightTime=400;
g_SetGoOutTime=1;
break;
case 0x34:
g_SetLightTime=500;
g_SetGoOutTime=1;
break;
case 0x35:
g_SetLightTime=800;
g_SetGoOutTime=1;
break;
case 0x36:
g_SetLightTime=1000;
g_SetGoOutTime=1;
break;
case 0x37:
g_SetLightTime=2000;
g_SetGoOutTime=1;
break;
default:
break;
}
light_time=g_chRecvBuf[4]-0x30+1;
}
//*********************************************************************
//** 函数名: WriteMcuFlashError()
//* 输 入:
//* 输 出:
//* 功能描述: 写flash错误返回信息
//* 全局变量:
//* 调用模块:
//* 作 者: wzw
//* 日 期: 2006-07-27
//* 修 改:
//* 日 期:
//* 版 本:
//********************************************************************
void WriteMcuFlashError(void)
{
ES=1;
g_sbitEn485=1;
SendCharToCom(0x00);
SendCharToCom(0x00);
SendCharToCom(0x00);
SendCharToCom(0x00);
SendCharToCom(0x00);
SendCharToCom(0x00);
g_sbitEn485=0;
ES=0;
}
void timer0int() interrupt 1
{
if(light_cnt==light_time)
{
bCS=1;
}
else if(light_cnt>=LIGHT_ALL)
{
bCS=0;
light_cnt=0;
}
light_cnt++;
TH0=0xfc;
TL0=0x55;
}
void DeleteZeroFun(void)
{
if(g_chRecvBuf[3]==0xa1||g_chRecvBuf[3]==0xa3)
{
if(g_chRecvBuf[9]==0x0)
{
g_chDataHighBitOffsetPos=2;
if(g_chRecvBuf[10]==0x0)
{
g_chDataHighBitOffsetPos=3;
if(g_chRecvBuf[11]==0x0)
{
g_chDataHighBitOffsetPos=4;
if(g_chRecvBuf[12]==0x0)
{
g_chDataHighBitOffsetPos=5;
}
}
}
}
else if(g_chRecvBuf[9]==0x1)
{
g_chDataHighBitOffsetPos=1;
}
}
else if(g_chRecvBuf[3]==0xa0||g_chRecvBuf[3]==0xa2)
{
if(g_chRecvBuf[9]==0x0)
{
g_chDataHighBitOffsetPos=2;
if(g_chRecvBuf[10]==0x0)
{
g_chDataHighBitOffsetPos=3;
if(g_chRecvBuf[11]==0x0)
{
g_chDataHighBitOffsetPos=4;
}
}
}
else if(g_chRecvBuf[9]==0x1)
{
g_chDataHighBitOffsetPos=1;
}
}
else if(g_chRecvBuf[3]==0xa5||g_chRecvBuf[3]==0xa7)
{
if(g_chRecvBuf[9]==0x0)
{
g_chDataHighBitOffsetPos=2;
if(g_chRecvBuf[10]==0x0)
{
g_chDataHighBitOffsetPos=3;
}
}
else if(g_chRecvBuf[9]==0x1)
{
g_chDataHighBitOffsetPos=1;
}
}
else if(g_chRecvBuf[3]==0xa6||g_chRecvBuf[3]==0xa8)
{
if(g_chRecvBuf[9]==0x0)
{
g_chDataHighBitOffsetPos=2;
}
else if(g_chRecvBuf[9]==0x1)
{
g_chDataHighBitOffsetPos=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -