📄 toucher.c
字号:
#include "allhead.h"
/****************************变量声明********************************/
extern uchar realtimebuff[7];
extern uchar time_set[7];
extern uchar tx_buff[12]; //存放要发向转换器的数
//TWI 相关全局变量
extern uchar i2c_rd_buff[32]; //i2c读出的数最初存放的地方
extern uchar i2c_wt_buff[35]; //写
extern uchar fhz;
extern uchar canuse[4]; //转换器的投用情况 按位
extern uchar detuse[33][4]; //所有485节点的投用情况,0,1按位起作用
extern uchar det_link[33]; //探测器或联动模块选择字节段,按位起作用
extern uchar shoubao[9];
extern uchar firstuse1; //判断电源故障是不是第一次进入用
extern uchar firstuse2;
extern uchar firstuse3;
extern uchar firstuse4; //亏电
extern uchar hibao[32][4]; //高报
extern uchar lobao[32][4]; //低报
extern uchar detector[32][4]; //传感器
extern uchar communicate[32][4]; //通讯
extern struct
{
uchar bei; //备电
uchar shi; //市电
uchar cong; //从电
}error;
extern struct
{
uchar di[32][4]; //低报
uchar tan[32][4]; //探测器
uchar tong[32][4]; //通讯
uchar gao[32][4]; //高报
}rxerror;
//GAL门相关全局变量
extern uchar gal1data ;
extern uchar gal2data ; //继电器控制信号1,联动模块故障1,联动输出都为1
extern uchar gal3data ; //指示灯为共阳极的
extern uchar gal4data ;
extern uchar gal5data ;
extern uint baojingaddr;
extern uint guzhangaddr; //第一次取用的最新故障地址
extern uint guzhangaddr2; //已存住的最新故障地址
extern uint baojingaddr2;
extern uint onaddr2 ; //开关机用
extern uchar canuse[4];
extern uchar detuse[33][4]; //所有485节点的投用情况,0,1按位起作用
extern uchar zhongbuff[32][10]; // 一次接收的转换器的数
extern uint cuo1;
extern uint cuo2;
extern uint cuo3; // 实时界面用 实时报警,故障数
extern uint cuo4;
extern uchar keyc;
extern uchar gal1data;
extern uchar gal2data;
extern uchar gal3data;
extern uchar gal4data;
//extern uchar first_clarm[11]; //存放首次报警信息
extern uchar first_alarm;
extern uchar wunai;
extern uchar wunai2; //投用
extern uchar yure_flag;
extern uchar errorflag;
extern uchar can_cuo_flag[32];
extern uint realaddr2; //存RAM错误信息用
uchar flag_local; // 联动故障用
//系统坐标
uchar xh; //横坐标高字节
uchar xl; //横坐标低字节
uchar yh; //纵坐标高字节
uchar yl; //纵坐标高字节
//矩形的右下角坐标
uchar x2h; //横坐标高字节
uchar x2l; //横坐标低字节
uchar y2h; //纵坐标高字节
uchar y2l; //纵坐标高字节
//common use
uchar i;
uchar j;
//系统坐标转换后坐标
uint x;
uint y;
uchar biaozhi; //USART1接收中断数据标志
uchar key; //键值
uchar RXC_BUFF[15]; //触摸屏发送的数据
uchar jiemian; //界面标志
//开关机记录显示用
uint addre2; //外部E2的当前地址
uchar addre2hi; //地址高址
uchar addre2lo; //地址低址
uchar num_open=1; //存放开关机记录中的编号
uchar num_open2; //存放翻页后的第一个开关机记录编号
uchar data[16]; //存放外部E2中的开关机记录中信息
uchar baojing[16]; //存放外部E2中的报警记录信息
uchar guzhang[8]; //存放外部E2中的故障记录信息
uint chroma[16] ; //显示的浓度
uchar c[3]; //通道关联探测器编号及高低报情况
uint ccc=0; //等待CAN返回计数延时用
/********************************************************************/
uchar pass1[6]; //更改密码所存数组
uchar pass2[6]; //确认密码所存数组
uchar pass3[6]; //输入密码所存数组
uchar pass[6]; //存放E2中读出的密码
uchar pass4[6]={0x04,0x01,0x08,0x00,0x06,0x09}; //设定的超级密码
uchar time[22]; //存放时间设定后的值
uchar high[4]; //高报浓度
uchar low[4]; //低报浓度
uchar passage1[6]; //探测器高报关联的通道1
uchar passage2[6]; //探测器低报关联的通道2
//uchar passage3[4]; //通道3
//uchar passage4[4]; //通道4
uchar linkage1[2]; //存放控制外设界面中输入的转换器编号
uchar linkage2[2]; //存放控制外设界面中输入的探测器编号
uchar linkage[4]; //存放系统设置界面中输入的调零地址号
uchar biaoding[4]; //存放系统设置界面中输入的标定值
uchar old_can[2]; //原来转换器地址
uchar new_can[2]; //修改后转换器地址
uchar can[2]; //修改地址界面中can的地址
uchar old_det[2]; //原来探测器地址
uchar new_det[2]; //修改后探测器地址
uchar index_link1; //指向linkage1数组中的数
uchar index_link2; //指向linkage2数组中的数
uchar index_link; //指向linkage数组中的数
uchar bd; //指向biaoding数组中的数
//uchar send_buff[8];
//uchar recv_buff[8];
uchar p1; //对应old_can数组
uchar p2; //对应new_can数组
uchar p3; //对应can数组
uchar p4; //对应old_det数组
uchar p5; //对应new_det数组
uchar m1; //对应pass1数组
uchar m2; //对应pass2数组
uchar m3; //对应pass3数组
uchar m; //对应pass数组
uchar n; //对应time数组
uchar n1; //对应high数组
uchar n2; //对应low数组
uchar way1; //通道1标志
uchar way2; //通道2标志
//uchar way3; //通道3标志
//uchar way4; //通道4标志
uchar page; //翻页标志
uchar flag_can; //can标志
//uchar flag_sound; //按键音
uchar flag_print; //打印标志
uchar gas_type; //气体类型
uchar unit_chroma; //浓度单位
uchar info_det[4]; //存放高低报浓度转换后的值
uchar chro_bd[2]; //存放标定浓度
uchar choice; //选择
uchar regist; //注册
uchar denglu; //登录
uchar password; //判断是超级密码还是普通密码
uchar num_can; //can编号
uchar num_det; //节点编号
uchar num_det2; //已选择的节点的编号
uchar addr_can; //控制外设界面中转换器编号
uchar addr_can1; //探测器界面中高报关联的转换器编号
uchar addr_can2; //探测器界面中低报关联的转换器编号
uchar addr_can3; //系统设置界面中调零的转换器编号
//uchar addr_can3; //联动界面中通道3关联的转换器编号
//uchar addr_can4; //联动界面中通道4关联的转换器编号
uchar addr_det; //控制外设界面中探测器编号
uchar addr_det1; //探测器界面中高报关联的探测器编号
uchar link1; //探测器界面中高报关联的通道编号
uchar addr_det2; //探测器界面中低报关联的探测器编号
uchar link2; //探测器界面中低报关联的通道编号
uchar addr_det3; //系统设置界面调零的探测器编号
//uchar addr_det3; //联动界面中通道3关联的探测器编号
//uchar addr_det4; //联动界面中通道4关联的探测器编号
//uchar high_low1; //联动界面中通道1关联的高低报情况
//uchar high_low2; //联动界面中通道2关联的高低报情况
//uchar high_low3; //联动界面中通道3关联的高低报情况
//uchar high_low4; //联动界面中通道4关联的高低报情况
uchar channel; //存放通道的吸合断开情况
uchar cha_local; //存放本地通道的吸合断开情况
uchar state_cha;
//光标坐标
uchar X1H;
uchar X1L;
uchar Y1H;
uchar Y1L;
uchar X2H;
uchar X2L;
uchar Y2H;
uchar Y2L;
uint X1; //光标左上角横坐标
uint Y1; //光标左上角纵坐标
uint X2; //光标右下角横坐标
uint Y2; //光标右下角纵坐标
/************************转换函数*****************************/
//对颜色位进行处理的转换
void zhuanhuan1(void)
{
X1=(X1H&0x03); //将X1H,X1L转换成16位数X1,将高6位清零
X1=(X1<<8);
X1=X1+X1L;
X1H=(X1H&0xfc); //恢复X1H的高6位,低两位清零
}
void zhuanhuan2(void)
{
Y1=Y1H&0x03; //将Y1H,Y1L转换成16位数Y1,将高6位清零
Y1=Y1<<8;
Y1=Y1+Y1L;
Y1H=Y1H&0xfc; //恢复Y1H的高6位
}
void zhuanhuan3(void)
{
uchar x=0; //将16位数X1的高低位分离
X1L=X1; //低8位给X1L
x=X1>>8;
X1H=X1H|x; //高8位处理后给X1H
}
void zhuanhuan4(void)
{
uchar y=0; //将16位数Y1的高低位分离
Y1L=Y1; //将低8位给Y1L
y=(Y1>>8);
Y1H=(Y1H|y); //高8位处理后给Y1H
}
//颜色位没有处理的转换
void zhuanhuan(void)
{
x=xh;
x=x<<8;
x=x+xl; //将8位数xh,xl转换成16位数x,高位保持不变
y=yh;
y=y<<8;
y=y+yl;
}
void zhuanhuan5(void)
{
uchar x=0; //将16位数X2的高低位分离
X2L=X2; //低8位给X2L
x=X2>>8;
X2H=x; //高8位给X2H
}
void zhuanhuan6(void)
{
uchar y=0; //将16位数Y2的高低位分离
Y2L=Y2; //将低8位给Y2L
y=Y2>>8;
Y2H=y; //高8位给Y2H
}
void zhuanhuan7(uchar temp1,uchar temp2)
{
x=xh;
x=x<<8;
x=x+xl;
x=x+temp1; //报警界面中的位置转换
xl=x;
xh=x>>8;
y=yh;
y=y<<8;
y=y+yl;
y=y+temp2;
yl=y;
yh=y>>8;
}
/**************************坐标变化函数*****************************/
void zbzj(void) //液晶坐标增加
{
zhuanhuan1(); //8位数X1H,X1L转换为16位,高6位清零
zhuanhuan2(); //8位数Y1H,Y1L转换为16位,高6位清零
X1=X1+6;
X2=X1;
Y2=Y1+15;
zhuanhuan3(); //将16位数X1的高低位分离
zhuanhuan4(); //将16位数Y1的高低位分离
zhuanhuan5(); //将16位数X2的高低位分离
zhuanhuan6(); //将16位数Y2的高低位分离
}
void zbjs(void) //液晶坐标减少
{
zhuanhuan1(); //8位数X1H,X1L转换为16位,高6位清零
zhuanhuan2(); //8位数Y1H,Y1L转换为16位,高6位清零
X1=X1-6;
X2=X1;
Y2=Y1+15;
zhuanhuan3(); //将16位数X1的高低位分离
zhuanhuan4(); //将16位数Y1的高低位分离
zhuanhuan5(); //将16位数X2的高低位分离
zhuanhuan6(); //将16位数Y2的高低位分离
}
/************************************************************************************/
/****************************************显示****************************************/
/************************************************************************************/
/***********************************************************************/
/**************显示变量****************/
void xianshi(uint num)
{
uchar p=0,q=0;
uint temp[5];
uint temp1=0,temp2=0;
uint temp3=0;
temp2=num;
temp3=10000;
for(p=0;p<5;p++)
{
temp1=temp2/temp3;
temp2=temp2%temp3;
temp3=temp3/10;
temp[p]=temp1+0x30; //将要显示的数放在temp数组
}
//功能: 将一个uint型的数显示出来,但是第一个非零数字前的零要省略
for(p=0;p<4;p++)
{
if(temp[p]!=0x30)
break;
}
wdr();
for(q=0;q<p;q++)
{
xszf(0x31,0x20); //如果开始的数为零,则省略
}
for(q=p;q<5;q++)
{
xszf(0x31,temp[q]); //显示出部位零的数
}
}
/*********************************************************/
void menu(void) //菜单
{
wdr();
juxing(0xe0,0x00,0x04,0x00,0x00,0x50,0x00,0x2a); //(0x00,0x00,0x50,0x2a)
juxing(0xe0,0xa0,0x04,0x00,0x00,0xf0,0x00,0x2a); //(0xa0,0x00,0xf0,0x2a)
juxing(0xe1,0x40,0x04,0x00,0x01,0x90,0x00,0x2a); //(0x140,0x00,0x190,0x2a)
xtzb(0x00,0x0f,0x00,0x0d);
fdbs(0x04);
xszf(0x34,0x20); //查
xszf(0x34,0x21); //看
fdbs(0x14);
xszf(0x31,0x28);
xszf(0x31,0x58);
xszf(0x31,0x29);
xtzb(0x00,0xaf,0x00,0x0d);
fdbs(0x04);
xszf(0x34,0x22); //设
xszf(0x34,0x23); //置
wdr();
fdbs(0x14);
xszf(0x31,0x28);
xszf(0x31,0x59);
xszf(0x31,0x29);
xtzb(0x01,0x4f,0x00,0x0d);
fdbs(0x04);
xszf(0x34,0x24); //控
xszf(0x34,0x25); //制
fdbs(0x14);
xszf(0x31,0x28);
xszf(0x31,0x5a);
xszf(0x31,0x29);
}
void kong(uchar temp1,uchar temp2) //空格
{
uint temp=0;
for(temp=0;temp<temp2;temp++)
{
if(temp1==0x33) //如果是字符集3中的空格
fdbs(0x04); //不放大
else if(temp1==0x31) //如果是字符集1中的空格
fdbs(0x14); //放大1倍
else
NOP();
xszf(temp1,0x20); //显示空格
wdr();
}
}
/****************列表界面的第一行显示***************/
void bank1(void)
{
wdr();
xszf(0x34,0x26); //编
xszf(0x34,0x27); //号
kong(0x33,0x02);
xszf(0x34,0x2a); //浓
xszf(0x34,0x2b); //度
wdr();
kong(0x33,0x02);
xszf(0x34,0x34); //状
xszf(0x34,0x35); //态
}
/****************报警界面的第一行显示**************/
void bank2(void)
{
xszf(0x34,0xd6); //转
xszf(0x34,0xd7); //换
xszf(0x34,0xd8); //器
kong(0x33,0x01);
xszf(0x34,0x85); //探
xszf(0x34,0x86); //测
xszf(0x34,0x84); //器
kong(0x33,0x01);
xszf(0x34,0x3f); //报
xszf(0x34,0x40); //警
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -