📄 input.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 + -