// #if 0 // /********************************************************* // *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd // *文件名: main.c // *作 者: AE Team // *版 本: V1.00 // *日 期: 2021/05/13 // *描 述: GPIO模块示例程序 // * 定时扫描GPIO_PA2的电平状态,高电平点亮LED1,低电平熄灭LED1 // *备 注: // *本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。 // **********************************************************/ // #include "main.h" // #include //定义布尔 // // extern ozone_message_t ozone_message; // extern zkey_module_t key_module; // bool rgb_flicker_state = false; // extern rgb_message_t rgb_message; // /*********************************************************************************************************************** // * =====================================================看门狗====================================================== // ** // ***********************************************************************************************************************/ // void iwdt_init(void) { // /** // * @brief 看门狗介绍:当计数到0时,窗口计数器+1 // * 当窗口计数为“2”的时候,产生中断 // * 当窗口计数器为“4”的之前没有进行喂狗操作,产生复位 // * // */ // IWDT_InitStruType x; // x.WDT_Tms = 4000; // x.WDT_IE = Enable; /* IWDT中断使能 */ // x.WDT_Rst = Enable; /* IWDT复位使能 */ // x.WDT_Clock = IWDT_CLOCK_WDT; /* LRC */ // IWDT_Init(&x); // /* 使能IWDT */ // IWDT_Enable(); // } // void feed_iwdt(void) { // //喂狗 // if (0x01 == IWDT_GetFlagStatus()) //产生中断 // { // IWDT_Clear(); // // printf("喂狗\r\n"); // } // } // //############### 测试一下看门狗 ##############// // /** // * @brief 上电臭氧工作情况,设备中设置有开关机按键,所以外部上电后,不让设备工作 // * // */ // void power_on_ozone_working_status(void) { // // PWM频率1Khz,占空比0,占空比低有效,设置占空比为100,pwm一直输出低电平 // HOOK_pwm_module_set_pwm_duty(1, 100); // light_module_set_timing_light_mode(CLOSE_ALL_LED); // light_module_set_rgb_mode(RGB_COLOR_RED); // port_fan_set(false); //打开你风扇 // } // /*********************************************************************************************************************** // * ======================================================主函数======================================================= // ** // ***********************************************************************************************************************/ // int main(void) { // HRC_Config(Enable, SCU_HRC_48M, Enable); //时钟源SCU_CLK_HRC // SystemInit(); // DeviceClockAllEnable(); //打开所有外设时钟 // User_SysTickInit(); //滴答定时器初始化为(配置为1ms中断) // SysTick_Enable(); // uart0_init(); // gpio_init(); // zkey_init(&key_module); // t16n0_1_init(); //配置PA4输出pwm // // iwdt_init(); // power_on_ozone_working_status(); // // power_on_ozone_work_state(); //上电工作情况 // // ADCInit("A",4); // // printf("Initialization completed\r\n"); // while (1) { // // port_do_debug_light_state(); // port_key_state(); // // if (get_ozone_starting_up_state() == true) { //开机中 // // // if (ozone_message.ozone_work_state == 2) // // // is_ozone_work_time_over(); // // // if (ozone_message.ozone_interva_state == true) { // // // set_rgb_flicker(); //间歇状态下rgb亮3灭1 // // // is_ozone_interva_time_over(); // // // } // // pwm_module_loop(); // // if (rgb_message.rgb_flicker_mode == true) { // // process_rgb_flicker_mode(); // // rgb_message.already_set_rgb_mode = false; // // } else if (rgb_message.rgb_flicker_mode == false) { // // if (rgb_message.already_set_rgb_mode == false) // // light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb); // // rgb_message.already_set_rgb_mode = true; // // } // adc_loop_gather(); // // } else if (get_ozone_starting_up_state() == false) { //关机 // // } // // test_iwdt(); // // feed_iwdt(); //当产生中断的时候进行喂狗操作 // } // } // #endif // #include //定义布尔 // #include "main.h" // #define INTERVAL_PERIOD 20000 // #define TIMING_TICK 20000 // uint32_t g_interval_period = 20000; //现在项目需求只有一种间歇时间,所以这里用这个变量来修改间歇的周期 // uint32_t g_interval_duty = 100; // bool starting_up_state = false; // RGB_MODE_T now_rgb_color; // RGB_MODE_T shutdown_front_rgb_color; // uint32_t timing_time; // bool timing_function_enable_falg; // static uint32_t timing_shutdown_begin_ticket = 0; // uint8_t now_pwm_duty; //记录硬件的pwm占空比 // extern uint32_t begin_ticket; // /** // * @brief 间歇功能当定时功能使能的时候,间歇功能开始工作,当定时功能未使能时间歇功能不工作 // * // */ // void update_interval_period_duty(void) { // static uint8_t interval_key_press_count = 0; // interval_key_press_count++; // if (interval_key_press_count == 1) { // printf("duty 50\r\n"); // g_interval_period = INTERVAL_PERIOD; // g_interval_duty = 50; // } else if (interval_key_press_count == 2) { // printf("duty 100\r\n"); // interval_key_press_count = 0; // g_interval_period = timing_time; // g_interval_duty = 100; // } // ozone_pwm_control_module_set_pwm_output_1(g_interval_period, g_interval_duty); // } // /** // * @brief 根据现在的时间进行更改 // * // */ // void updae_led_light_mode(void) { // if ((timing_time / TIMING_TICK) == 0) { // light_module_set_timing_light_mode(CLOSE_ALL_LED); // } else if ((timing_time / TIMING_TICK) == 1) { // light_module_set_timing_light_mode(OPEN_ONE_LED); // } else if ((timing_time / TIMING_TICK) == 2) { // light_module_set_timing_light_mode(OPEN_TWO_LED); // } else if ((timing_time / TIMING_TICK) == 3) { // light_module_set_timing_light_mode(OPEN_THREE_LED); // } else if ((timing_time / TIMING_TICK) == 4) { // light_module_set_timing_light_mode(OPEN_FOUR_LED); // } // } // void process_gearskey_press_even_1(void) { // static uint8_t gearskey_press_count; // gearskey_press_count++; // if (gearskey_press_count == 1) { // update_pwm_output_duty(50); // update_rgb_color(RGB_COLOR_BLUE); // } else if (gearskey_press_count == 2) { // update_pwm_output_duty(25); // update_rgb_color(RGB_COLOR_GERRN); // } else if (gearskey_press_count == 3) { // gearskey_press_count = 0; // update_pwm_output_duty(100); // update_rgb_color(RGB_COLOR_RED); // } // } // void update_rgb_color(uint8_t color) { // if (color == RGB_CLOSE) { // now_rgb_color = RGB_COLOR_RED; // light_module_set_rgb_mode(RGB_CLOSE); // } else if (color == RGB_COLOR_RED) { // now_rgb_color = RGB_COLOR_RED; // light_module_set_rgb_mode(RGB_COLOR_RED); // } else if (color == RGB_COLOR_BLUE) { // now_rgb_color = RGB_COLOR_BLUE; // light_module_set_rgb_mode(RGB_COLOR_BLUE); // } else if (color == RGB_COLOR_GERRN) { // now_rgb_color = RGB_COLOR_GERRN; // light_module_set_rgb_mode(RGB_COLOR_GERRN); // } // } // void update_pwm_output_duty(uint8_t pwm_duty) { // if (pwm_duty == 100) { // ozone_pwm_control_module_set_pwm_output_2(1, 100, g_interval_period, g_interval_duty); // now_pwm_duty = 100; // } else if (pwm_duty == 50) { // ozone_pwm_control_module_set_pwm_output_2(1, 50, g_interval_period, g_interval_duty); // now_pwm_duty = 50; // } else if (pwm_duty == 25) { // ozone_pwm_control_module_set_pwm_output_2(1, 25, g_interval_period, g_interval_duty); // now_pwm_duty = 25; // } else if (pwm_duty == 0) { // ozone_pwm_control_module_set_pwm_output_2(1, 0, g_interval_period, g_interval_duty); // now_pwm_duty = 0; // } // } // /*********************************************************************************************************************** // * =====================================================开机关机====================================================== * // ***********************************************************************************************************************/ // void shutdown(void) { // starting_up_state = false; // shutdown_front_rgb_color = now_rgb_color; // ozone_pwm_control_module_set_pwm_output_2(1, 0, 0, 0); // update_rgb_color(RGB_CLOSE); // light_module_set_timing_light_mode(CLOSE_ALL_LED); // port_fan_set(false); //关闭风扇 // } // void starting_up(void) { // // starting_up_state = true; // // // PWM频率1Khz,占空比0,占空比低有效,设置占空比为100,pwm一直输出低电平 // // if (shutdown_front_rgb_color == RGB_CLOSE) { // // update_rgb_color(RGB_COLOR_RED); // // } else { // // update_rgb_color(now_rgb_color); // last_rgb_mode // // } // // if (now_pwm_duty == 0) { // // now_pwm_duty = 100; // // } // // update_pwm_output_duty(now_pwm_duty); // port_fan_set(true); //打开你风扇 // } // void process_switchkey(void) { // static bool switchkey_press_count = 0; // switchkey_press_count = !switchkey_press_count; // if (switchkey_press_count) { //开机 // starting_up(); // } else { //关机 // shutdown(); // } // } // /*********************************************************************************************************************** // * =================================================按键初始化和处理================================================== * // ***********************************************************************************************************************/ // static zkey_t s_keys[] = { // ZKEY_INIT("timerkey", port_gpio_get_timer_key_state), // ZKEY_INIT("gearskey", port_gpio_get_gears_key_state), // ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state), // ZKEY_INIT("switchkey", port_gpio_get_switch_key_state), // }; // zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey); // void onkey(zkey_t *key, zkey_state_t key_state) { // /** // * @brief 判断每个按键触发的状态 // * // * @param key // * @param key_state // */ // if (starting_up_state) { //开机中 // if (key == &s_keys[0] && //定时按键 // key->cur_state == zks_keep && //长按 // !key->hasProcessed && //没有被处理过 // key->keep_state_count >= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) //按下持续时间大于3s // { // key->hasProcessed = true; // } else if (key == &s_keys[0] && //定时按键 // key->cur_state == zks_falling_edge && //下降沿触发 // !key->hasProcessed && key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) //小于3s // { // key->hasProcessed = true; // printf("key0 zks_falling_edge\r\n"); // update_timing_time(); // updae_led_light_mode(); // } else if (key == &s_keys[1] && //高低档位选择 // key->cur_state == zks_rising_edge && // // !key->hasProcessed && // // key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { // key->hasProcessed = true; // printf("key1 zks_rising_edge\r\n"); // // update_rgb_mode(0, now_rgb_mode); // // update_pwm_output_duty(0); // process_gearskey_press_even(); // } else if (key == &s_keys[2] && //间歇时间选择 // key->cur_state == zks_rising_edge && // // !key->hasProcessed && // // key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { // key->hasProcessed = true; // printf("key2 zks_rising_edge\r\n"); // update_interval_period_duty(); // } else if (key == &s_keys[3] && //开关 // key->cur_state == zks_rising_edge && // // !key->hasProcessed && // // key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { // key->hasProcessed = true; // printf("key2 zks_rising_edge\r\n"); // shutdown(); // } // } else { //关机中 // if (key == &s_keys[3] && //开关 // key->cur_state == zks_rising_edge && // // !key->hasProcessed && // // key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { // key->hasProcessed = true; // printf("key zks_rising_edge\r\n"); // starting_up(); // } // } // } // /*********************************************************************************************************************** // * =====================================================HOOK实现====================================================== * // ***********************************************************************************************************************/ // bool pwm_modble_enable_falg; // void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty) { // set_pwm_modbul_freq_duty(frequency, duty); // port_fan_set(true); //打开风扇 // pwm_modble_enable_falg = true; // printf("work\r\n"); // } // void HOOK_pwm_stop(void) { // set_pwm_modbul_freq_duty(1, 0); //关闭PWM输出 // port_fan_set(false); //风扇结束工作 // pwm_modble_enable_falg = false; // printf("rest\r\n"); // } // bool HOOK_pwm_is_enable(void) { return pwm_modble_enable_falg; } // /*********************************************************************************************************************** // * =====================================================定时功能====================================================== * // ***********************************************************************************************************************/ // /** // * @brief 每次按键按下时间timing_time=timing_time+TIMING_TICK // * 当timing_time==timing_time = 4 * TIMING_TICK; // * timing_time = 0; // * // */ // void update_timing_time(void) { // timing_shutdown_begin_ticket = get_sys_ticket(); //更新定时关机开始的时间 // begin_ticket = get_sys_ticket(); //更新间歇开始的时间 // timing_function_enable_falg = true; //使能定时功能 // if (timing_time == 0) { // timing_time = 1 * TIMING_TICK; // } else if ((timing_time / TIMING_TICK) == 1) { // timing_time = 2 * TIMING_TICK; // } else if ((timing_time / TIMING_TICK) == 2) { // timing_time = 3 * TIMING_TICK; // } else if ((timing_time / TIMING_TICK) == 3) { // timing_time = 4 * TIMING_TICK; // } else if ((timing_time / TIMING_TICK) == 4) { // timing_time = 0 * TIMING_TICK; // timing_function_enable_falg = false; // } // printf("timing time:%d\r\n", timing_time); // } // /** // * @brief 定时每过TIMING_TICK timing_time=timing_time-TIMING_TICK // * 当TIMING_TICK==0的时候关机 // * // */ // void try_shutdown(void) { // if (port_haspassedms(timing_shutdown_begin_ticket) > TIMING_TICK) { // timing_shutdown_begin_ticket = get_sys_ticket(); // printf("time minus %dms", TIMING_TICK); // timing_time -= TIMING_TICK; // updae_led_light_mode(); // } // if (timing_time == 0) { //定时时间到 // timing_function_enable_falg = false; //使能定时功能 // shutdown(); // } // } // bool timing_function_is_enable(void) { return timing_function_enable_falg; } // /*********************************************************************************************************************** // * =======================================================测试======================================================== // ** // ***********************************************************************************************************************/ // void test(void) { // light_module_set_rgb_mode(RGB_CLOSE); // light_module_set_timing_light_mode(CLOSE_ALL_LED); // // PWM频率1Khz,占空比100,占空比高有效,设置占空比为0,pwm一直输出高电平 // HOOK_pwm_module_set_pwm_duty(1, 0); // // printf("100\r\n"); // // Delayms(30000); // // HOOK_pwm_module_set_pwm_duty(1, 25); //电压为25% // // Delayms(30000); // // HOOK_pwm_module_set_pwm_duty(1, 50); //电压为50% // // Delayms(30000); // // HOOK_pwm_module_set_pwm_duty(1, 100); //电压为100% // // Delayms(30000); // HOOK_pwm_module_set_pwm_duty(1, 50); //电压为50% // ozone_pwm_control_module_set_pwm_output_2(1, 50, 10000, 50); //这样设置现象应该是,pwm输出50%,定时10s,间歇5s // // update_timing_time(); // } // /** // * @brief 上电臭氧工作情况,设备中设置有开关机按键,所以外部上电后,不让设备工作 // * // */ // void power_on_ozone_working_status(void) { // // PWM频率1Khz,占空比0,占空比低有效,设置占空比为100,pwm一直输出低电平 // // update_pwm_output_duty(1); // // update_pwm_output_duty(now_pwm_duty); // // update_rgb_color(RGB_CLOSE); // light_module_set_timing_light_mode(CLOSE_ALL_LED); // port_fan_set(false); //关闭风扇 // } // /*********************************************************************************************************************** // * ======================================================主函数======================================================= // ** // ***********************************************************************************************************************/ // int main(void) { // HRC_Config(Enable, SCU_HRC_48M, Enable); //时钟源SCU_CLK_HRC // SystemInit(); // DeviceClockAllEnable(); //打开所有外设时钟 // User_SysTickInit(); //滴答定时器初始化为(配置为1ms中断) // SysTick_Enable(); // uart0_init(); // gpio_init(); // zkey_init(&key_module); // t16_pa4_init(); // power_on_ozone_working_status(); // // test(); // // printf("%d\r\n", (10000 % 60000)); // // printf("%d\r\n", (20000 % 60000)); // // printf("%d\r\n", (30000 % 60000)); // // printf("%d\r\n", (40000 % 60000)); // // ozone_pwm_control_module_set_pwm_output_2(1, 50, 10000, 50); //这样设置现象是,pwm输出50%,定时10s,间歇5s // while (1) { // static uint32_t keylastprocess = 0; // if (port_haspassedms(keylastprocess) > 20) { // keylastprocess = get_sys_ticket(); // zkey_do_loop_in_each_period(NULL); // } // if (starting_up_state) { //开机中 // port_do_debug_light_state(); // if (timing_function_is_enable()) { //定时功能是开启的 // ozone_pwm_control_module_loop(); // try_shutdown(); // } // } else { //关机中 // } // } // } // /*********************************************************************************************************************** // * =====================================================测试结果====================================================== // ** // ***********************************************************************************************************************/ // /** // * 按键测试通过 // * HOOK_pwm_module_set_pwm_duty()小周期(设置硬件PWM)测试通过 // * 测试间歇PWM通过 // * // **/ // /** // * 关机工作 // * 1.PWM输出0 // * 2.RGB关闭 // * 3.定时灯关闭 // * 4.风扇关闭 // * // */