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

📄 input.c

📁 AVRMEG32编写的一个项目代码,里面包含一般应用的模块.
💻 C
字号:
//#include <avr/io.h>
//#include "input.h"
#include "includes.h"
/*
//发送标志
//空开1跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK1_TX;
//空开2跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK2_TX;
//空开3跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK3_TX ;
//空开4跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK4_TX ;
//空开5跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK5_TX ;
//空开6跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK6_TX ;
//蓄电池跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK7_POWER_TX ;
//防雷空开跳匝发送标志 0--未发送,1--已发送
u08 flag_GAOJING_KK8_FL_TX ;
//列告警发送标志 0--未发送,1--已发送
u08 flag_GAOJING_LIE_TX;
//烟雾告警发送标志 0--未发送,1--已发送
u08 flag_GAOJING_YW_TX;
//进水告警发送标志 0--未发送,1--已发送
u08 flag_GAOJING_JS_TX ;
//电源仓门禁发送标志 0--未发送,1--已发送
u08 flag_GAOJING_MJ1_TX ;
//配线仓门禁发送标志 0--未发送,1--已发送
u08 flag_GAOJING_MJ2_TX;
//电池仓门禁发送标志 0--未发送,1--已发送
u08 flag_GAOJING_MJ3_TX;
*/
/*
//采样灵敏度标志
//空开1跳匝标志
u08 flag_GAOJING_KK1 = 0;
//空开2跳匝标志
u08 flag_GAOJING_KK2 = 0;
//空开3跳匝标志
u08 flag_GAOJING_KK3 = 0;
//空开4跳匝标志
u08 flag_GAOJING_KK4 = 0;
//空开5跳匝标志
u08 flag_GAOJING_KK5 = 0;
//空开6跳匝标志
u08 flag_GAOJING_KK6 = 0;
//蓄电池跳匝标志
u08 flag_GAOJING_KK7_POWER = 0;
//防雷空开跳匝标志
u08 flag_GAOJING_KK8_FL = 0;
//列告警标志
u08 flag_GAOJING_LIE = 0;
//烟雾告警标志
u08 flag_GAOJING_YW = 0;
//进水告警标志
u08 flag_GAOJING_JS = 0;
//电源仓门禁标志
u08 flag_GAOJING_MJ1 = 0;
//配线仓门禁标志
u08 flag_GAOJING_MJ2 = 0;
//电池仓门禁标志
u08 flag_GAOJING_MJ3 = 0;
*/

//设置IO口方向寄存器
void inputInit(void)
{
	//设置输入:165 串行数据输出 QH
 	sbi(INPUT_PORT, INPUT_DS);
	cbi(INPUT_DDR, INPUT_DS);

	//设置输出:165 串行时钟 CLK
	sbi(INPUT_DDR, INPUT_CLK);
	
	//设置输出:165 锁存信号 SH/LD
	sbi(INPUT_PORT, INPUT_LD);
	sbi(INPUT_DDR, INPUT_LD);
}


//读取165一个字节
/*u08 inputReadByte(void)
{
	unsigned char val = 0;
	
	INPUT_PORT &= ~(1 << INPUT_LD);	//脉冲锁存74HC165并行数据开始
	_nop_();					//延时 
	INPUT_PORT |=  (1 << INPUT_LD);	//脉冲锁存74HC165并行数据结束
	for(int i = 8; i > 0; i --) 
	{ 
		val <<= 1; 
		INPUT_PORT &= ~(1 << INPUT_CLK);	//发送读脉冲
		INPUT_PORT |=  (1 << INPUT_CLK);	//发送读脉冲
		//if (!(INPUT_PIN & (1 << INPUT_DS)))//低电平++
		if ((INPUT_PIN & (1 << INPUT_DS)))
			val ++;
	} 
	return val;	
}
*/
//读取165两个字节(级联)	
u16 inputReadWord(void)
{
	u16 val = 0;
	INPUT_PORT &= ~(1 << INPUT_LD);	//脉冲锁存74HC165并行数据开始
	_nop_();				    	//延时
	INPUT_PORT |=  (1 << INPUT_LD);	//脉冲锁存74HC165并行数据结束
	for(int i = 16; i > 0; i --) 
	{ 
		val <<= 1; 
		INPUT_PORT &= ~(1 << INPUT_CLK);	//发送读脉冲 
		INPUT_PORT |=  (1 << INPUT_CLK);	//发送读脉冲
//	if (!(INPUT_PIN & (1 << INPUT_DS)))     //低电平++
	if ((INPUT_PIN & (1 << INPUT_DS)))
	    val ++;
	} 
	return val;	
}


