/********************************************************************************************************* * 模块名称:Relay.c * 摘 要:Relay模块 * 当前版本:1.0.0 * 作 者:anycrying * 完成日期:2024年04月11日 * 内 容: * 注 意: ********************************************************************************************************** * 取代版本: * 作 者: * 完成日期: * 修改内容: * 修改文件: *********************************************************************************************************/ /********************************************************************************************************* * 包含头文件 *********************************************************************************************************/ #include "Main.h" #include "Relay.h" #include "Sn74hc573.h" /********************************************************************************************************* * 宏定义 *********************************************************************************************************/ /********************************************************************************************************* * 枚举结构体 *********************************************************************************************************/ /********************************************************************************************************* * 内部变量定义 *********************************************************************************************************/ uint16_t Relay_state = 0; /********************************************************************************************************* * 内部函数声明 *********************************************************************************************************/ static void ConfigRelayGPIO(void); //配置Relay的GPIO /********************************************************************************************************* * 内部函数实现 *********************************************************************************************************/ /********************************************************************************************************* * 函数名称:ConfigRelayGPIO * 函数功能:配置Relay的GPIO * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ static void ConfigRelayGPIO(void) { //使能RCU相关时钟 //rcu_periph_clock_enable(Data_Output_RCU); //gpio_mode_set(Data_Output_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN,DB_Out1 | DB_Out2 | DB_Out3 | DB_Out4 | DB_Out5 | DB_Out6 | DB_Out7 | DB_Out8);//设置GPIO模式 //gpio_output_options_set(Data_Output_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out1 | DB_Out2 | DB_Out3 | DB_Out4 | DB_Out5 | DB_Out6 | DB_Out7 | DB_Out8); //设置GPIO输出模式及速度 rcu_periph_clock_enable(Data_Output_RCU_A); rcu_periph_clock_enable(Data_Output_RCU_B); gpio_mode_set(Data_Output_IO_A, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out1); //???1 gpio_output_options_set(Data_Output_IO_A, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out1); //éè??GPIOê?3??£ê??°?ù?è gpio_bit_reset(Data_Output_IO_A, DB_Out1); //??DB_Out1??è?×′ì?éè???a1?±? gpio_mode_set(Data_Output_IO_B, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out2); //???1 gpio_output_options_set(Data_Output_IO_B, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out2); //éè??GPIOê?3??£ê??°?ù?è gpio_bit_reset(Data_Output_IO_B, DB_Out2); //??DB_Out1??è?×′ì?éè???a1?±? gpio_mode_set(Data_Output_IO_B, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out3); //???1 gpio_output_options_set(Data_Output_IO_B, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out3); //éè??GPIOê?3??£ê??°?ù?è gpio_bit_reset(Data_Output_IO_B, DB_Out3); //??DB_Out1??è?×′ì?éè???a1?±? gpio_mode_set(Data_Output_IO_B, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, DB_Out4); //???1 gpio_output_options_set(Data_Output_IO_B, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, DB_Out4); //éè??GPIOê?3??£ê??°?ù?è gpio_bit_reset(Data_Output_IO_B, DB_Out4); //??DB_Out1??è?×′ì?éè???a1?±? } /********************************************************************************************************* * API函数实现 *********************************************************************************************************/ /********************************************************************************************************* * 函数名称:InitRelay * 函数功能:初始化LED模块 * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ void InitRelay(void) { ConfigRelayGPIO(); //配置RELAY的GPIO } /********************************************************************************************************* * 函数名称:Relay1State * 函数功能:Relay1State模块,控制继电器和更新通道状态 * 输入参数:RLx:第x路继电器,st:继电器状态 * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ void Relayx_Onoff_state(uint8_t RLx,uint8_t st) { uint16_t temp0 = 0x0001; uint16_t temp1 = 0x0000; //uint16_t temp2 = 0x0000; temp0 = temp0 << RLx; temp1 = ~temp0; if(st == RELAY_ON) { Relay_state |= temp0; } else { Relay_state &= temp1; } /* temp0 = Relay_state & 0x0007;//低3位 temp0 = temp0 << 6;//变成高3位 temp1 = Relay_state & 0x01c0;//高3位 temp1 = temp1 >> 6;//变成低3位 Relay_state &= 0x0038;//只保留中间3位 Relay_state |= temp0; Relay_state |= temp1; */ }