Browse Source

update

master
Yuenold 4 years ago
parent
commit
9211d0d71b
  1. 83
      APP/main.c
  2. 152
      APP/ozone_work.c
  3. 26
      APP/ozone_work.h
  4. 34
      PlatForm/irqhandler.c
  5. 2
      REDEME.md
  6. BIN
      doc/~$项目需求.docx
  7. BIN
      doc/软件需求(1).pdf
  8. BIN
      doc/项目需求.docx
  9. 924
      project_ozone/Listings/project_o.map
  10. 89
      project_ozone/project_o.uvgui.admin

83
APP/main.c

@ -12,9 +12,6 @@
#include "main.h" #include "main.h"
#include <stdbool.h> //定义布尔 #include <stdbool.h> //定义布尔
extern int ozone_work_state; extern int ozone_work_state;
extern uint32_t g_sys_sick;
extern uint32_t g_count_down_begin_sys_time;
extern uint32_t g_count_interval_down_begin_sys_time;
extern zkey_module_t key_module; extern zkey_module_t key_module;
extern bool g_ozone_interva_stat; extern bool g_ozone_interva_stat;
/*********************************************************************************************************************** /***********************************************************************************************************************
@ -51,6 +48,61 @@ void test_iwdt(void) {
feed_iwdt(); feed_iwdt();
} }
} }
/***********************************************************************************************************************
* =====================================================adc======================================================
**
***********************************************************************************************************************/
uint16_t meanvalue;
void ADCInit(void)
{
ADC_InitStruType x;
GPIO_InitSettingType y;
y.Signal = GPIO_Pin_Signal_Analog;//
y.Dir = GPIO_Direction_Input;//
y.Func = GPIO_Reuse_Func0;
// GPIO_Init(GPIO_Pin_B9, &y);
GPIO_Init(GPIO_Pin_A2, &y);
//Tadclk=1/(PCLK/4)0.083us
x.CLKS = ADC_CLKS_PCLK;
x.CLKDIV = ADC_CLKDIV_1_4; /* ADC时钟源预分频 */
//*2.048/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v */
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD */
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */
// x.CHS = ADC_CHS_AIN4;
x.CHS = ADC_CHS_AIN8;
x.SMPS = ADC_SMPS_HARD; /* AD采样模式为硬件控制 */
//st*2+1=1.743us
x.ST = 10; /* AD采样时间选择 */
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */
ADC_Init(&x);
ADC_ACP_Disable();
ADC_IE_Enable(); /* ADC中断使能 */
NVIC_Init(NVIC_ADC_IRQn, NVIC_Priority_1, Enable);
}
void ADCACPConfig(void)
{
ADC_ACP_TypeDef x;
//Tacp约0.5us
x.ACP_EN = ENABLE;
// 4*0.5=20us
x.ACPC_OVER_TIME = 0x30; /* 自动转换比较的溢出时间 */
//2us内采样8次
x.ACPC_TIMES = ADC_ACPC_TIMES_8; /* 自动转换比较次数选择位 */
x.ACPC_MIN_TARGET = 0x010; /* 自动比较高阈值,当mean值小于该值时,会触发中断 */
x.ACPC_MAX_TARGET = 0x700; /* 自动比较低阈值,当mean值大于该值时,会触发中断 */
ADC_ACPConfig(&x);
}
/*********************************************************************************************************************** /***********************************************************************************************************************
* ============================================================================================================= * =============================================================================================================
@ -68,6 +120,10 @@ int main(void) {
t16n0_1_init(); //PA4输出pwm t16n0_1_init(); //PA4输出pwm
iwdt_init(); iwdt_init();
power_on_ozone_work_state(); // power_on_ozone_work_state(); //
ADCInit();
/* 配置自动比较功能,启动ADC */
ADCACPConfig();
// ADC_Start();
printf("Initialization completed\r\n"); printf("Initialization completed\r\n");
while (1) { while (1) {
// port_do_debug_light_state(); // port_do_debug_light_state();
@ -77,23 +133,10 @@ int main(void) {
is_ozone_work_time_over(); is_ozone_work_time_over();
if (g_ozone_interva_stat == true) if (g_ozone_interva_stat == true)
is_ozone_interva_time_over(); is_ozone_interva_time_over();
// if (print_time >= 300000) {
// if (print_time >= 1800000) {
if (print_time >= 10000) {
print_time = 0;
// // printf("mian port_haspassedms(g_count_down_begin_sys_time):%d\n",
// // port_haspassedms(g_count_down_begin_sys_time));
// // printf("mian g_sys_sick:%d\n", g_sys_sick);
// printf("mian ozone_work_state:%d\n", ozone_work_state);
// // printf("mian g_ozone_interva_stat:%d\n", g_ozone_interva_stat);
printf("mian port_haspassedms(g_count_down_begin_sys_time):%d\r\n",
port_haspassedms(g_count_down_begin_sys_time));
printf("mian ozone_work_state:%d\r\n", ozone_work_state);
printf(
"mian port_haspassedms(g_count_interval_down_begin_sys_time):%d\r\n",
port_haspassedms(g_count_interval_down_begin_sys_time));
printf("mian g_ozone_interva_stat:%d\r\n", g_ozone_interva_stat);
}
// if(meanvalue!=0){
// printf("meanvalue:%d\r\n",meanvalue);
// meanvalue=0;
// }
} }
// test_iwdt(); // test_iwdt();
feed_iwdt(); // feed_iwdt(); //

152
APP/ozone_work.c

@ -11,9 +11,10 @@ bool g_ozone_interva_stat = false;
int interval_key_press_frequency = 0; //40 int interval_key_press_frequency = 0; //40
int g_ozen_gears = 1; //100%50%PWM int g_ozen_gears = 1; //100%50%PWM
static bool switch_key_state = false; static bool switch_key_state = false;
int time_key_press_frequency = 0; //40
bool g_interva_flag = false;
//###################### ################// //###################### ################//
void ozone_work_mode(int mode) { void ozone_work_mode(int mode) {
if (ozone_work_state != 2) { if (ozone_work_state != 2) {
ozone_work_state = 1; ozone_work_state = 1;
} }
@ -36,14 +37,33 @@ void ozone_work_mode(int mode) {
} }
} }
void update_interval_down_begin_sys_time(void) {
g_count_interval_down_begin_sys_time = get_sys_ticket();
}
void update_ozer_work_state(void) {
// int gears_time_key_press_frequency = 0;
if (g_ozone_interva_stat == true &&
g_interva_flag == true) { //
update_interval_down_begin_sys_time();
g_interva_flag = false;
}
// if (time_key_press_frequency == 0) {
// gears_time_key_press_frequency = 4;
// } else {
// gears_time_key_press_frequency = time_key_press_frequency - 1;
// }
// if (ozone_work_state == 2) {
// timing_led_on(gears_time_key_press_frequency); //led灯
// }
}
void set_ozen_gears(int ozen_gears) { void set_ozen_gears(int ozen_gears) {
/** /**
* @brief Construct a new switch object * @brief Construct a new switch object
* pwm输出 * pwm输出
*/ */
// printf("g_sys_sick:%d\n", g_sys_sick);
// printf("g_ozone_work_time:%d\n", g_ozone_work_time);
// printf("g_count_down_begin_sys_time:%d\n", g_count_down_begin_sys_time);
update_ozer_work_state(); //
switch (ozen_gears) { switch (ozen_gears) {
case 0: case 0:
set_pwm_frequency_duty(g_frequency, g_duty[0]); set_pwm_frequency_duty(g_frequency, g_duty[0]);
@ -78,6 +98,19 @@ void set_ozen_gears(int ozen_gears) {
* *
* @param led_number 0 1绿 2 3 * @param led_number 0 1绿 2 3
*/ */
void gears_led_on(uint8_t led_number) {
for (int i = 0; i < 3; i++) {
if (i == led_number) {
s_rgb[i].set_led_state = true;
s_rgb[i].port_led_set(s_rgb[i].set_led_state);
} else {
s_rgb[i].set_led_state = false;
s_rgb[i].port_led_set(s_rgb[i].set_led_state);
}
}
}
#if 0
void gears_led_on(uint8_t led_number) { void gears_led_on(uint8_t led_number) {
switch (led_number) { switch (led_number) {
case 0: case 0:
@ -104,12 +137,10 @@ void gears_led_on(uint8_t led_number) {
break; break;
} }
} }
#endif
//###################### ################// //###################### ################//
//###################### ################// //###################### ################//
int time_key_press_frequency = 0; //40
void set_ozone_work_time(void) { void set_ozone_work_time(void) {
if (!ozone_work_state) { // if (!ozone_work_state) { //
set_ozen_gears(0); set_ozen_gears(0);
@ -118,37 +149,33 @@ void set_ozone_work_time(void) {
// //
g_count_down_begin_sys_time = get_sys_ticket(); g_count_down_begin_sys_time = get_sys_ticket();
port_fan_set(1); // port_fan_set(1); //
printf("定时开始g_sys_sick:%d\n", g_sys_sick);
printf("定时开始g_count_down_begin_sys_time:%d\n",
g_count_down_begin_sys_time);
switch (time_key_press_frequency) { switch (time_key_press_frequency) {
case 5: case 5:
time_key_press_frequency = 0; time_key_press_frequency = 0;
case 0: //
case 0: // 30min
// g_ozone_work_time = 7200000; // g_ozone_work_time = 7200000;
g_ozone_work_time = 10000;
g_ozone_work_time = 1800000;
printf("g_ozone_work_time:%d", g_ozone_work_time); printf("g_ozone_work_time:%d", g_ozone_work_time);
time_key_press_frequency = 1; time_key_press_frequency = 1;
timing_led_on(0); timing_led_on(0);
break; break;
case 1: //
// g_ozone_work_time = 100000;
g_ozone_work_time = 14400000;
case 1: // 60min
// g_ozone_work_time = 14400000;
g_ozone_work_time = 3600000;
printf("g_ozone_work_time:%d", g_ozone_work_time); printf("g_ozone_work_time:%d", g_ozone_work_time);
time_key_press_frequency = 2; time_key_press_frequency = 2;
timing_led_on(1); timing_led_on(1);
break; break;
case 2: //
// g_ozone_work_time = 150000;
g_ozone_work_time = 21600000;
case 2: // 90min
// g_ozone_work_time = 21600000;
g_ozone_work_time = 5400000;
printf("g_ozone_work_time:%d", g_ozone_work_time); printf("g_ozone_work_time:%d", g_ozone_work_time);
time_key_press_frequency = 3; time_key_press_frequency = 3;
timing_led_on(2); timing_led_on(2);
break; break;
case 3: //
// g_ozone_work_time = 200000;
// g_ozone_work_time = 60000;//60s
g_ozone_work_time = 28800000;
case 3: // 120min
// g_ozone_work_time = 28800000;
g_ozone_work_time = 7200000;
printf("g_ozone_work_time:%d", g_ozone_work_time); printf("g_ozone_work_time:%d", g_ozone_work_time);
time_key_press_frequency = 4; time_key_press_frequency = 4;
timing_led_on(3); timing_led_on(3);
@ -156,7 +183,7 @@ void set_ozone_work_time(void) {
case 4: case 4:
ozone_work_state = 1; // ozone_work_state = 1; //
printf("close timing"); printf("close timing");
timing_led_on(4);
timing_led_on(4); //
time_key_press_frequency = 0; time_key_press_frequency = 0;
break; break;
default: default:
@ -195,6 +222,19 @@ void is_ozone_work_time_over(void) {
* *
* @param led_number 0led0 1led1 2led2 3led3 4 * @param led_number 0led0 1led1 2led2 3led3 4
*/ */
void timing_led_on(uint8_t led_number) {
for (int i = 0; i < 4; i++) {
if (i == led_number) {
s_leds[i].set_led_state = true;
s_leds[i].port_led_set(s_leds[i].set_led_state);
} else {
s_leds[i].set_led_state = false;
s_leds[i].port_led_set(s_leds[i].set_led_state);
}
}
}
#if 0
void timing_led_on(uint8_t led_number) { void timing_led_on(uint8_t led_number) {
switch (led_number) { switch (led_number) {
case 0: case 0:
@ -233,22 +273,17 @@ void timing_led_on(uint8_t led_number) {
break; break;
} }
} }
#endif
//###################### ################// //###################### ################//
//###################### ################// //###################### ################//
// void update_timing_interval_begin_time(void) {
// /**
// * @brief
// *
// */
// g_count_down_begin_sys_time = get_sys_ticket();
// g_count_interval_down_begin_sys_time = get_sys_ticket();
// }
bool get_ozone_starting_up_state(void) { return switch_key_state; } bool get_ozone_starting_up_state(void) { return switch_key_state; }
/**
* @brief
*
*/
void set_ozone_starting_up(void) { void set_ozone_starting_up(void) {
// ozone_interval_begin();
int starting_up_ozen_gears = 0; int starting_up_ozen_gears = 0;
if (g_ozen_gears == 0) { if (g_ozen_gears == 0) {
starting_up_ozen_gears = 2; starting_up_ozen_gears = 2;
@ -258,6 +293,10 @@ void set_ozone_starting_up(void) {
//PWM输出 //PWM输出
set_ozen_gears(starting_up_ozen_gears); set_ozen_gears(starting_up_ozen_gears);
} }
/**
* @brief
*
*/
void set_ozone_shutdown(void) { void set_ozone_shutdown(void) {
interval_key_press_frequency = 0; interval_key_press_frequency = 0;
g_ozone_interva_stat = false; g_ozone_interva_stat = false;
@ -266,9 +305,7 @@ void set_ozone_shutdown(void) {
void process_switch_key(void) { void process_switch_key(void) {
// //
switch_key_state = !switch_key_state; switch_key_state = !switch_key_state;
printf("switch_key_state%d\n", switch_key_state);
if (switch_key_state) { // if (switch_key_state) { //
// update_timing_interval_begin_time();
set_ozone_starting_up(); set_ozone_starting_up();
} else { // } else { //
set_ozone_shutdown(); set_ozone_shutdown();
@ -279,14 +316,13 @@ void process_switch_key(void) {
//###################### ################// //###################### ################//
void set_interval_time(void) { void set_interval_time(void) {
//
g_count_interval_down_begin_sys_time = get_sys_ticket();
update_interval_down_begin_sys_time();
switch (interval_key_press_frequency) { switch (interval_key_press_frequency) {
case 0: case 0:
printf("begin interval");
printf("begin interval\n");
g_ozone_interva_stat = true; g_ozone_interva_stat = true;
g_ozone_interval_time = 300000;
// g_ozone_interval_time = 3600000;
// g_ozone_interval_time = 300000; // 5
g_ozone_interval_time = 60000; // 5
interval_key_press_frequency = 1; interval_key_press_frequency = 1;
break; break;
case 1: case 1:
@ -298,36 +334,33 @@ void set_interval_time(void) {
} }
static void ozone_interval_begin(void) { static void ozone_interval_begin(void) {
int interval_ozen_gears = 0, interval_time_key_press_frequency = 0;
int interval_ozen_gears = 0;
//int interval_time_key_press_frequency = 0;
if (g_ozen_gears == 0) { if (g_ozen_gears == 0) {
interval_ozen_gears = 3;
interval_ozen_gears = 2;
} else { } else {
interval_ozen_gears = g_ozen_gears - 1; interval_ozen_gears = g_ozen_gears - 1;
} }
if (time_key_press_frequency == 0) {
interval_time_key_press_frequency = 4;
} else {
interval_time_key_press_frequency = time_key_press_frequency - 1;
}
// if (time_key_press_frequency == 0) {
// interval_time_key_press_frequency = 4;
// } else {
// interval_time_key_press_frequency = time_key_press_frequency - 1;
// }
//PWM输出 //PWM输出
set_ozen_gears(interval_ozen_gears); set_ozen_gears(interval_ozen_gears);
if (ozone_work_state == 2) {
timing_led_on(interval_time_key_press_frequency); //led灯
}
// if (ozone_work_state == 2) {
// timing_led_on(interval_time_key_press_frequency); //led灯
// }
} }
void ozone_interval_over(void) { close_ozone_work(); }
static void close_ozone_work(void) {
void ozone_interval_over(void) {
set_pwm_frequency_duty(g_frequency, g_duty[3]); //PWM输出 set_pwm_frequency_duty(g_frequency, g_duty[3]); //PWM输出
gears_led_on(3); //RGB
timing_led_on(4); //4led灯
port_fan_set(false); // port_fan_set(false); //
} }
bool g_interva_flag = false;
void is_ozone_interva_time_over(void) { void is_ozone_interva_time_over(void) {
if (port_haspassedms(g_count_interval_down_begin_sys_time) >= if (port_haspassedms(g_count_interval_down_begin_sys_time) >=
g_ozone_interval_time) { g_ozone_interval_time) {
g_count_interval_down_begin_sys_time = get_sys_ticket();
update_interval_down_begin_sys_time();
if (g_interva_flag == false) { if (g_interva_flag == false) {
g_interva_flag = true; g_interva_flag = true;
printf("work over\r\n"); printf("work over\r\n");
@ -346,3 +379,10 @@ void power_on_ozone_work_state(void) {
g_ozen_gears = 1; // g_ozen_gears = 1; //
time_key_press_frequency = 5; // time_key_press_frequency = 5; //
} }
static void close_ozone_work(void) {
set_pwm_frequency_duty(g_frequency, g_duty[3]); //PWM输出
gears_led_on(3); //RGB
timing_led_on(4); //4led灯
port_fan_set(false); //
}

26
APP/ozone_work.h

@ -6,6 +6,32 @@
#include "port.h" #include "port.h"
#include "timer.h" #include "timer.h"
#include "systick.h" #include "systick.h"
#define LED_INIT(_bool, _port_led_set) \
{ .set_led_state = _bool, .port_led_set = _port_led_set }
typedef void (*port_led_set_t)(bool state);
typedef struct {
bool set_led_state;
port_led_set_t port_led_set;
} led_t,rgb_t;
static led_t s_leds[] = {
LED_INIT(false, port_led0_set),
LED_INIT(false, port_led1_set),
LED_INIT(false, port_led2_set),
LED_INIT(false, port_led3_set),
};
static rgb_t s_rgb[] = {
LED_INIT(false, port_led_r_set),
LED_INIT(false, port_led_g_set),
LED_INIT(false, port_led_b_set),
};
void gears_led_on(uint8_t led_number); void gears_led_on(uint8_t led_number);
void timing_led_on(uint8_t led_number); void timing_led_on(uint8_t led_number);
void set_ozen_gears(int ozen_gears); void set_ozen_gears(int ozen_gears);

34
PlatForm/irqhandler.c

@ -20,4 +20,38 @@ void SysTick_IRQHandler(void) {
} }
/*********************************************************
: void ADC_IRQHandler(void)
: ADC中断处理
:
:
:
**********************************************************/
extern uint16_t meanvalue;
void ADC_IRQHandler()
{
if ((ADC_GetIFStatus(ADC_IF_ACPOVER) == SET) && (ADC_GetIEStatus(ADC_IE_ACPOVER) == SET))
{//ADC平均值中断
ADC_ClearIFStatus(ADC_IF_ACPOVER);
meanvalue = ADC_GetACPMeanValue();
printf("acp\r\n");
}
if ((ADC_GetIFStatus(ADC_IF_ACPMIN) == SET) && (ADC_GetIEStatus(ADC_IE_ACPMIN) == SET))
{//ADC平均值与最小阈值比较中断
printf("little\r\n");
ADC_ClearIFStatus(ADC_IF_ACPMIN);
}
if ((ADC_GetIFStatus(ADC_IF_ACPMAX) == SET) && (ADC_GetIEStatus(ADC_IE_ACPMAX) == SET))
{//ADC平均值与最大阈值比较中断
printf("big\r\n");
ADC_ClearIFStatus(ADC_IF_ACPMAX);
}
if ((ADC_GetIFStatus(ADC_IF) == SET) && (ADC_GetIEStatus(ADC_IE) == SET))
{//ADC每次采集完成中断
printf("if\r\n");
ADC_ClearIFStatus(ADC_IF);
}
}

2
REDEME.md

@ -29,7 +29,9 @@ T16N_TOP0 计数器的最大值
T16N0OUT0/1 在那个引脚上输出 T16N0OUT0/1 在那个引脚上输出
芯片配置字位于 FLASH 存储器的 INFO0 信息区,用户可在 ISP 编程时进行设置 芯片配置字位于 FLASH 存储器的 INFO0 信息区,用户可在 ISP 编程时进行设置
ADC:
斩波器:直流斩波是将固定的直流电压变换成可变的直流电压 斩波器:直流斩波是将固定的直流电压变换成可变的直流电压
中断标志位需软件清零
学习一款新的芯片,首先要搞清楚他的时钟树,其次搭建环境先跑提供的demo工程 学习一款新的芯片,首先要搞清楚他的时钟树,其次搭建环境先跑提供的demo工程

BIN
doc/~$项目需求.docx

BIN
doc/软件需求(1).pdf

BIN
doc/项目需求.docx

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

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

Loading…
Cancel
Save