📄 toucher.c
字号:
nongdu[2]= (uchar)(addr_unit&0x00ff) ; //FM24C256片内地址低位字节
EIMSK&=~(1<<INT6);
//do
fhz=I2cRead(SLA2_W,SLA2_R, nongdu[1],nongdu[2],1); //读出
//while(fhz==1);
unit_chroma=i2c_rd_buff[0] ; //将读出的浓度单位放入unit_chroma中
EIMSK|=(1<<INT6);
//temp4=(num_can-1)/8;
temp5=(num_det-1)/8;
if((detuse[num_can][temp5]&temp7)==temp7) //如果节点没使用
{
if(num_det<=sum2)
{
xtzb(xh,xl,yh,yl);
temp0=num_det/10+0x30; //探测器编号高位
temp1=num_det%10+0x30; //探测器编号低位
xszf(0x31,temp0); //显示探测器编号高位
xszf(0x31,temp1); //显示探测器编号低位
zhuanhuan7(0x30,0x00); //横坐标增加0x30
xtzb(xh,xl,yh,yl);
xianshi(0x0000); //显示0
unit_common(); //浓度单位显示
zhuanhuan7(0x50,0x00);
xtzb(xh,xl,yh,yl);
non_use(); //显示不使用
kong(0x33,0x02); //显示两个空格
}
else
{
xtzb(xh,xl,yh,yl);
kong(0x33,0x08); //显示14个空格
zhuanhuan7(0x80,0x00);
xtzb(xh,xl,yh,yl);
kong(0x33,0x05);
}
}
else
{
xtzb(xh,xl,yh,yl); //设置系统坐标
temp0=num_det/10+0x30; //探测器编号高位
temp1=num_det%10+0x30; //探测器编号低位
xszf(0x31,temp0); //显示探测器编号高位
xszf(0x31,temp1); //显示探测器编号低位
zhuanhuan7(0x30,0x00); //横坐标增加0x30
/*******************显示浓度******************/
xtzb(xh,xl,yh,yl);
//if((canuse[temp4]&temp6)==temp6) //如果can没使用
//{
// xianshi(0x0000); //浓度显示0
//}
//else if((detuse[num_can][temp5]&temp7)==temp7) //如果节点没使用
//{
// xianshi(0x0000); //显示0
//}
if(rambuff[0]==0x55) //如果是探测器
{
temp2=rambuff[2];
temp3=rambuff[3];
temp=temp2;
temp=(temp<<8)+temp3;
xianshi(temp); //显示浓度
}
else if(rambuff[0]==0xa9) //联动模块
{
xianshi(0x0000); //显示0
}
else
;
unit_common(); //浓度单位显示
zhuanhuan7(0x50,0x00);
/***************************状态显示*************************/
xtzb(xh,xl,yh,yl);
fdbs(0x04);
/*
if((canuse[temp4]&temp6)==temp6) //如果can没使用
{
non_use(); //显示不使用
kong(0x33,0x02); //显示两个空格
}
else if((detuse[num_can][temp5]&temp7)==temp7) //如果节点没使用
{
non_use(); //显示不使用
kong(0x33,0x02); //显示两个空格
}
*/
if(rambuff[0]==0x55)
{
if((rambuff[1]&0x04)==0x04)
{
xszf(0x34,0x59);//高
xszf(0x34,0x3f);//报
kong(0x33,0x03);//显示三个空格
}
else if((rambuff[1]&0x02)==0x02)
{
xszf(0x34,0x5a);//低
xszf(0x34,0x3f);//报
kong(0x33,0x03);//显示三个空格
}
else if((rambuff[1]&0x01)==0x01)
{
xszf(0x34,0x50); //传
xszf(0x34,0x51); //感
xszf(0x34,0x52); //器
xszf(0x34,0x3b); //故
xszf(0x34,0x3c); //障
}
else if(rambuff[1]==0xf0)
{
xszf(0x34,0x4e); //通
xszf(0x34,0x4f); //讯
xszf(0x34,0x3b); //故
xszf(0x34,0x3c); //障
xszf(0x33,0x20); //空格
}
else
{
xszf(0x34,0x36);//正
xszf(0x34,0x37);//常
kong(0x33,0x03);//显示三个空格
}
}
else if(rambuff[0]==0xa9) //如果是联动模块
{
if(rambuff[1]==0x00)
{
xszf(0x34,0x87);//联
xszf(0x34,0x88);//动
kong(0x33,0x03);//显示三个空格
}
else if(rambuff[1]==0xf0)
{
xszf(0x34,0x4e); //通
xszf(0x34,0x4f); //讯
xszf(0x34,0x3b); //故
xszf(0x34,0x3c); //障
xszf(0x33,0x20); //空格
}
else
;
}
else
;
}
zhuanhuan7(0x60,0x00); //纵坐标不变,横坐标增加0x60
num_det++; //结点编号加1
temp7=(temp7<<1);
counter++; //计数器加1
if(counter==8) //如果计数器为8,则重新计数
{
temp7=0x01;
counter=0;
}
}
zhuanhuan();
y=y+0x23;
yl=y;
yh=(y>>8);
}
}
/*********************浓度单位判断显示*****************/
void unit_common(void)
{
switch(unit_chroma)
{
case 0xff:
{
xszf(0x31,0x25); //%
xszf(0x31,0x4c); //L
xszf(0x31,0x45); //E
xszf(0x31,0x4c); //L
break;
}
case 0x02:
{
xszf(0x31,0x50); //P
xszf(0x31,0x50); //P
xszf(0x31,0x4d); //M
break;
}
case 0x03:
{
xszf(0x31,0x56); //V
xszf(0x31,0x4f); //O
xszf(0x31,0x4c); //L
break;
}
default:
break;
}
}
/*********************报警显示*******************/
void clarm(void)
{
uchar c=0;
uchar kkk=0;
uchar temp1=0;
uchar temp2=0;
uchar temp3=0;
uchar temp4=0;
uint temp=0;
uint addr_gas=0; //外部E2中存放气体类型的初始地址
uint addr_unit=0; //外部E2中存放浓度单位的初始地址
uchar clarm_buff[17]; //取报警信息暂时用
xh=0xe0;
xl=0x08;
yh=0x90;
yl=0x59;
wdr();
if(baojingaddr>0x0400) //防止第一次减了出错
baojingaddr=baojingaddr-16 ;
for(kkk=0;kkk<8;kkk++)
{
if((kkk==1)||(kkk==3)||(kkk==5)||(kkk==7))
{
xh=0xc0; //换行颜色为红色
xl=0x08;
yh=yh|0x20; //将字体背景设为青色
}
else if((kkk==0)||(kkk==2)||(kkk==4)||(kkk==6))
{
xh=0xe0; //换行颜色为黄色
xl=0x08;
yh=yh&0x9f; //将字体背景设为蓝色
}
else
;
clarm_buff[1]= (uchar)((baojingaddr>>8)&0x00ff ) ; //FM24C256片内地址高位字节
clarm_buff[2]= (uchar)(baojingaddr&0x00ff) ; //FM24C256片内地址低位字节
EIMSK&=~(1<<INT6);
//do
fhz=I2cRead(SLA2_W,SLA2_R, clarm_buff[1],clarm_buff[2],16);
//while(fhz==1);
for(c=0;c<16;c++)
baojing[c]=i2c_rd_buff[c] ; //
EIMSK|=(1<<INT6);
if(baojingaddr==0x0400) //到头
baojingaddr=0x4270 ; //调整
else
baojingaddr=baojingaddr-16 ; //调整
/****************从外部E2中读取气体类型**********************/
addr_gas=0x5c00;
addr_gas=addr_gas+baojing[0]*32+baojing[1]-1;
clarm_buff[1]= (uchar)((addr_gas>>8)&0x00ff ) ; //FM24C256片内地址高位字节
clarm_buff[2]= (uchar)(addr_gas&0x00ff) ; //FM24C256片内地址低位字节
EIMSK&=~(1<<INT6);
//do
fhz=I2cRead(SLA2_W,SLA2_R, clarm_buff[1],clarm_buff[2],1);
//while(fhz==1);
gas_type=i2c_rd_buff[0] ; //将读出的气体类型放入gas_type中
EIMSK|=(1<<INT6);
/***************从外部E2中读取浓度单位**************************/
addr_unit=0x6100;
addr_unit=addr_unit+baojing[0]*32+baojing[1]-1;
clarm_buff[1]= (uchar)((addr_unit>>8)&0x00ff ) ; //FM24C256片内地址高位字节
clarm_buff[2]= (uchar)(addr_unit&0x00ff) ; //FM24C256片内地址低位字节
EIMSK&=~(1<<INT6);
//do
fhz=I2cRead(SLA2_W,SLA2_R, clarm_buff[1],clarm_buff[2],1);
//while(fhz==1);
unit_chroma=i2c_rd_buff[0] ; //将读出的气体类型放入unit_chroma中
EIMSK|=(1<<INT6);
if(baojing[0]==0xff) //如果读出的数为0xff
{
switch(kkk)
{
case 0: juxing(0x90,0x00,0x04,0x50,0x01,0xe8,0x00,0x72); break; //第一行为空
case 1: juxing(0xb0,0x00,0x04,0x73,0x01,0xe8,0x00,0x95); break; //第二行为空
case 2: juxing(0x90,0x00,0x04,0x96,0x01,0xe8,0x00,0xb8); break; //第三行为空
case 3: juxing(0xb0,0x00,0x04,0xb9,0x01,0xe8,0x00,0xdb); break; //第四行为空
case 4: juxing(0x90,0x00,0x04,0xdc,0x01,0xe8,0x00,0xfe); break; //第五行为空
case 5: juxing(0xb0,0x00,0x04,0xff,0x01,0xe8,0x01,0x21); break; //第六行为空
case 6: juxing(0x90,0x00,0x05,0x22,0x01,0xe8,0x01,0x44); break; //第七行为空
case 7: juxing(0xb0,0x00,0x05,0x45,0x01,0xe8,0x01,0x67); break; //第八行为空
default: break;
}
}
else
{
temp1=baojing[0]/10+0x30; //转换器编号高位
temp2=baojing[0]%10+0x30; //转换器编号低位
temp3=baojing[1]/10+0x30; //探测器编号高位
temp4=baojing[1]%10+0x30; //探测器编号低位
fdbs(0x14); //放大
xtzb(xh,xl,yh,yl);
xszf(0x31,temp1); //显示转换器编号高位
xszf(0x31,temp2); //显示转换器编号低位
zhuanhuan7(0x40,0x00); //横坐标增加0x40,纵坐标不变
xtzb(xh,xl,yh,yl);
xszf(0x31,temp3); //显示探测器编号高位
xszf(0x31,temp4); //显示探测器编号低位
zhuanhuan7(0x40,0x00); //横坐标增加0x40,纵坐标不变
xtzb(xh,xl,yh,yl);
xszf(0x31,0x32); //2
xszf(0x31,0x30); //0
clock_deal(baojing[2]); //年
xszf(0x31,0x2f); //"/"
clock_deal(baojing[3]); //月
xszf(0x31,0x2f); //"/"
clock_deal(baojing[4]); //日
kong(0x31,0x01);
clock_deal(baojing[5]); //时
xszf(0x31,0x3a); //":"
clock_deal(baojing[6]); //分
xszf(0x31,0x3a); //":"
clock_deal(baojing[7]); //秒
zhuanhuan7(0x80,0x00); //横坐标增加0x80,纵坐标不变
xtzb(xh,xl,yh,yl);
if(baojing[8]==0x01)
{
fdbs(0x04);
xszf(0x34,0x5a); //低
xszf(0x34,0x3f); //报
}
else if(baojing[8]==0x02)
{
fdbs(0x04);
xszf(0x34,0x59); //高
xszf(0x34,0x3f); //报
}
else
;
zhuanhuan7(0x50,0x00); //横坐标增加0x50,纵坐标不变
xtzb(xh,xl,yh,yl);
fdbs(0x14);
temp=(uint)(baojing[9]);
temp=(temp<<8)+baojing[10]; //报警浓度
xianshi(temp);
unit_common(); //浓度单位判断显示
zhuanhuan7(0x50,0x00); //横坐标增加0x50,纵坐标不变
xtzb(xh,xl,yh,yl);
fdbs(0x04); //不放大
switch(gas_type)
{
case 0xff:
{
xszf(0x34,0xe2); //天
xszf(0x34,0xe3); //然
xszf(0x34,0x28); //气
}
break;
case 0x02:
{
xszf(0x34,0xf9); //液
xszf(0x34,0xfa); //化
xszf(0x34,0x28); //气
}
break;
case 0x03:
{
xszf(0x34,0xac); //煤
xszf(0x34,0xfa); //制
xszf(0x34,0x25); //气
}
break;
case 0x04:
{
xszf(0x34,0xf1); //毒
xszf(0x34,0xf2); //性
xszf(0x34,0x28); //气
xszf(0x34,0x29); //体
}
break;
case 0x05:
{
xszf(0x34,0xf3); //可
xszf(0x34,0xf4); //燃
xszf(0x34,0x28); //气
xszf(0x34,0x29); //体
}
break;
case 0x06:
{
xszf(0x34,0xf5); //有
xszf(0x34,0xf6); //机
xszf(0x34,0xf7); //溶
xszf(0x34,0xf8); //剂
}
break;
/*
case 0x07:
{
xszf(0x34,0xdd); //氨
xszf(0x34,0x28); //气
}
break;
case 0x08:
{
xszf(0x34,0xde); //硫
xszf(0x34,0xdb); //化
xszf(0x34,0xdf); //氢
}
break;
case 0x09:
{
xszf(0x34,0xe0); //其
xszf(0x34,0xe1); //它
}
break;
*/
default :
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -