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

📄 toucher2._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];         //探测器或联动模块选择字节段,按位起作用 


//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 + -