/*//165输入信息解析,连续两次采集告警存在,确认告警,连续两次告警不存在,确认告警恢复
void happeninput(void)
{   //空开1
	if((inputReadWord() | GAOJING_KK1) == GAOJING_KK1)
	{
 	    if(flag_GAOJING_KK1 < 3)
	        flag_GAOJING_KK1+=1;
	}
	else
		 flag_GAOJING_KK1 = 0;
	//	 flag_GAOJING_KK1_TX = 0;
	//空开2
    if((inputReadWord() | GAOJING_KK2) == GAOJING_KK2)
	{
        if(flag_GAOJING_KK2 < 3)
	        flag_GAOJING_KK2+=1;
	}
	else
    	flag_GAOJING_KK2 = 0;
  //  	flag_GAOJING_KK2_TX = 0;
    //空开3
	if((inputReadWord() | GAOJING_KK3) == GAOJING_KK3)
	{
 	    if(flag_GAOJING_KK3 < 3)
		    flag_GAOJING_KK3+=1;
	}
 	else
  		flag_GAOJING_KK3 = 0 ;
  //		flag_GAOJING_KK3_TX = 0;
    //空开4
    if((inputReadWord() | GAOJING_KK4) == GAOJING_KK4)
	{
 	    if(flag_GAOJING_KK4 < 3)
			flag_GAOJING_KK4+=1;
	}
	else
		flag_GAOJING_KK4 = 0;
//		flag_GAOJING_KK4_TX = 0;
	    //空开5
    if((inputReadWord() | GAOJING_KK5) == GAOJING_KK5)
	{
 	    if(flag_GAOJING_KK5 < 3)
			flag_GAOJING_KK5+=1;
	}
	else
		flag_GAOJING_KK5 = 0;
	//	flag_GAOJING_KK5_TX = 0;
    //空开6
	if((inputReadWord() | GAOJING_KK6) == GAOJING_KK6)
	{
 	    if(flag_GAOJING_KK6 < 3)
		    flag_GAOJING_KK6+=1;
	}
	else
		flag_GAOJING_KK6 = 0;
	//	flag_GAOJING_KK6_TX = 0;
	//蓄电池
    if((inputReadWord() | GAOJING_KK7_POWER) == GAOJING_KK7_POWER)
	{
	     if(flag_GAOJING_KK7_POWER < 3)
//		 	flag_GAOJING_KK7_POWER+=1;
	}
	else
		flag_GAOJING_KK7_POWER = 0;
//		flag_GAOJING_KK7_POWER_TX = 0;
    //防雷空开
	if((inputReadWord() | GAOJING_KK8_FL) == GAOJING_KK8_FL)
	{
 	    if(flag_GAOJING_KK8_FL < 3)
			flag_GAOJING_KK8_FL+=1;
	}
	else
		flag_GAOJING_KK8_FL = 0;
//		flag_GAOJING_KK8_FL_TX = 0;
    //列告警
	if((inputReadWord() | GAOJING_LIE) == GAOJING_LIE)
	{
 	    if(flag_GAOJING_LIE < 3)
		    flag_GAOJING_LIE+=1;
	}
	else
		flag_GAOJING_LIE = 0;
//		flag_GAOJING_LIE_TX = 0;
    //烟雾告警
	if((inputReadWord() | GAOJING_YW) == GAOJING_YW)
	{
	     if(flag_GAOJING_YW < 3)
		     flag_GAOJING_YW+=1;
	}
	else
		flag_GAOJING_YW = 0;
//		flag_GAOJING_YW_TX = 0;
    //进水告警
	if((inputReadWord() | GAOJING_JS) == GAOJING_JS)
	{
 	    if(flag_GAOJING_JS < 3)
		    flag_GAOJING_JS+=1;
	}
	else
		flag_GAOJING_JS = 0;
//		flag_GAOJING_JS_TX = 0;
	//电源仓门禁
	if((inputReadWord() | GAOJING_MJ1) == GAOJING_MJ1)
	{
	     if(flag_GAOJING_MJ1 < 3)
	    	flag_GAOJING_MJ1+=1;
	}
	else
		flag_GAOJING_MJ1 = 0;
//	    flag_GAOJING_MJ1_TX = 0;
 	//配线仓门禁
	if((inputReadWord() | GAOJING_MJ2) == GAOJING_MJ2)
	{
	     if(flag_GAOJING_MJ2 < 3)
		     flag_GAOJING_MJ2+=1;
	}
	else
		flag_GAOJING_MJ2 = 0;
//		flag_GAOJING_MJ2_TX = 0;
	//电池仓门禁
	if((inputReadWord() | GAOJING_MJ3) == GAOJING_MJ3)
	{
	     if(flag_GAOJING_MJ3 < 3)
			flag_GAOJING_MJ3+=1;
	}
	else
		flag_GAOJING_MJ3 = 0;
//		flag_GAOJING_MJ3_TX = 0;
}
*/
//确认告警信息并发送
/*void getinput(void)
{
	  if((flag_GAOJING_KK1 == 2) && (flag_GAOJING_KK1_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK1 == 2) && (flag_GAOJING_KK1_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK2 == 2) && (flag_GAOJING_KK2_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK3 == 2) && (flag_GAOJING_KK3_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK4 == 2) && (flag_GAOJING_KK4_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK5 ==2) && (flag_GAOJING_KK5_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK6 == 2) && (flag_GAOJING_KK6_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK7_POWER == 2) && (flag_GAOJING_KK7_POWER_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_KK8_FL ==2) && (flag_GAOJING_KK8_FL_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_LIE == 2) && (flag_GAOJING_LIE_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_YW == 2) && (flag_GAOJING_YW_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_JS == 2) && (flag_GAOJING_JS_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_MJ1 == 2) && (flag_GAOJING_MJ1_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_MJ2 == 2) && (flag_GAOJING_MJ2_TX == 0))
 	 {
		//todo TX
	 }
	 if((flag_GAOJING_MJ3 == 2) && (flag_GAOJING_MJ3_TX == 0))
 	 {
		//todo TX
	 }
}*/

//u08 TXinput(void)
//{
 //todo
//}

//温湿度还原处理函数
void input_sht(s16 *p_temperature, s16 *p_humidity , u08 num)
{
     s08  ustp;
     u08  umtp;
     //主设备仓
	 if(num == SAMTYPE_WENSHIDU1)
	 {
		 ustp = (*p_temperature)/100;//判断是否小于0
		 umtp = (*p_humidity)/100;//获取湿度
		 if(ustp > 0)
		     xRwenshiData[SAMTYPE_WENSHIDU1].DCWValue =ustp;//获取温度
		 else
		     xRwenshiData[SAMTYPE_WENSHIDU1].DCWValue = abss(ustp);//获取温度
         fuhao(ustp,1);//符号
		 Display_8x16Int(60,1,xRwenshiData[SAMTYPE_WENSHIDU1].DCWValue,3,0);
   		 xRwenshiData[SAMTYPE_WENSHIDU1].DCHValue = umtp;
   		 Display_8x16Int(96,1,xRwenshiData[SAMTYPE_WENSHIDU1].DCHValue,3,0);
		 if(ustp <= (DO_CHANGE - 5) )
		 {
			 //关闭热交换
		     control_close(REAL_3_1,REAL_3_0);
		     //关闭制冷
			 control_close(REAL_0_1,REAL_0_0);
             if(ustp <= (DO_HOT ))
				 //打开制热
				 control_open(REAL_2_1,REAL_2_0);
             if(ustp >= (DO_HOT + 5 ))
             //关闭制热
				 control_close(REAL_2_1,REAL_2_0);
         }
         else
	     if(ustp >= (DO_CHANGE ))
         {
			 //打开热交换
			 control_open(REAL_3_1,REAL_3_0);
             if(ustp >= DO_COOL )
			 //打开制冷
			     control_open(REAL_0_1,REAL_0_0);
			 else
	  	         if(ustp <= (DO_COOL - 5) )
					 //关闭制冷
	                 control_close(REAL_0_1,REAL_0_0);
		  }
       if( umtp  <=  ( D0_HUMIDITY_HOTCOOL - 5))
			//关闭空气循环
	         control_close(REAL_4_1,REAL_4_0);
       if( umtp >=  D0_HUMIDITY_HOTCOOL )
			    //打开空气循环
             control_open(REAL_4_1,REAL_4_0);
	 }
      //电池仓
	  if(num == SAMTYPE_WENSHIDU2)
      {
          ustp = (*p_temperature)/100;//判断是否小于0
          umtp = (*p_humidity)/100;//获取湿度
		  if(ustp > 0)
		     xRwenshiData[SAMTYPE_WENSHIDU2].DCWValue =ustp;//获取温度
	      else
		     xRwenshiData[SAMTYPE_WENSHIDU2].DCWValue = abss(ustp);//获取温度
          fuhao(ustp,3);//符号
		  Display_8x16Int(60,3,xRwenshiData[SAMTYPE_WENSHIDU2].DCWValue,3,0);
   		  xRwenshiData[SAMTYPE_WENSHIDU2].DCHValue = umtp;
   		  Display_8x16Int(96,3,xRwenshiData[SAMTYPE_WENSHIDU2].DCHValue,3,0);
		  if(ustp <=( D0_HUMIDITY-5))
			//关闭空气循环
	         control_close(REAL_4_1,REAL_4_0);
          if(umtp >= D0_HUMIDITY)
			    //打开空气循环
             control_open(REAL_4_1,REAL_4_0);
      }
//配线仓
	  if(num == SAMTYPE_WENSHIDU3)
      {
		  ustp = (*p_temperature)/100;//判断是否小于0
          xRwenshiData[SAMTYPE_WENSHIDU3].DCHValue = (*p_humidity)/100;//获取湿度
		  if(ustp > 0)
		     xRwenshiData[SAMTYPE_WENSHIDU3].DCWValue =ustp;//获取温度
	      else
		     xRwenshiData[SAMTYPE_WENSHIDU3].DCWValue = abss(ustp);//获取温度
          fuhao(ustp,5);//符号
		  Display_8x16Int(60,5,xRwenshiData[SAMTYPE_WENSHIDU3].DCWValue,3,0);
   		  Display_8x16Int(96,5,xRwenshiData[SAMTYPE_WENSHIDU3].DCHValue,3,0);
	  }
}
//符号
void fuhao(s08 ustp,u08 hang)
{
     if(ustp < 0)
	     Lcd_Printf_12(59,hang,PSTR("-"),0);
     else
	     Lcd_Printf_12(59,hang,PSTR(" "),0);
     Lcd_Printf_12(84,hang,PSTR("C"),0);
     Lcd_Printf_12(120,hang,PSTR("%"),0);
}

//取绝对值
u08 abss(s08 ustp)
{
   if(ustp < 0)
	   ustp=abs(ustp);
   return(ustp);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -