📄 toucher2._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]; //探测器或联动模块选择字节段,按位起作用
//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 uchar keyc;
extern uchar gal1data;
extern uchar gal2data;
extern uchar gal3data;
extern uchar gal4data;
//系统坐标
extern uchar xh; //横坐标高字节
extern uchar xl; //横坐标低字节
extern uchar yh; //纵坐标高字节
extern uchar yl; //纵坐标高字节
//矩形的右下角坐标
extern uchar x2h; //横坐标高字节
extern uchar x2l; //横坐标低字节
extern uchar y2h; //纵坐标高字节
extern uchar y2l; //纵坐标高字节
//common use
extern uchar i;
extern uchar j;
//系统坐标转换后坐标
extern uint x;
extern uint y;
extern uchar biaozhi; //USART1接收中断数据标志
extern uchar key; //键值
extern uchar RXC_BUFF[15]; //触摸屏发送的数据
extern uchar jiemian; //界面标志
//开关机记录显示用
extern uint addre2; //外部E2的当前地址
extern uchar addre2hi; //地址高址
extern uchar addre2lo; //地址低址
extern uchar num_open; //存放开关机记录中的编号
extern uchar num_open2; //存放翻页后的第一个开关机记录编号
extern uchar data[16]; //存放外部E2中的开关机记录中信息
extern uchar baojing[16]; //存放外部E2中的报警记录信息
extern uchar guzhang[8]; //存放外部E2中的故障记录信息
extern uint chroma[16] ; //显示的浓度
extern uchar c[3]; //通道关联探测器编号及高低报情况
extern uint ccc; //等待CAN返回计数延时用
//uchar use_instance; //使用情况;
/********************************************************************/
extern uchar pass1[6]; //更改密码所存数组
extern uchar pass2[6]; //确认密码所存数组
extern uchar pass3[6]; //输入密码所存数组
extern uchar pass[6]; //存放E2中读出的密码
extern uchar time[22]; //存放时间设定后的值
extern uchar high[4]; //高报浓度
extern uchar low[4]; //低报浓度
extern uchar passage1[4]; //通道1
extern uchar passage2[4]; //通道2
//extern uchar passage3[4]; //通道3
//extern uchar passage4[4]; //通道4
extern uchar linkage1[2]; //存放控制外设界面中输入的转换器编号
extern uchar linkage2[2]; //存放控制外设界面中输入的探测器编号
extern uchar linkage[4]; //存放系统设置界面中输入的调零地址号
extern uchar old_can[2]; //原来转换器地址
extern uchar new_can[2]; //修改后转换器地址
extern uchar can[2]; //修改探测器界面中can的地址
extern uchar old_det[2]; //原来探测器地址
extern uchar new_det[2]; //修改后探测器地址
extern uchar index_link1; //指向linkage1数组中的数
extern uchar index_link2; //指向linkage2数组中的数
extern uchar index_link; //指向linkage数组中的数
extern uchar bd; //指向biaoding数组中的数
//uchar send_buff[8];
//uchar recv_buff[8];
extern uchar p1; //对应old_can数组
extern uchar p2; //对应new_can数组
extern uchar p3; //对应can数组
extern uchar p4; //对应old_det数组
extern uchar p5; //对应new_det数组
extern uchar m1; //对应pass1数组
extern uchar m2; //对应pass2数组
extern uchar m3; //对应pass3数组
extern uchar m; //对应pass数组
extern uchar n; //对应time数组
extern uchar n1; //对应high数组
extern uchar n2; //对应low数组
extern uchar way1; //通道1标志
extern uchar way2; //通道2标志
//extern uchar way3; //通道3标志
//extern uchar way4; //通道4标志
extern uchar page; //翻页标志
extern uchar flag_can; //can标志
//extern uchar flag_sound; //按键音
extern uchar flag_print; //打印标志
extern uchar gas_type; //气体类型
extern uchar unit_chroma; //浓度单位
extern uchar info_det[4]; //存放高低报浓度转换后的值
extern uchar choice; //选择
extern uchar regist; //注册
extern uchar denglu; //登录
extern uchar num_can; //can编号
extern uchar num_det; //节点编号
extern uchar num_det2; //已选择的节点的编号
extern uchar addr_can; //控制外设界面中转换器编号
extern uchar addr_can1; //联动界面中通道1关联的转换器编号
extern uchar addr_can2; //联动界面中通道2关联的转换器编号
//extern uchar addr_can3; //联动界面中通道3关联的转换器编号
//extern uchar addr_can4; //联动界面中通道4关联的转换器编号
extern uchar addr_det; //控制外设界面中探测器编号
extern uchar addr_det1; //联动界面中通道1关联的探测器编号
extern uchar addr_det2; //联动界面中通道2关联的探测器编号
//extern uchar addr_det3; //联动界面中通道3关联的探测器编号
//extern uchar addr_det4; //联动界面中通道4关联的探测器编号
//extern uchar high_low1; //联动界面中通道1关联的高低报情况
//extern uchar high_low2; //联动界面中通道2关联的高低报情况
//extern uchar high_low3; //联动界面中通道3关联的高低报情况
//extern uchar high_low4; //联动界面中通道4关联的高低报情况
extern uchar channel; //存放通道的吸合断开情况
extern uchar cha_local; //存放本地通道的吸合断开情况
extern uchar state_cha;
//光标坐标
extern uchar X1H;
extern uchar X1L;
extern uchar Y1H;
extern uchar Y1L;
extern uchar X2H;
extern uchar X2L;
extern uchar Y2H;
extern uchar Y2L;
extern uint X1; //光标左上角横坐标
extern uint Y1; //光标左上角纵坐标
extern uint X2; //光标右下角横坐标
extern uint Y2; //光标右下角纵坐标
//uchar first_clarm[11]; //存放首次报警信息
uint realaddr=0x3000; //实时地址
/******************************************************************
***********************打印*************************
**********************************************************/
//写打印函数
void write_print(uchar cmd)
{
while((PIND&0x80)==0x80)
; //如果忙,等待
GAL5ADDR=cmd; //输入命令
}
//命令打印函数
void cha_print(uchar temp1,uchar temp2)
{
write_print(temp1);
write_print(temp2);
}
//初始化打印机
void int_prt(void)
{
cha_print(0x1b,0x40); //初始化
cha_print(0x1b,0x31); //行间距6
write_print(0x06);
cha_print(0x1c,0x26); //设置汉字打印方式
}
//空格打印函数
void kong_print(uchar temp)
{
uchar kkk=0;
for(kkk=0;kkk<temp;kkk++)
write_print(0x20);
}
/*********************气体类型选择**********************/
void gas_choice(void)
{
// cha_print(0x1c,0x26); //设置汉字打印方式
switch(gas_type)
{
case 0xff:
{
cha_print(0xcc,0xec); //天
cha_print(0xc8,0xbb); //然
cha_print(0xc6,0xf8); //气
}
break;
case 0x02:
{
cha_print(0xd2,0xba); //液
cha_print(0xbb,0xaf); //化
cha_print(0xc6,0xf8); //气
}
break;
case 0x03:
{
cha_print(0xc3,0xba); //煤
cha_print(0xd6,0xc6); //制
cha_print(0xc6,0xf8); //气
}
break;
case 0x04:
{
cha_print(0xb6,0xbe); //毒
cha_print(0xd0,0xd4); //性
cha_print(0xc6,0xf8); //气
cha_print(0xcc,0xe5); //体
}
break;
case 0x05:
{
cha_print(0xbf,0xc9); //可
cha_print(0xc8,0xbc); //燃
cha_print(0xc6,0xf8); //气
cha_print(0xcc,0xe5); //体
}
break;
case 0x06:
{
cha_print(0xd3,0xd0); //有
cha_print(0xbb,0xfa); //机
cha_print(0xc8,0xdc); //溶
cha_print(0xbc,0xc1); //剂
}
break;
default :
break;
}
}
/***********************浓度单位选择**************************/
void unit_judge(void)
{
switch(unit_chroma) //浓度单位
{
case 0xff:
{
write_print(0x25); //%
write_print(0x4c); //L
write_print(0x45); //E
write_print(0x4c); //L
}
break;
case 0x02:
{
write_print(0x50); //P
write_print(0x50); //P
write_print(0x4d); //M
}
break;
case 0x03:
{
write_print(0x56); //V
write_print(0x4f); //O
write_print(0x4c); //L
}
break;
default:
break;
}
}
/***********************打印格式1*****************************/
void print1(uint num)
{
uchar p=0,q=0;
uchar 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]=(uchar)(temp1+0x30);
}
wdr();
//功能: 将一个uint型的数显示出来,但是第一个非零数字前的零要省略
for(p=0;p<4;p++)
{
if(temp[p]!=0x30)
break;
}
for(q=0;q<p;q++)
{
write_print(0x20);
}
for(q=p;q<5;q++)
{
write_print(temp[q]);
}
}
/***********************时间处理打印函数*********************/
void date_print(uchar temp) //时钟处理函数
{
uchar temp1=0;
uchar temp2=0;
temp1=temp>>4;
temp1=temp1+0x30;
write_print(temp1); //打印
temp2=temp&0x0f; //取年\月\日\时\分\秒的低四位
temp2=temp2+0x30;
write_print(temp2); //打印
}
/********************编号打印*******************/
void num_print(uchar temp)
{
uchar temp1=0;
uchar temp2=0;
temp1=temp/10+0x30; //编号高位
temp2=temp%10+0x30; //编号低位
write_print(temp1); //显示编号高位
write_print(temp2); //显示编号低位
}
/***********************报警记录打印***************************/
void clarm_print(void)
{
uchar a[16];
uchar c=0;
uchar kkk=0;
uint temp=0;
uint temp1=0;
uint addr_gas=0x5c00; //外部E2中存放气体类型的初始地址
uint addr_unit=0x6100; //外部E2中存放浓度单位的初始地址
uchar clarm_buff[17]; //取报警信息暂时用
temp1=baojingaddr+16;
if(temp1==0x4280) //到头
temp1=0x0400; //调整
int_prt();
for(kkk=0;kkk<8;kkk++)
{
wdr();
/********************************************************/
clarm_buff[1]= (uchar)((temp1>>8)&0x00ff ) ; //FM24C256片内地址高位字节
clarm_buff[2]= (uchar)(temp1&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++)
a[c]=i2c_rd_buff[c] ; //
EIMSK|=(1<<INT6);
if(temp1==0x4270) //到头
temp1=0x0400; //调整
else
temp1=temp1+16 ; //调整
/****************从外部E2中读取气体类型**********************/
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=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(a[0]==0xff) //如果外部E2中没有数,无操作
;
else
{
//气体类型
kong_print(0x08);
gas_choice(); //报警类型打印
write_print(0x0d); //换行
cha_print(0xc6,0xf8); //气
cha_print(0xb1,0xa8); //体
cha_print(0xc0,0xe0); //类
cha_print(0xd0,0xcd); //型
//cha_print(0x1b,0x36); //选择字符集1
write_print(0x3a); //:
write_print(0x0d); //换行
//浓度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -