/********************************************************************************************************* * 模块名称:Sn74hc573.c * 摘 要:Key模块,进行独立按键初始化,以及按键扫描函数实现 * 当前版本:1.0.0 * 作 者:anycrying * 完成日期:2024年04月11日 * 内 容: * 注 意: ********************************************************************************************************** * 取代版本: * 作 者: * 完成日期: * 修改内容: * 修改文件: *********************************************************************************************************/ /********************************************************************************************************* * 包含头文件 *********************************************************************************************************/ #include "gd32e230x_conf.h" #include "Sn74hc573.h" #include "Relay.h" /********************************************************************************************************* * 宏定义 *********************************************************************************************************/ /********************************************************************************************************* * 枚举结构体 *********************************************************************************************************/ /********************************************************************************************************* * 内部变量定义 *********************************************************************************************************/ /********************************************************************************************************* * 内部函数声明 *********************************************************************************************************/ static void Config74hc573GPIO(void); //配置按键的GPIO /********************************************************************************************************* * 内部函数实现 *********************************************************************************************************/ /********************************************************************************************************* * 函数名称:Config74hc573GPIO * 函数功能:配置74hc573端口 * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ static void Config74hc573GPIO(void) { //使能RCU相关时钟 rcu_periph_clock_enable(LK_74hc573_OE_RCU); //使能GPIOA的时钟 rcu_periph_clock_enable(LK_74hc573_LE_RCU); //使能GPIOB的时钟 rcu_periph_clock_enable(CHK_JLINK_RCU); //使能GPIOB的时钟 gpio_mode_set(LK_74hc573_OE_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, LK_74hc573_OE); //配置PF6为输出 控制573的使能 gpio_output_options_set(LK_74hc573_OE_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LK_74hc573_OE); //设置GPIO输出模式及速度 //Disable_74hc573_Output; gpio_mode_set(LK_74hc573_LE_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN,LK_74hc573_LE); //配置锁存引脚为输出,输出低电平则保持缓存 gpio_output_options_set(LK_74hc573_LE_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,LK_74hc573_LE); //设置GPIO输出模式及速度 gpio_mode_set(CHK_JLINK_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, CHECK_JLINK_IN); //配置PC14为上拉输入,检测有下载器接入 BUFF_Data; } /********************************************************************************************************* * API函数实现 *********************************************************************************************************/ /********************************************************************************************************* * 函数名称:Init_74hc573 * 函数功能:初始化74hc573模块 * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ void Init_74hc573(void) { Config74hc573GPIO(); //配置74HC573的GPIO } /********************************************************************************************************* * 函数名称:Write_74hc573 * 函数功能:锁存输出数据 * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ void Write_74hc573(uint8_t Dev,uint16_t db) { uint16_t i = 0; uint16_t j = 0; uint16_t temp_d = 0x0000; uint16_t temp0 = 0x0000; uint16_t temp1 = 0x0000; // BUFF0_Data; // BUFF1_Data; // BUFF2_Data; // BUFF3_Data; temp_d = db; temp0 = temp_d & 0x0007;//低3位 temp0 = temp0 << 6;//变成高3位 temp0 = temp0 & 0x01c0;//高3位 temp1 = temp_d & 0x01c0;//高3位 temp1 = temp1 >> 6;//变成低3位 temp1 = temp1 & 0x0007;//低3位 temp_d &= 0x0038;//只保留中间3位 temp_d |= temp0; temp_d |= temp1; switch(Dev) { case LK_Relay_D: { // gpio_port_write(Data_Output_IO,temp_d); // for(i = 0;i < delay_t;i++); // LOCK1_Data; // for(i = 0;i < delay_t;i++); // BUFF1_Data; // for(i = 0;i < delay_t;i++); // temp_d = temp_d << 8; // gpio_port_write(Data_Output_IO,temp_d); // for(i = 0;i < delay_t;i++); // LOCK0_Data; // for(i = 0;i < delay_t;i++); // BUFF0_Data; break; } // case LK_FalseLed_D: // { // gpio_port_write(Data_Output_IO,temp_d); // for(i = 0;i < delay_t;i++); // LOCK3_Data; // for(i = 0;i < delay_t;i++); // BUFF3_Data; // for(i = 0;i < delay_t;i++); // temp_d = temp_d << 8; // gpio_port_write(Data_Output_IO,temp_d); // for(i = 0;i < delay_t;i++); // LOCK2_Data; // for(i = 0;i < delay_t;i++); // BUFF2_Data; // break; // } default: { BUFF_Data; // BUFF0_Data; // BUFF1_Data; // BUFF2_Data; // BUFF3_Data; break; } } } /********************************************************************************************************* * 函数名称:Chk_Jlink_conn * 函数功能:检测有没有连接JLINK * 输入参数:void * 输出参数:bool * 返 回 值:bool * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ bool Chk_Jlink_conn(void) { if(gpio_input_bit_get(CHK_JLINK_IO,CHECK_JLINK_IN) == 0) { return false; } else { return true; } }