📄 output.c
字号:
#include <avr/io.h>
#include "output.h"
#include "includes.h"
static u08 DAT1 = 0x00;//保持第一片165原状态
//设置IO口方向寄存器
void outputInit(void)
{
//设置输出:595 串行数据输出 SER
sbi(SER_DDR,SER_DAT);
//设置输出:595 串行时钟 CLK
sbi(SER_DDR,SER_SCLK);
//设置输出:595 锁存信号 RCLK
sbi(SER_DDR,SER_RCLK);
}
//向595输入一个字节,级联要一个一个输
void ser_out(u08 dat)
{
u08 i=0;
for(i=0; i<8;i++)
{
SER_PORT&=~BV(SER_SCLK);
_nop_();
if(dat & 0x80)
SER_PORT|=BV(SER_DAT);//发送 1
else
SER_PORT&=~BV(SER_DAT);//发送 0
SER_PORT|=BV(SER_SCLK);//发送写脉冲,上升沿发生移位
SER_PORT&=~BV(SER_SCLK);//发送写脉冲
dat<<=1;
}
}
//Control 595 output two bytes
void ser_output(void)
{
SER_PORT&=~BV(SER_RCLK);
_nop_();
_nop_();
_nop_();
SER_PORT|=BV(SER_RCLK);//上升沿将数据送到输出锁存器
SER_PORT&=~BV(SER_RCLK);
}
//控制继电器输出
void control_open(u08 open_real_1,u08 open_real_0 )
{
DAT1 = (DAT1 | open_real_0);
ser_out(open_real_1);
ser_out(DAT1);
ser_output();
}
//控制继电器关闭
void control_close(u08 close_real_1, u08 close_real_0 )
{
DAT1 = (DAT1 & (~close_real_0));
ser_out(close_real_1);
ser_out(DAT1);
ser_output();
}
void temperature(u08 num)
{
switch(num)
{
case SAMTYPE_WENSHIDU1 ://选择第一路温湿度
ser_out( R4052_DATA3_1);
ser_out( R4052_DATA3_0 | DAT1 );
break;
case SAMTYPE_WENSHIDU2 ://选择第二路温湿度
ser_out( R4052_DATA3_1);
ser_out( R4052_DATA3_0 | DAT1 );
break;
case SAMTYPE_WENSHIDU3 ://选择第三路温湿度
ser_out( R4052_DATA4_1);
ser_out( R4052_DATA4_0 | DAT1 );
break;
default:
break;
}
//Control 595 output two bytes
ser_output();
}
//选择48V电流
void A_48(void)
{
ser_out( R4051_DC_A_1);
ser_out( R4051_DC_A_0 | DAT1 );
//Control 595 output two bytes
ser_output();
}
//选择48V电压
void V_48(void)
{
ser_out( R4051_DC_V_1);
ser_out( R4051_DC_V_0 | DAT1 );
//Control 595 output two bytes
ser_output();
}
//选择220V电流
void A_220(void)
{
ser_out( R4051_AC_A_1);
ser_out( R4051_AC_A_0 | DAT1 );
//Control 595 output two bytes
ser_output();
}
//选择220V电压
void V_220(void)
{
ser_out( R4051_AC_V_1);
ser_out( R4051_AC_V_0 | DAT1 );
//Control 595 output two bytes
ser_output();
}
//检测温湿度
void do_temperature_humidity(u08 num)
{
s16 humidity1[1];//第一路温湿度
s16 temperature1[1];
s16 humidity2[1];//第二路温湿度
s16 temperature2[1];
s16 humidity3[1];//第三路温湿度
s16 temperature3[1];
//选择第一路温湿度
if(num == SAMTYPE_WENSHIDU1)
{
//取值,要除以100
if(write_mode(SHT_TEMPERATURE) == 0)
{
temperature1[0] = ShtMeasure();
if(write_mode(SHT_HUMIDITY) == 0)
{
humidity1[0] =ShtMeasure();
ShtCalculate( temperature1, humidity1 );
if(xRwenshiData[SAMTYPE_WENSHIDU1].DCwenshiDelete_FLAG!=0xAA)
{
xRwenshiData[SAMTYPE_WENSHIDU1].DCwenshiDelete_FLAG++;
if(xRwenshiData[SAMTYPE_WENSHIDU1].DCwenshiDelete_FLAG>1)
xRwenshiData[SAMTYPE_WENSHIDU1].DCwenshiDelete_FLAG=0xAA;
}
else
//温湿度还原、处理
{
//xRwenshiData[SAMTYPE_WENSHIDU1].DCwenshiducaiji_FLAG=0xAA;
input_sht(temperature1, humidity1 ,SAMTYPE_WENSHIDU1);
xRwenshiData[SAMTYPE_WENSHIDU1].DCwenshiDelete_FLAG=0x00;
}
// rprintf("\r\nTest temperature:%d",temperature[0]);
// rprintf("\r\nTest humidity :%d",humidity[0]);
}
else
ShtReset();
ShtInit();
}
else
ShtReset();
ShtInit();
}
//选择第二路温湿度
if(num == SAMTYPE_WENSHIDU2)
{
//读取温湿值,要除以100
if(write_mode(SHT_TEMPERATURE) == 0)
{
temperature2[0] = ShtMeasure();
if(write_mode(SHT_HUMIDITY) == 0)
{
humidity2[0] =ShtMeasure();
ShtCalculate( temperature2, humidity2 );
if(xRwenshiData[SAMTYPE_WENSHIDU2].DCwenshiDelete_FLAG!=0xAA)
{
xRwenshiData[SAMTYPE_WENSHIDU2].DCwenshiDelete_FLAG++;
if(xRwenshiData[SAMTYPE_WENSHIDU2].DCwenshiDelete_FLAG>1)
xRwenshiData[SAMTYPE_WENSHIDU2].DCwenshiDelete_FLAG=0xAA;
}
else
//温湿度还原、处理
{
// xRwenshiData[SAMTYPE_WENSHIDU2].DCwenshiducaiji_FLAG=0xAA;
input_sht(temperature2, humidity2 ,SAMTYPE_WENSHIDU2);
xRwenshiData[SAMTYPE_WENSHIDU2].DCwenshiDelete_FLAG=0x00;
}
// rprintf("\r\nTest temperature:%d",temperature[0]);
// rprintf("\r\nTest humidity :%d",humidity[0]);
}
else
ShtReset();
ShtInit();
}
else
ShtReset();
ShtInit();
}
//选择第三路温湿度
if( num == SAMTYPE_WENSHIDU3)
{
//读取温湿值,要除以100
if(write_mode(SHT_TEMPERATURE) == 0)
{
temperature3[0] = ShtMeasure();
if(write_mode(SHT_HUMIDITY) == 0)
{
humidity3[0] =ShtMeasure();
ShtCalculate( temperature3, humidity3);
if(xRwenshiData[SAMTYPE_WENSHIDU3].DCwenshiDelete_FLAG!=0xAA)
{
xRwenshiData[SAMTYPE_WENSHIDU3].DCwenshiDelete_FLAG++;
if(xRwenshiData[SAMTYPE_WENSHIDU3].DCwenshiDelete_FLAG>1)
xRwenshiData[SAMTYPE_WENSHIDU3].DCwenshiDelete_FLAG=0xAA;
}
else
//温湿度还原、处理
{
// xRwenshiData[SAMTYPE_WENSHIDU3].DCwenshiducaiji_FLAG=0xAA;
input_sht(temperature3, humidity3 ,SAMTYPE_WENSHIDU3);
xRwenshiData[SAMTYPE_WENSHIDU3].DCwenshiDelete_FLAG=0x00;
}
// rprintf("\r\nTest temperature1:%d",temperature1[0]);
// rprintf("\r\nTest humidity1 :%d",humidity1[0]);
}
else
ShtReset();
ShtInit();
}
else
ShtReset();
ShtInit();
}
}
/*void lingmindu(u08 num)
{
if(xROfenData[SAMTYPE_WENSHIDU1].DCDelete_FLAG!=0xAA)
{
xROfenData[SAMTYPE_WENSHIDU1].DCDelete_FLAG++;
if(xROfenData[SAMTYPE_WENSHIDU1].DCDelete_FLAG>1)
xROfenData[SAMTYPE_WENSHIDU1].DCDelete_FLAG=0xAA;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -