📄 process.c
字号:
/*****--------------文件信息--------------------------------------------------------------------------------
**文 件 名: process.C
**最后修改日期: 2005-11-10
**描 述: 对串口接收的数据进行处理
**设计者 : jxf
*****************************************************************************************************/
#include "process.h"
#include "proccomm.h"
#include "recframe.h"
#include "ds1302.h"
#include "io.h"
#include "time.h"
#include "hash.h"
/*******************************************************************
哈希函数
函数原型: uchar hash(uchar ,uchar ,uchar)
功 能:
*******************************************************************
uchar Hash(uchar *Data,uchar table_len)
{
register uint hash = 0;
uint x = 0, i=0;
for(i = 0; i < 3; i++)
{
hash = (hash << 2) + Data[i]+TH0+TL0;
if((x = hash & 0xF000) != 0)
{
hash ^= (x >> 8);
hash &= ~x;
}
}
return ((hash & 0x7FFF) % table_len) ;
}
*/
/*******************************************************************
用户通断电操作函数
函数原型: void User_contr()
功 能:
********************************************************************/
void User_contr()
{
switch(wr_switch)
{
case 1:
TimeStart=1;
delay_30ms=0;
LightFlashStart=0;
if(bport07)
{
if(bwary00)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_0=bwary00;
P1_2=~bwary00;
wr_switch++;
}
else wr_switch++;
break;
case 2:
if(bport06)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary01)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_1=bwary01;
P1_2=~bwary01;
wr_switch++;
}
}
else wr_switch++;
break;
case 3:
if(bport05)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary02)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_2=bwary02;
P1_2=~bwary02;
wr_switch++;
}
}
else wr_switch++;
break;
case 4:
if(bport04)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary03)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_3=bwary03;
P1_2=~bwary03;
wr_switch++;
}
}
else wr_switch++;
break;
case 5:
if(bport03)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary04)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_4=bwary04;
P1_2=~bwary04;
wr_switch++;
}
}
else wr_switch++;
break;
case 6:
if(bport02)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary05)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_5=bwary05;
P1_2=~bwary05;
wr_switch++;
}
}
else wr_switch++;
break;
case 7:
if(bport01)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary06)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_6=bwary06;
P1_2=~bwary06;
wr_switch++;
}
}
else wr_switch++;
break;
case 8:
if(bport00)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary07)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P0_7=bwary07;
P1_2=~bwary07;
wr_switch++;
}
}
else wr_switch++;
break;
case 9:
if(bport17)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary10)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_0=bwary10;
P1_2=~bwary10;
wr_switch++;
}
}
else wr_switch++;
break;
case 10:
if(bport16)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary11)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_1=bwary11;
P1_2=~bwary11;
wr_switch++;
}
}
else wr_switch++;
break;
case 11:
if(bport15)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary12)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_2=bwary12;
P1_2=~bwary12;
wr_switch++;
}
}
else wr_switch++;
break;
case 12:
if(bport14)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary13)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_3=bwary13;
P1_2=~bwary13;
wr_switch++;
}
}
else wr_switch++;
break;
case 13:
if(bport13)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary14)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_4=bwary14;
P1_2=~bwary14;
wr_switch++;
}
}
else wr_switch++;
break;
case 14:
if(bport12)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary15)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_5=bwary15;
P1_2=~bwary15;
wr_switch++;
}
}
else wr_switch++;
break;
case 15:
if(bport11)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary16)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_6=bwary16;
P1_2=~bwary16;
wr_switch++;
}
}
else wr_switch++;
break;
case 16:
if(bport10)
{
if(delay_30ms>20)
{
delay_30ms=0;
if(bwary17)
{
P0=0;
P2=0;
P1_2=0;
}
else
{
P0=0xff;
P2=0xff;
P1_2=1;
}
P2_7=bwary17;
P1_2=~bwary17;
wr_switch++;
}
}
else wr_switch++;
break;
case 17:
if(delay_30ms>20)
{
delay_30ms=0;
P2=0;
P0=0;
P1_2=0;
wr_switch=0;
TimeStart=0;
LightFlashStart=1;
}
}
}
/*******************************************************************
用户通断电显示函数
函数原型: void UserLight_Flash()
功 能:
********************************************************************/
void UserLight_Flash()
{
static uchar maskdisp=1;
static uchar state=0;
switch(state)
{
case 0:
if((delay_25ms>=28)&&(delay_25ms<=32))
{
if(maskdisp==0x00)
{
P0=0;
state=1;
maskdisp=1;
break;
}
delay_25ms=33;
if (bwary[0]&maskdisp) P0 =maskdisp;
else P0=0;
maskdisp <<=1;
}
else if(delay_25ms>=100) P0=0; ////////zjs added on 20060711
break;
case 1:
if((delay_25ms>=28)&&(delay_25ms<=32))
{
if(maskdisp==0x00)
{
P2=0;
state=0;
maskdisp=1;
break;
}
delay_25ms=33;
if (bwary[1]&maskdisp) P2 =maskdisp;
else P2=0;
maskdisp <<=1;
}
else if(delay_25ms>=100) P2=0; ////////zjs added on 20060711
break;
}
}
/*******************************************************************
写端口函数
函数原型: void Wr_port()
功 能:
********************************************************************/
void Wr_port()
{
static uchar wport_flag=0;
uchar wport_end;
switch(wport_flag)
{
case 0:
W_block(WPAGE0,i2c_addr_io,bwary,2);
wport_end=1;
W_block(WPAGE0,i2c_addr_portflag,&wport_end,1);
wport_flag=1;
break;
case 1:
W_block(WPAGE1,i2c_addr_io,bwary,2);
wport_end=0;
W_block(WPAGE0,i2c_addr_portflag,&wport_end,1);
wport_flag=0;
break;
}
SenBuf[5]=(RecBuf[5]|0x80);
cs+=SenBuf[5];
SenBuf[6]=0;
SenBuf[SenBuf[6]+7]=cs;
SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
Senlen=SenBuf[6]+9;
}
/*******************************************************************
读端口函数
函数原型: void Rd_port(void)
功 能:
********************************************************************/
void Rd_port(void)
{
register uchar k;
brary00=bwary07;
brary01=bwary06;
brary02=bwary05;
brary03=bwary04;
brary04=bwary03;
brary05=bwary02;
brary06=bwary01;
brary07=bwary00;
brary10=bwary17;
brary11=bwary16;
brary12=bwary15;
brary13=bwary14;
brary14=bwary13;
brary15=bwary12;
brary16=bwary11;
brary17=bwary10;
SenBuf[7]=brary[0];
SenBuf[8]=brary[1];
SenBuf[5]=(RecBuf[5]|0x80);
cs+=SenBuf[5];
SenBuf[6]=2;
cs+=SenBuf[6];
for(k=0;k<2;k++)
cs+=SenBuf[k+7];
SenBuf[SenBuf[6]+7]=cs;
SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
Senlen=SenBuf[6]+9;
}
/*******************************************************************
读累加数据函数
函数原型: void Radd_data()
功 能:
********************************************************************/
void Radd_data(void)
{
register uchar i,j;
SenBuf[5]=(RecBuf[5]|0x80);
cs+=SenBuf[5];
SenBuf[6]=RecBuf[7]*6;
for(i=0;i<RecBuf[7];i++)
for(j=0;j<6;j++)
SenBuf[j+7+i*6]=sum[i][j];
for(i=0;i<SenBuf[6];i++)
cs+=SenBuf[7+i];
cs+=SenBuf[6];
SenBuf[7+SenBuf[6]]=cs;
SenBuf[8+SenBuf[6]]=FRAME_END_CHAR;
Senlen=SenBuf[6]+9;
}
/*******************************************************************
轮询一周结束函数
函数原型: void Cyc_end()
功 能:
********************************************************************/
void Cyc_end()
{
if(CycleFlag)
{
CycleFlag=0;
CheckInFlag=0;
}
else
CheckInFlag=1; //注册标志
FreezeClass=RecBuf[7];
}
/*******************************************************************
设置时段冻结函数
函数原型: void S_time(void)
功 能:
********************************************************************/
void S_time(void)
{
uchar freezetime_end=0;
static freezetime_flag;
// for(i=0;i<16;i++)
// for(j=0;j<6;j++)
// FreezeData[j+i*6]=freezesum[i][j];
switch(freezetime_flag)
{
case 0:
W_block(WPAGE0,i2c_time_freeze,&freezesum[0][0],96);
freezetime_end=1;
W_block(WPAGE0,i2c_time_flag,&freezetime_end,1);
freezetime_flag=1;
break;
case 1:
W_block(WPAGE1,i2c_time_freeze,&freezesum[0][0],96);
freezetime_end=0;
W_block(WPAGE0,i2c_time_flag,&freezetime_end,1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -