⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toucher.c

📁 基于PIC单片机
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -