📄 function.c
字号:
*
* 调用模块:write_word;
*
* 作 者: wyjok
* 创建时间: 2006年05月25日
*******************************************************************************************************/
void ON_EnterTongXunTime(void)
{
Uint8 k,x1=10,y1=3;
clear();
for(k=0;k<4;k++)
write_word(x1+k*16,y1,TongXunSheZhi2[k],16,16);
write_number(x1+4*16,y1,11); //写冒号:
x1+=30;//行->向右移动
y1+=20;//列->向下移动
for(k=0; k<5; k++)
write_number(x1+k*8,27,15);
if(Time_interval>=10000) write_number(x1+0*8,y1,Time_interval/10000);
if(Time_interval>=1000) write_number(x1+1*8,y1,Time_interval/1000%10);
if(Time_interval>=100) write_number(x1+2*8,y1,Time_interval/100%10);
if(Time_interval>=10) write_number(x1+3*8,y1,Time_interval/10%10);
write_number(x1+4*8,y1,Time_interval%10);
write_word(x1+5*8+2,y1,Time[5],16,16);
Set_temp = 0;
Menu_ID=17;
}
/*********************************************************************************************************
* 函数名称:ON_EnterUpDownZero
*
* 功能描述:显示 上、下限输入值 传感器零点值
*
* 说明:
*
********************************************************************************************************/
void ON_EnterUpDownZero(void)
{
Uint8 x1=2,y1=2;
Uint16 k;
clear();
for(k=0;k<2;k++)
write_word(x1+k*16,y1,MoniShuru[k],16,16); //模拟
for(k=0;k<3;k++)
write_word(x1+2*16+k*16,y1,TongDaohao[k],16,16);//通道号
write_number(x1+5*16,y1,11); //:
y1=y1+20;
for(k=0;k<5;k++)
write_word(x1+k*16,y1,JianceDaima[k],16,16); //监测代码值
write_number(x1+5*16,y1,11); //:
y1+=20;
if(key_data==6) k = 4;
else if(key_data==7) k=8;
else if(key_data==8) k=14;
write_word(x1,y1,TongXunSheZhi2[k],16,16);
write_word(x1+16,y1,TongXunSheZhi2[k+1],16,16);
write_word(x1+32,y1,JianceDaima[4],16,16); //值
write_number(x1+48,y1,11); //:
for(k=0;k<7;k++)
write_number(56+k*8,y1+2,15); //_
Set_array_count=0;
Set_temp=0;
Menu_ID = 12+key_data;
if(key_data==8) k=ADSam_Value[0];else k=ADAlarm_para[key_data-6][0];
Disp_updownzero(k,1);
}
/*********************************************************************************************************
* 函数名称:Disp_Time
*
* 功能描述:显示时间
*
* 说明:
*
********************************************************************************************************/
void Disp_Time(void)
{
Uint8 k,x1=8,y1=0;
for(k=0;k<3;k++)
{
write_number(x1+k*24,y1,Time_now[k]/10);//年月日
write_number(x1+k*24+8,y1,Time_now[k]%10);
//if(k<2)write_number(x1+k*24+16,y1,10);// -
}
for(k=0;k<2;k++)
{
write_number(x1+3*24+k*24,y1,Time_now[k+3]/10);//时分
write_number(x1+3*24+k*24+8,y1,Time_now[k+3]%10);//
}
}
/*********************************************************************************************************
* 函数名称:Disp_GaoJing
*
* 功能描述:显示告警消息
*
* 说明:
*
********************************************************************************************************/
void Disp_GaoJing(Uint8 Index)
{
Uint8 Alarm[I2C_GaoJingByte];
Uint16 Data,k,i;
write_number(28,0,Index/10);//01
write_number(36,0,Index%10);
Index -= 1;
for(k=0; k<I2C_GaoJingByte; k++)
{
Alarm[k] = II3RD(AT24C256,I2C_GaoJing+k+(Index*I2C_GaoJingByte));
}
for(k=0; k<3; k++)
{
write_number(k*24,16,Alarm[k]/10); //年月日
write_number(k*24+8,16,Alarm[k]%10);
}
for(k=0;k<2;k++)
{
write_number(72+k*24,16,Alarm[k+3]/10);//时分
write_number(72+k*24+8,16,Alarm[k+3]%10);//
}
//模拟告警 开关告警 门禁告警
k = 4*Alarm[5];
write_word(0,32,MoniShuru[0+k],16,16);
write_word(16,32,MoniShuru[1+k],16,16);
write_number(32,32,(Alarm[6]+1)/10);//通道号 或者地址
write_number(40,32,(Alarm[6]+1)%10);
Alarm[8] -= 1;
if(Alarm[5]<=1)
{
k = 0;
write_word(6*15,32,Gaojing[3],16,16); //告警
write_word(7*15,32,Gaojing[4],16,16);
write_word(0*16,48,JianceDaima[2],16,16); //代码
write_word(1*16,48,JianceDaima[3],16,16);
write_number(32,48,Alarm[7]/10); //监测代码值
write_number(40,48,Alarm[7]%10);
Data = Alarm[11]*256 + Alarm[12];
Disp_Caiji_Data(Data,Alarm[5],Alarm[6]);
}
else
{
k = 11;
write_word(6*15,32,AlarmNeirong[Alarm[8]*2+2+k],16,16);
write_word(7*15,32,AlarmNeirong[Alarm[8]*2+3+k],16,16);
for(i=0; i<4; i++)
{
write_number(32+i*25,48,Alarm[9]/100);
write_number(32+i*25+8,48,Alarm[9]/10%10);
write_number(32+i*25+16,48,Alarm[9]%10);
}
}
write_word(60,32,AlarmNeirong[Alarm[8]*2+k],16,16);
write_word(76,32,AlarmNeirong[Alarm[8]*2+1+k],16,16);
}
/*********************************************************************************************************
* 函数名称:Disp_Caiji_Data
*
* 功能描述:显示采集到的数据,模拟量,开关量
*
* 说明:
*
********************************************************************************************************/
void Disp_Caiji_Data(Uint16 Data,Uint16 mode,Uint16 k)
{
Uint16 i;
if(mode==0) i = ADSam_Code[k];
else i = DISam_Code[k];
if(i >= 32)
{
if(mode==0) //显示模拟量
{
i = MoniCode[ADSam_Code[k]-32];
if(i==2)//显示温度
{
if(Data<400) {write_number(60,48,25);Data = 400-Data;}else{write_number(60,48,30);Data = Data-400;}
}
else{
if(Data>=10000) write_number(60,48,Data/10000); else write_number(60,48,30);
}
if(Data>=1000) write_number(68,48,Data/1000%10);else write_number(68,48,30);
if(Data>=100) write_number(76,48,Data/100%10); else write_number(76,48,30);
write_number(84,48,Data/10%10);
write_number(92,48,12);
write_number(95,48,Data%10);
}
else //显示开关量
{
write_word(81,48,MoniShuru[5-Data%10],16,16);
i = 10;
}
}
else
{ write_number(60,48,30);
write_number(68,48,30);
write_number(76,48,30);
write_number(92,48,30);
write_number(95,48,30);
write_number(84,48,30);
i = 10; //未启用
}
write_word(104,48,DanWei[i],16,16);
}
/*********************************************************************************************************
* 函数名称:Disp_updownzero
*
* 功能描述:
*
* 说明:
*
********************************************************************************************************/
void Disp_updownzero(Uint16 data,Uint16 k)
{
Uint16 i,code;
write_number(90,0,k/10);
write_number(98,0,k%10);
code = ADSam_Code[k-1];
write_number(90,20,code/10);
write_number(98,20,code%10);
if(code>=32)
{
code = code - 32;
i = MoniCode[code];
if(i==2) //温度
{
if(data<400){Set_array[0]=25;data=400-data;}else{Set_array[0]=26;data=data-400;}
}
else
{
Set_array[0]=data/10000;
}
Set_array[1]=data/1000%10;
Set_array[2]=data/100%10;
Set_array[3]=data/10%10;
Set_array[4]=12;
Set_array[5]=data%10;
}
else //没有启用
{
for(i=0;i<6;i++) Set_array[i]=30;
i = 10;
}
write_word(101,40,DanWei[i],16,16);
for(i=0;i<6;i++)
write_number(weizhi[i],40,Set_array[i]);
write_number_black(weizhi[Set_temp],40,Set_array[Set_temp]);
}
/*********************************************************************************************************
* 函数名称:Disp_KaHao
*
* 功能描述:
*
* 说明:
*
********************************************************************************************************/
void Disp_KaHao(void)
{
Uint8 x1=2,y1=2;
clear();
Set_array_count=0;
write_word(x1+0*16,y1,KaHaoManage[0],16,16);
write_word(x1+1*16,y1,KaHaoManage[1],16,16);
write_number(x1+2*16,y1,11);
Disp_CardNo(CardNo[Set_array_count],Set_array_count,0);
x1 = 8;
y1 = 45;
write_number_black(x1,y1,1);
write_number_black(x1+8,y1,25);
write_word_black(x1+16,y1,KaHaoManage[2],16,16);
write_word_black(x1+32,y1,KaHaoManage[3],16,16);//1-添加
write_number_black(x1+64,y1,2);
write_number_black(x1+72,y1,25);
write_word_black(x1+80,y1,KaHaoManage[4],16,16);
write_word_black(x1+96,y1,KaHaoManage[5],16,16);//2-删除
Set_temp=0;
Menu_ID = 22;
}
/*********************************************************************************************************
* 函数名称:Disp_CardNo
*
* 功能描述:
*
* 说明:
*
********************************************************************************************************/
void Disp_CardNo(Uint8 *p,Uint16 No,Uint16 mode)
{
Uint8 x1=12,y1;
Uint16 i;
write_number(40,1,(No+1)/10);
write_number(48,1,(No+1)%10);
y1 = 20;
if(*p==1||mode==1)//该编号的卡号已启用
{
for(i=0; i<4; i++)
{
if(mode==0)
{
write_number(x1+i*27,y1,*(p+1+i)/100);
write_number(x1+i*27+8,y1,*(p+1+i)/10%10);
write_number(x1+i*27+16,y1,*(p+1+i)%10);
}
else
{
write_number_black(x1+i*27,y1,*(p+i)/100);
write_number_black(x1+i*27+8,y1,*(p+i)/10%10);
write_number_black(x1+i*27+16,y1,*(p+i)%10);
}
}
}
else//显示空白
{
for(i=0; i<14; i++)
write_number(x1+i*8,y1,30);
}
}
/*********************************************************************************************************
* 函数名称:Disp_QiTa
*
* 功能描述:
*
* 说明:
*
********************************************************************************************************/
void Disp_QiTa(void)
{
clear();
Menu_ID = 23;
}
void SaveAlarm(Uint8 att, Uint8 tongdao, Uint8 code,Uint8 state)
{
Uint8 str[4];
Uint16 k,i;
i = I2C_GaoJing+Alarm_Now*I2C_GaoJingByte;
if(Alarm_Now >= I2C_MaxGaoJing) Alarm_Now = 0;
for(k=0; k<5; k++) //保存时间
II3WR(AT24C256,i+k,Time_now[k+1]);
II3WR(AT24C256,i+5,att); //属性0:模拟 1:开关 2:门禁
II3WR(AT24C256,i+6,tongdao); //通道
II3WR(AT24C256,i+7,code); //代码
II3WR(AT24C256,i+8,state); //报警状态
str[0] = 0;
str[1] = 0;
if(att==2)
for(k=0; k<4; k++) str[k] = CardNo[tongdao][k+1];
else if(att==1)
{
str[2] = 0; str[3] = DISam_Value[tongdao];
}
else if(att==0)
{
str[2]=ADSam_Value[tongdao]/256; str[3]=ADSam_Value[tongdao]%256;
}
for(k=0; k<4; k++)
II3WR(AT24C256,i+k+9,str[k]);
Alarm_Now += 1;
Alarm_Sum += 1;
if(Alarm_Sum >= I2C_MaxGaoJing) Alarm_Sum = I2C_MaxGaoJing;
II3WR(AT24C256,I2C_Alarm_Sum,Alarm_Sum);
II3WR(AT24C256,I2C_Alarm_Sum+1,Alarm_Now);
}
void ReadOldAlarm(Uint8 *p,Uint16 index)
{
Uint16 k,i;
i = I2C_GaoJing+index*I2C_GaoJingByte;
for(k=0; k<I2C_GaoJingByte; k++)
*(p+k) = II3RD(AT24C256,i+k);
}
void ReadOldData(Uint8 *p,Uint16 index)
{
Uint16 k,i;
i = I2C_OldData + index * I2C_OldDataByte;
for(k=0; k<I2C_OldDataByte; k++)
*(p+k) = II3RD(AT24C256,i+k);
}
void SaveData(void)
{
Uint16 k,i;
if(OldData_Now >= I2C_MaxOldData) OldData_Now = 0;
i = I2C_OldData+OldData_Now*I2C_OldDataByte;
for(k=0; k<5; k++)
II3WR(AT24C256,i+k,Time_now[k]);
i += 5;
II3WR(AT24C256,i,16);//模拟通道数
for(k=0; k<16; k++)
{
ADAver[k] = (ADMax[k] + ADMin[k])/2;
II3WR(AT24C256,i+k*10+1,k); //通道号
II3WR(AT24C256,i+k*10+2,ADSam_Code[k]);//检测代码
II3WR(AT24C256,i+k*10+3,ADSam_Value[k]/256);
II3WR(AT24C256,i+k*10+4,ADSam_Value[k]%256);
II3WR(AT24C256,i+k*10+5,ADMax[k]/256);
II3WR(AT24C256,i+k*10+6,ADMax[k]%256);
II3WR(AT24C256,i+k*10+7,ADMin[k]/256);
II3WR(AT24C256,i+k*10+8,ADMin[k]%256);
II3WR(AT24C256,i+k*10+9,ADAver[k]/256);
II3WR(AT24C256,i+k*10+10,ADAver[k]%256);
}
i = i+15*10+11;
II3WR(AT24C256,i,16);
for(k=0; k<16; k++)
{
II3WR(AT24C256,i+k*3+1,k);
II3WR(AT24C256,i+k*3+2,DISam_Code[k]);
II3WR(AT24C256,i+k*3+3,DISam_Value[k]);
}
OldData_Now += 1;
OldData_Sum += 1;
if(OldData_Sum>=I2C_MaxOldData) OldData_Sum = I2C_MaxOldData;
Task &=~ Save_Data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -