📄 ir.c
字号:
#include "ir.h"
#include <avr/io.h>
#include <avr/interrupt.h>
#include "timer0.h"
/**********************************************************************
* Function Name result_out_control
* Function Desc 输出结果控制
* Return Value 无
* Parameter 继电器编号,继电器状态
* Version Date Editor Modification
* 1.0 2007/12/02 杨春华 做成
**********************************************************************/
#define MAX_COMPARE_MUNBER 6
#define MAX_CLEAR_NUMBER 3
void result_out_control(UCHAR num,UCHAR val)
{
switch(num)
{
case 0:
if(val == TRUE)
{
SETBIT(RESULT_OUT1_PORT,BIT(RESULT_OUT1));
result_led_control(0,FALSE);
relay1_hold_time_counter = 0;
relay1_hold_start_flag = 1;
}
else
{
CLRBIT(RESULT_OUT1_PORT,BIT(RESULT_OUT1));
result_led_control(0,TRUE);
}
break;
case 1:
if(val == TRUE)
{
SETBIT(RESULT_OUT2_PORT,BIT(RESULT_OUT2));
result_led_control(1,FALSE);
relay2_hold_time_counter = 0;
relay2_hold_start_flag = 1;
}
else
{
CLRBIT(RESULT_OUT2_PORT,BIT(RESULT_OUT2));
result_led_control(1,TRUE);
}
break;
case 2:
if(val == TRUE)
{
SETBIT(RESULT_OUT3_PORT,BIT(RESULT_OUT3));
result_led_control(2,FALSE);
relay3_hold_time_counter = 0;
relay3_hold_start_flag = 1;
}
else
{
CLRBIT(RESULT_OUT3_PORT,BIT(RESULT_OUT3));
result_led_control(2,TRUE);
}
break;
case 3:
if(val == TRUE)
{
SETBIT(RESULT_OUT4_PORT,BIT(RESULT_OUT4));
result_led_control(3,FALSE);
relay4_hold_time_counter = 0;
relay4_hold_start_flag = 1;
}
else
{
CLRBIT(RESULT_OUT4_PORT,BIT(RESULT_OUT4));
result_led_control(3,TRUE);
}
break;
default:
break;
}
}
/**********************************************************************
* Function Name result_led_control
* Function Desc 红外状态指示灯控制
* Return Value 无
* Parameter LED编号,LED状态
* Version Date Editor Modification
* 1.0 2007/12/02 杨春华 做成
**********************************************************************/
void result_led_control(UCHAR num,UCHAR val)
{
switch(num)
{
case 0:
if(val == FALSE)
{
SETBIT(RESULT_LED1_PORT,BIT(RESULT_LED1));
}
else
{
CLRBIT(RESULT_LED1_PORT,BIT(RESULT_LED1));
}
break;
case 1:
if(val == FALSE)
{
SETBIT(RESULT_LED2_PORT,BIT(RESULT_LED2));
}
else
{
CLRBIT(RESULT_LED2_PORT,BIT(RESULT_LED2));
}
break;
case 2:
if(val == FALSE)
{
SETBIT(RESULT_LED3_PORT,BIT(RESULT_LED3));
}
else
{
CLRBIT(RESULT_LED3_PORT,BIT(RESULT_LED3));
}
break;
case 3:
if(val == FALSE)
{
SETBIT(RESULT_LED4_PORT,BIT(RESULT_LED4));
}
else
{
CLRBIT(RESULT_LED4_PORT,BIT(RESULT_LED4));
}
break;
default:
break;
}
}
/**********************************************************************
* Function Name switch_control
* Function Desc HEF4066选通控制
* Return Value 无
* Parameter 通道编号,通道状态
* Version Date Editor Modification
* 1.0 2007/12/02 杨春华 做成
**********************************************************************/
void switch_control(UCHAR num,UCHAR val)
{
switch(num)
{
case 0x00:
if(val == TRUE)
{
SETBIT(R_SEL1_PORT,BIT(R_SEL1));
}
else
{
CLRBIT(R_SEL1_PORT,BIT(R_SEL1));
}
break;
case 0x01:
if(val == TRUE)
{
SETBIT(R_SEL2_PORT,BIT(R_SEL2));
}
else
{
CLRBIT(R_SEL2_PORT,BIT(R_SEL2));
}
break;
case 0x02:
if(val == TRUE)
{
SETBIT(R_SEL3_PORT,BIT(R_SEL3));
}
else
{
CLRBIT(R_SEL3_PORT,BIT(R_SEL3));
}
break;
case 0x03:
if(val == TRUE)
{
SETBIT(R_SEL4_PORT,BIT(R_SEL4));
}
else
{
CLRBIT(R_SEL4_PORT,BIT(R_SEL4));
}
break;
default:
break;
}
}
/**********************************************************************
* Function Name result_transact
* Function Desc 结果处理函数
* Return Value 结果计数值
* Parameter 无
* Version Date Editor Modification
* 1.0 2007/12/02 杨春华 做成
**********************************************************************/
void result_transact(volatile UCHAR *result)
{
UCHAR i;
UCHAR ir_flag = 0;
static UCHAR clear_enable = 0;
clear_enable++;
if(clear_enable == MAX_CLEAR_NUMBER)
{
clear_enable = 0;
if(GETBIT(FUN_SEL_PORT,FUN_SEL1))//四路各自工作
{
for(i = 0;i < 4;i++)
{
if(result[i] <= MAX_COMPARE_MUNBER && result[i]>=4)
{}
else
{
//if(1)
if(GETBIT(FUN_SEL_PORT,FUN_SEL2))
{
result_out_control(i,TRUE);
}
else
{
result_out_control(i,FALSE);
}
}
/*else
{
if(GETBIT(FUN_SEL_PORT,FUN_SEL2))
{
result_out_control(i,FALSE);
}
else
{
result_out_control(i,TRUE);
}
}*/
}
}
else//四路联合工作
{
ir_flag = 0x00;
for(i = 0;i < 4;i++)
{
if(result[i] == 0x00)
{
ir_flag = 0x01;
break;
}
}
if(GETBIT(FUN_SEL_PORT,FUN_SEL2))
{
result_out_control(1,FALSE);
result_out_control(2,FALSE);
result_out_control(3,FALSE);
}
else
{
result_out_control(1,TRUE);
result_out_control(2,TRUE);
result_out_control(3,TRUE);
}
if(ir_flag == 0x00)
{
if(GETBIT(FUN_SEL_PORT,FUN_SEL2))
{
result_out_control(0,TRUE);
}
else
{
result_out_control(0,FALSE);
}
}
else
{
if(GETBIT(FUN_SEL_PORT,FUN_SEL2))
{
result_out_control(0,FALSE);
}
else
{
result_out_control(0,TRUE);
}
}
}
//指示灯显示处理
/* for(i = 0;i < 4;i++)
{
if(result[i] == MAX_COMPARE_MUNBER && result[i]<= 11)
{
result_led_control(i,TRUE);
}
else
{
result_led_control(i,FALSE);
}
}*/
result[0] = 0x00;
result[1] = 0x00;
result[2] = 0x00;
result[3] = 0x00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -