Browse Source

update

master
Yuenold 3 years ago
parent
commit
047bba982c
  1. 5
      .clang-format
  2. 75
      APP/key.c
  3. 1
      APP/key.h
  4. 194
      APP/key2.c
  5. 69
      APP/key2.h
  6. 30
      APP/light.c
  7. 8
      APP/light.h
  8. 31
      APP/main.c
  9. 43
      APP/pwm.c
  10. 17
      APP/pwm.h
  11. 1014
      project_ozone/Listings/project_o.map
  12. 216
      project_ozone/project_o.uvgui.admin

5
.clang-format

@ -0,0 +1,5 @@
# Defines the Chromium style for automatic reformatting.
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
Language: Cpp
BasedOnStyle: Google
ColumnLimit: 120

75
APP/key.c

@ -86,6 +86,34 @@ extern int g_ozen_gears;
extern uint32_t g_count_down_begin_sys_time;
extern int time_key_press_frequency; //40
extern uint32_t g_ozone_work_time;
//##########################
extern pwm_message_t pwm_message;
extern rgb_message_t rgb_message;
shutdown_before_message_t shutdown_before_message;
void process_switchkey(void) {
static uint8_t switchkey_press_conut = 0;
switchkey_press_conut++;
switch (switchkey_press_conut) {
case 1: //,
pwm_module_set_pwm_output_2(
shutdown_before_message.hardware_frequency, shutdown_before_message.hardware_duty,
shutdown_before_message.large_period, shutdown_before_message.large_duty);
light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb);
port_fan_set(true);
break;
case 2: //
switchkey_press_conut = 0;
shutdown_before_message.hardware_duty=pwm_message.s_hardware_duty;
shutdown_before_message.hardware_frequency=pwm_message.s_hardware_frequency;
shutdown_before_message.large_duty=pwm_message.s_large_duty;
shutdown_before_message.large_period=pwm_message.s_large_period;
light_module_set_rgb_mode(RGB_CLOSE);
light_module_set_timing_light_mode(CLOSE_ALL_LED);
pwm_module_set_pwm_output_2(1,100,0,0);
port_fan_set(false);
break;
}
}
void onkey(zkey_t *key, zkey_state_t key_state) {
/**
@ -111,7 +139,7 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) //3s
{
key->hasProcessed = true;
printf("key0 zks_falling_edge\r\n");
printf("key0 zks_falling_edge\r\n");
// set_ozone_work_time();
// set_timing_time(running_time.timing_time_state);
} else if (key == &s_keys[1] && //
@ -121,7 +149,7 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) {
key->hasProcessed = true;
// key_control_switch_gears(g_switch_gears);
printf("key1 zks_rising_edge\r\n");
printf("key1 zks_rising_edge\r\n");
// set_ozen_gears(g_ozen_gears);
} else if (key == &s_keys[2] && //
key->cur_state == zks_rising_edge && //
@ -129,30 +157,33 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
key->keep_state_count <=
POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) {
key->hasProcessed = true;
printf("key2 zks_rising_edge\r\n");
printf("key2 zks_rising_edge\r\n");
// set_interval_time();
// set_interval_time(running_time.interval_time_state);
} 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("key3 zks_rising_edge\r\n");
process_switch_key();
// set_interval_time(running_time.interval_time_state);
}
} 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");
process_switch_key();
// set_interval_time(running_time.interval_time_state);
}
// 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("key3 zks_rising_edge\r\n");
// process_switch_key();
// // set_interval_time(running_time.interval_time_state);
// }
}
// 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");
// process_switch_key();
process_switchkey();
// set_interval_time(running_time.interval_time_state);
}
// }
}
void port_key_state(void) {
static uint32_t keylastprocess = 0;

1
APP/key.h

@ -1,6 +1,7 @@
#pragma once
#include "port.h"
#include "ozone_work.h"
#include "pwm.h"
#define POWER_KEY_TRIGGER_TIME 3000
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
#define ZKEY_INIT(_name, _get_key_state) \

194
APP/key2.c

@ -0,0 +1,194 @@
#include "key.h"
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 zkey_init(zkey_module_t *module) {
/**
* @brief
*
*/
s_module = module;
s_inited = true; //
for (int i = 0; i < s_module->nkey; i++) {
s_module->keys[i].cur_state = zks_keep;
s_module->keys[i].last_io_state = s_module->keys[i].get_key_state();
s_module->keys[i].after_filter_state = s_module->keys[i].get_key_state();
}
}
void zkey_do_loop_in_each_period(void *_null) { /**
* @brief
*
*/
if (!s_inited)
return;
for (int i = 0; i < s_module->nkey; i++) //
{
zkey_process_each(&s_module->keys[i]);
}
}
void zkey_process_each(zkey_t *each) {
/**
* @brief
*
* @param each
*/
each->keep_state_count++;
bool now_io_state = each->get_key_state(); //io状态
if (each->currentstatekeep_count < 1000) {
each->currentstatekeep_count++;
}
if (now_io_state != each->last_real_state) //
{
each->currentstatekeep_count = 0;
}
if (each->currentstatekeep_count >= 1) //20ms,
{
each->after_filter_state = now_io_state;
}
each->last_real_state = now_io_state;
zkey_process_each_after_filter(each, each->after_filter_state);
}
void zkey_process_each_after_filter(zkey_t *each, bool now_io_state) {
if (now_io_state != each->last_io_state) {
if (now_io_state) {
each->keep_state_count = 0;
each->hasProcessed = false;
each->cur_state = zks_rising_edge;
s_module->onkey(each, each->cur_state);
} else {
each->cur_state = zks_falling_edge;
s_module->onkey(each, each->cur_state);
each->keep_state_count = 0;
}
each->last_io_state = now_io_state;
} else {
each->cur_state = zks_keep;
if (now_io_state) {
s_module->onkey(each, each->cur_state);
}
}
}
//############################### main中的方法
//###############################//
extern uint32_t g_frequency;
extern uint32_t g_duty[4];
extern int g_ozen_gears;
extern uint32_t g_count_down_begin_sys_time;
extern int time_key_press_frequency; //40
extern uint32_t g_ozone_work_time;
//##########################
extern pwm_message_t pwm_message;
extern rgb_message_t rgb_message;
shutdown_before_message_t shutdown_before_message;
void process_switchkey(void) {
static uint8_t switchkey_press_conut = 0;
switchkey_press_conut++;
switch (switchkey_press_conut) {
case 1: //,
pwm_module_set_pwm_output_2(
shutdown_before_message.hardware_frequency, shutdown_before_message.hardware_duty,
shutdown_before_message.large_period, shutdown_before_message.large_duty);
light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb);
port_fan_set(true);
break;
case 2: //
switchkey_press_conut = 0;
shutdown_before_message.hardware_duty=pwm_message.s_hardware_duty;
shutdown_before_message.hardware_frequency=pwm_message.s_hardware_frequency;
shutdown_before_message.large_duty=pwm_message.s_large_duty;
shutdown_before_message.large_period=pwm_message.s_large_period;
light_module_set_rgb_mode(RGB_CLOSE);
light_module_set_timing_light_mode(CLOSE_ALL_LED);
pwm_module_set_pwm_output_2(1,100,0,0);
port_fan_set(false);
break;
}
}
void onkey(zkey_t *key, zkey_state_t key_state) {
/**
* @brief
*
* @param key
* @param key_state
*/
if (get_ozone_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;
// printf("key0 zks_keep\r\n");
// stop_ozone_work();
} 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");
// set_ozone_work_time();
// set_timing_time(running_time.timing_time_state);
} 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;
// key_control_switch_gears(g_switch_gears);
printf("key1 zks_rising_edge\r\n");
// set_ozen_gears(g_ozen_gears);
} 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");
// set_interval_time();
// set_interval_time(running_time.interval_time_state);
}
// 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("key3 zks_rising_edge\r\n");
// process_switch_key();
// // set_interval_time(running_time.interval_time_state);
// }
}
// 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");
// process_switch_key();
process_switchkey();
// set_interval_time(running_time.interval_time_state);
}
// }
}
void port_key_state(void) {
static uint32_t keylastprocess = 0;
if (port_haspassedms(keylastprocess) > 20) {
keylastprocess = get_sys_ticket();
zkey_do_loop_in_each_period(NULL);
}
}

69
APP/key2.h

@ -0,0 +1,69 @@
#pragma once
#include "port.h"
#include "ozone_work.h"
#include "pwm.h"
#define POWER_KEY_TRIGGER_TIME 3000
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
#define ZKEY_INIT(_name, _get_key_state) \
{ .name = _name, .get_key_state = _get_key_state }
#define ZMODULE_INIT(_keys, _onkey) /**/ \
{ /**/ \
.keys = _keys, /**/ \
.nkey = ARRAY_SIZE(_keys), /**/ \
.onkey = _onkey /**/ \
}
typedef enum {
// mode1
zks_keep,
zks_rising_edge, //沿0-1
zks_falling_edge, //沿1-0
// mode2
zks_trigger_event, //
zks_longtime_trigger_event, //
} zkey_event_t;
typedef zkey_event_t zkey_state_t;
typedef bool (*get_key_state_t)(void);
typedef struct {
const char *name;
get_key_state_t get_key_state;
bool last_io_state;
zkey_state_t cur_state; //
uint32_t keep_state_count; /*按键当前状态保持了多久*/
bool hasProcessed; /*useful for user*/
bool after_filter_state;
uint32_t currentstatekeep_count; //使
bool last_real_state; //使
} zkey_t;
static uint16_t s_key_press_state;
static uint16_t s_key_long_press_time_ms = 3000; //
#define KEY_SCAN_PERIOD 20 //扫描周期20ms
typedef struct {
zkey_t *keys;
int nkey;
void (*onkey)(zkey_t *key, zkey_state_t key_state);
} zkey_module_t;
static zkey_module_t *s_module;
static bool s_inited;
void zkey_init(zkey_module_t *module);
void zkey_do_loop_in_each_period(void *_null);
void zkey_process_each(zkey_t *each);
void zkey_process_each_after_filter(zkey_t *each, bool now_io_state);
void read_key_state(void);
void onkey(zkey_t *key, zkey_state_t key_state);
void port_key_state(void);

30
APP/light.c

@ -6,26 +6,26 @@ timing_message_t timing_message;
/**
* @brief ,
*
* 绿
*/
void light_module_set_rgb_mode(RGB_MODE_T mode) {
if (mode == OPEN_RED_LIGHT) {
if (mode == RGB_COLOR_RED) {
port_led_r_set(true);
port_led_g_set(false);
port_led_b_set(false);
rgb_message.turn_off_the_mode_before_rgb = OPEN_RED_LIGHT;
} else if (mode == OPEN_GREEN_LIGHT) {
rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_RED;
} else if (mode == RGB_COLOR_BLUE) {
port_led_r_set(false);
port_led_g_set(true);
port_led_b_set(false);
rgb_message.turn_off_the_mode_before_rgb = OPEN_GREEN_LIGHT;
} else if (mode == OPEN_BLUE_LIGHT) {
rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_BLUE;
} else if (mode == RGB_COLOR_GERRN) {
port_led_r_set(false);
port_led_g_set(false);
port_led_b_set(true);
rgb_message.turn_off_the_mode_before_rgb = OPEN_BLUE_LIGHT;
} else if (mode == CLOSE_RGB_LIGHT) {
rgb_message.turn_off_the_mode_before_rgb = OPEN_BLUE_LIGHT;
rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_GERRN;
} else if (mode == RGB_CLOSE) {
//rgb_message.turn_off_the_mode_before_rgb = RGB_CLOSE;
port_led_r_set(false);
port_led_g_set(false);
port_led_b_set(false);
@ -53,7 +53,7 @@ void process_rgb_flicker_mode() {
// turn_off_the_mode_before_rgb保存了关闭之前的RGB亮灯的模式
light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb);
} else {
light_module_set_rgb_mode(CLOSE_RGB_LIGHT);
light_module_set_rgb_mode(RGB_CLOSE);
rgb_ticket_count = 0;
}
rgb_ticket_count++;
@ -129,7 +129,7 @@ void light_module_set_error_light_mode(uint8_t mode) {
*
*/
void light_module_close_all_light(void) {
light_module_set_rgb_mode(CLOSE_RGB_LIGHT);
light_module_set_rgb_mode(RGB_CLOSE);
light_module_set_timing_light_mode(CLOSE_ALL_LED);
light_module_set_rgb_flicker_mode(false);
}
@ -143,16 +143,16 @@ void test_set_rgb_mode(void) {
static int i = 0;
if (i == 0) {
i = 1;
light_module_set_rgb_mode(OPEN_RED_LIGHT);
light_module_set_rgb_mode(RGB_COLOR_RED);
} else if (i == 1) {
i = 2;
light_module_set_rgb_mode(OPEN_GREEN_LIGHT);
light_module_set_rgb_mode(RGB_COLOR_BLUE);
} else if (i == 2) {
i = 3;
light_module_set_rgb_mode(OPEN_BLUE_LIGHT);
light_module_set_rgb_mode(RGB_COLOR_GERRN);
} else if (i == 3) {
i = 0;
light_module_set_rgb_mode(CLOSE_RGB_LIGHT);
light_module_set_rgb_mode(RGB_CLOSE);
}
}
/**

8
APP/light.h

@ -8,10 +8,10 @@
typedef enum {
OPEN_RED_LIGHT = 0, /*打开红灯*/
OPEN_GREEN_LIGHT = 1, /*打开绿灯*/
OPEN_BLUE_LIGHT = 2, /*打开蓝灯*/
CLOSE_RGB_LIGHT = 3, /*关闭灯*/
RGB_COLOR_RED = 0, /*打开红灯*/
RGB_COLOR_GERRN = 1, /*打开绿灯*/
RGB_COLOR_BLUE = 2, /*打开蓝灯*/
RGB_CLOSE = 3, /*关闭灯*/
} RGB_MODE_T;

31
APP/main.c

@ -1,3 +1,4 @@
#if 0
/*********************************************************
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
*: main.c
@ -10,7 +11,9 @@
*使
**********************************************************/
#include "main.h"
#include <stdbool.h> //定义布尔
#include <stdbool.h> //定义布尔
// extern ozone_message_t ozone_message;
extern zkey_module_t key_module;
bool rgb_flicker_state = false;
@ -49,15 +52,15 @@ void feed_iwdt(void) {
//############### ##############//
/**
* @brief ,
* @brief ,
*
*/
void power_on_ozone_working_status(void) {
// PWM频率1Khz0,0pwm一直输出电平
HOOK_pwm_module_set_pwm_duty(1, 0);
// PWM频率1Khz0,100pwm一直输出电平
HOOK_pwm_module_set_pwm_duty(1, 100);
light_module_set_timing_light_mode(CLOSE_ALL_LED);
light_module_set_rgb_mode(OPEN_RED_LIGHT);
port_fan_set(true); //
light_module_set_rgb_mode(RGB_COLOR_RED);
port_fan_set(false); //
}
/***********************************************************************************************************************
@ -105,3 +108,19 @@ int main(void) {
// feed_iwdt(); //
}
}
#endif
#include <stdbool.h> //定义布尔
#include "main.h"
extern zkey_module_t key_module;
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);
}

43
APP/pwm.c

@ -2,8 +2,11 @@
#define TIMING_TICK 1800000
#define INTERVAL_TICK 30000
#define CLCK 48
uint32_t s_hardware_period; //ms
uint32_t s_hardware_duty; //ms
pwm_message_t pwm_message={.s_hardware_frequency=1};
// uint32_t s_hardware_frequency; //msPWM频率
// uint32_t s_hardware_duty; //msPWM占空比
// uint32_t s_large_period; //ms
// uint32_t s_large_duty = 100; //ms
/**
* @brief s_large_duty是由s_large_period与INTERVAL_TIME决定
@ -12,8 +15,7 @@ uint32_t s_hardware_duty; //
* s_large_duty = (30000/1800000)*100
*
*/
uint32_t s_large_period; //ms
uint32_t s_large_duty = 100; //ms
uint32_t begin_ticket;
uint8_t update_large_period_count;
bool enableFlag = false;
@ -29,6 +31,10 @@ void HOOK_pwm_stop(void) {
bool HOOK_pwm_is_enable(void) { return enableFlag; }
/**
* @brief
*
*/
void update_large_period(void) {
uint32_t large_period;
update_large_period_count++;
@ -51,9 +57,18 @@ void update_large_period(void) {
break;
}
pwm_module_set_pwm_output_1(
large_period, s_large_duty); //
large_period, pwm_message.s_large_duty); //
}
/**
* @brief 100
* 300000
@ -61,7 +76,7 @@ void update_large_period(void) {
* @param duty
*/
void pwm_module_set_pwm_output_1(uint32_t large_period, uint32_t large_duty) {
pwm_module_set_pwm_output_2(s_hardware_period, s_hardware_duty, large_period,
pwm_module_set_pwm_output_2(pwm_message.s_hardware_frequency, pwm_message.s_hardware_duty, large_period,
large_duty);
}
/**
@ -75,15 +90,15 @@ void pwm_module_set_pwm_output_1(uint32_t large_period, uint32_t large_duty) {
void pwm_module_set_pwm_output_2(uint32_t hardware_period,
uint32_t hardware_duty, uint32_t large_period,
uint32_t large_duty) {
s_hardware_period = hardware_period;
s_hardware_duty = hardware_duty;
s_large_period = large_period;
s_large_duty = large_duty;
pwm_message.s_hardware_frequency = hardware_period;
pwm_message.s_hardware_duty = hardware_duty;
pwm_message.s_large_period = large_period;
pwm_message.s_large_duty = large_duty;
begin_ticket = get_sys_ticket();
enableFlag = true;
HOOK_pwm_module_set_pwm_duty(s_hardware_period, s_hardware_duty);
HOOK_pwm_module_set_pwm_duty(pwm_message.s_hardware_frequency, pwm_message.s_hardware_duty);
}
void pwm_module_stop_pwm(void) { enableFlag = false; }
@ -93,10 +108,10 @@ void pwm_module_loop(void) {
HOOK_pwm_stop();
return;
}
if (port_haspassedms(begin_ticket) % s_large_period <=
s_large_period * s_large_duty / 100) {
if (port_haspassedms(begin_ticket) % pwm_message.s_large_period <=
pwm_message.s_large_period * pwm_message.s_large_duty / 100) {
if (!HOOK_pwm_is_enable()) {
HOOK_pwm_module_set_pwm_duty(s_hardware_period, s_hardware_duty);
HOOK_pwm_module_set_pwm_duty(pwm_message.s_hardware_frequency, pwm_message.s_hardware_duty);
}
} else {
enableFlag = false;

17
APP/pwm.h

@ -7,6 +7,21 @@
#include "port.h"
#include "system_ES8P5066.h"
typedef struct {
uint32_t s_hardware_frequency; // KhzPWM频率
uint32_t s_hardware_duty; // PWM占空比
uint32_t s_large_period; // ms
uint32_t s_large_duty; //
} pwm_message_t;
typedef struct {
uint32_t hardware_frequency; // KhzPWM频率
uint32_t hardware_duty; // PWM占空比
uint32_t large_period; // ms
uint32_t large_duty; //
} shutdown_before_message_t;
void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty);
void HOOK_pwm_stop(void);
bool HOOK_pwm_is_enable(void);
@ -15,7 +30,7 @@ void pwm_module_set_pwm_output_2(uint32_t hardware_period,
uint32_t hardware_duty, uint32_t large_period,
uint32_t large_duty);
void ozone_pwm_control_set_pwm_duty(uint32_t frequency, uint32_t duty);
void ozone_pwm_control_set_pwm_duty(uint32_t frequency, uint32_t duty);
void pwm_module_stop_pwm(void);
void update_large_period(void);
void pwm_module_loop(void);

1014
project_ozone/Listings/project_o.map
File diff suppressed because it is too large
View File

216
project_ozone/project_o.uvgui.admin
File diff suppressed because it is too large
View File

Loading…
Cancel
Save