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

📄 toucher.c

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