📄 operation_a.c
字号:
#include "sfr_r82b.h"
#include "main_define.h"
#include "disp_definel.h"
void power_down(void);
/******************************************************************************************/
//#pragma SECTION program pro_1
/***************************************************************************************************************
void logic(void)
洗衣机程序运行主逻辑处理程序:
***************************************************************************************************************/
void logic(void)
{
unsigned char i;
run_stream(); /* 刷新电机正反转状态 */
if (water_level_buff <= 4) /* 判定高、中、低水位 */
water_level = 0;
else if ((water_level_buff > 4)&&(water_level_buff < 8))
water_level = 1;
if (water_level_buff >= 8)
water_level = 2;
if (run_save_water_flag == 1)
status_buff = STOP; /* 当留水进行时,切换为停止状态 */
if (run_err_flag == 1)
status_buff = STOP; /* 当错误处理进行时,切换为停止状态 */
if ((status_buff == TEST)&&(t_mode_switch_flag == 1))
{
run_1s_buff = 0; /* 测试状态处理 */
t_mode_switch_flag = 0;
}
else if ((status_buff == TEST)&&(test_start_flag == 1))
{
run_1s_buff = 0; /* 测试状态处理 */
test_1_start_flag = 0;
}
else if ((status_buff == TEST)&&(test_inlet_flag == 1)) //??????????????
{
run_1s_buff = 0; /* 测试状态处理 */
test_1_start_flag = 0;
}
if (run_1s_buff == 0) // every 1 second, program operates
{
run_1s_buff = 1; /* 系统运行 1s 变量置位,设定为每一秒处理一次主逻辑 */
// pass_time ++;
if (status_buff == STAND_BY)
{
output_buff = 0x00; /* 待机状态下,输出为 0 */
if ((run_demo_flag == 1)&&(power_key_flag == 1))
{
demo_judge();
status_buff = INITIAL; /* demo运行时,自动从待机状态切换到初始状态 */
kaiji_3s_buff = 3;
}
return;
}
if (status_buff == STOP)
{
output_buff = 0x00; /* 停止状态下,输出为零程序暂停标志置位 */
program_start_flag = 0;
program_pause_flag = 1;
if (run_save_water_flag == 1)
save_water(); /* 留水运行时,停止状态下进行留水处理 */
if (release_save_water_flag == 1)
{
status_buff = RUN; /* 留水状态释放,则程序回到运行状态 */
release_save_water_flag = 0;
}
return;
}
if (status_buff == INITIAL)
{
output_buff |= ACOFF;
if (default_flag == 1)
{
default_flag = 0; /* 初始状态下,执行默认程序设定 */
water_level_buff = 6;
operation_buff = 0x00; /* 初始化程序运行计数变量 */
}
if (status_5m_buff == 0)
{
status_buff = STAND_BY; /* 初始状态下,5分钟内没有按键按下则切换为待机状态 */
status_5m_buff = 5;
BlackLight = 1;
}
if(start_demo_flag == 1)
{
program_start_flag = 1; /* demo运行开始时,先初始化demo运行所需参数 */
program_pause_flag = 0;
output_buff = save_output_buff;
run_1s_buff = 0;
status_buff = RUN;
set_num = 0;
check_2s_buff = 0;
confirm_num = 0;
menu_level_buff = Menu_Level_4;
function_set_flag = 0;
program_set_flag = 0;
water_set_flag = 0;
Pflash = 0;
Tflash = 0;
Pflash_switch_flag = 0x00;
run_page3_flag = 0;
}
return;
}
if (status_buff == RUN)
{
output_buff |= ACOFF;
program_start_flag = 1;
program_pause_flag = 0;
operation(); /* 运行洗衣程序 */
}
if (status_buff == TEST) /* 测试状态时,进行相应的测试处理 */
{
if (test_buff == TEST1)
test_no_water();
if (test_buff == TEST2)
test_production();
if (test_buff == TEST3)
test_cycle();
if (test_buff == TEST4)
test_interm_spin();
if (test_buff == TEST5)
test_weight();
}
if (status_buff == PRESET)
{
output_buff = 0x00; /* 预约运行时,输出为 0 */
if (preset_time_buff == 0)
{
preset_set_flag = 0; /* 预约时间到,洗衣程序开始 */
status_buff = RUN;
return;
}
if (preset_confirm_flag == 0) /* not use */
{
water_flash_flag = 0;
program_flash_flag = 0;
}
if (preset_confirm_flag == 1) /* not use */
{
water_flash_flag = 1;
if (preset_5s_buff == 0)
{
preset_confirm_flag = 0;
preset_flash_flag = 1;
return;
}
}
}
else
return;
}
}
/******************************************************************************************
1, need consider unbalance and stop during interm_spin and cont_spin;
2, nedd consider how to handle err;
******************************************************************************************/
/*
void logic(void)
{
operation();
}
*/
/******************************************************************************************
void operation(void)
根据程序设定变量program_buff的值判定执行相应的洗衣程序
******************************************************************************************/
void operation(void)
{
unsigned char i;
unsigned char j;
switch (program_buff)
{
case Memo_PGM:
if (ac_frequency == 50) /* 根据AC电源频率确定水流表行的选择 */
stream_table_row = 0;
else if (ac_frequency == 60)
stream_table_row = 1;
ext_stream_table_row = 0;
if (program_auto_flag == 1) // 根据自动程序运行标志确定浸泡时间和洗涤时间
{
main_soak_time = Memo_Soak_Time_Table[water_level][texture_buff];
main_wash_time = Memo_Wash_Time_Table[water_level][texture_buff];
}
else if (program_auto_flag != 1)
{
main_soak_time = Memo_Soak_Time_Table[water_level][1];
main_wash_time = Memo_Wash_Time_Table[water_level][1];
}
if (soak_time_buff != 0) /* 已设定浸泡时间,应用设定值 */
main_soak_time = soak_time_buff * 10;
if (wash_time_buff != 12) /* 已设定洗涤时间,应用设定值 */
main_wash_time = wash_time_buff;
memo_program(); /* 调用记忆程序 */
if (process_left_time != 0) /* 程序运行完毕计算程序剩余时间 */
program_left_time = program_time(Memo_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Strong_PGM:
if (ac_frequency == 50)
stream_table_row = 2;
else if (ac_frequency == 60)
stream_table_row = 3;
ext_stream_table_row = 0;
main_soak_time = Strong_Soak_Time_Table[water_level];
main_wash_time = Strong_Wash_Time_Table[water_level];
if (soak_time_buff != 0) /* 已设定浸泡时间,应用设定值 */
main_soak_time = soak_time_buff * 10;
if (wash_time_buff != 12) /* 已设定洗涤时间,应用设定值 */
main_wash_time = wash_time_buff;
strong_program(); /* 调用强力程序 */
if (process_left_time != 0)
program_left_time = program_time(Strong_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Soft_PGM:
if (ac_frequency == 50)
stream_table_row = 4;
else if (ac_frequency == 60)
stream_table_row = 5;
ext_stream_table_row = 1;
main_soak_time = Soft_Soak_Time;
main_wash_time = Soft_Wash_Time;
if (soak_time_buff != 0) /* 已设定浸泡时间,应用设定值 */
main_soak_time = soak_time_buff * 10;
if (wash_time_buff != 12) /* 已设定洗涤时间,应用设定值 */
main_wash_time = wash_time_buff;
soft_wash_program(); /* 调用轻柔程序 */
if (process_left_time != 0) /* 计算剩余时间 */
program_left_time = program_time(Soft_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Quick_PGM:
if (ac_frequency == 50)
stream_table_row = 14;
else if (ac_frequency == 60)
stream_table_row = 15;
ext_stream_table_row = 1;
main_wash_time = Speedy_Wash_Time;
speedy_program(); /* 调用快速程序 */
if (process_left_time != 0)
program_left_time = program_time(Speedy_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Standard_PGM: // here need check how to decide the texture;
if (ac_frequency == 50)
stream_table_row = 8;
else if (ac_frequency == 60)
stream_table_row = 9;
ext_stream_table_row = 0;
main_soak_time = Standard_Soak_Time_Table[water_level][1];
main_wash_time = Standard_Soak_Time_Table[water_level][1];
if (soak_time_buff != 0)
main_soak_time = soak_time_buff * 10;
if (wash_time_buff != 12)
main_wash_time = wash_time_buff;
standard_program(); /* 调用标准程序 */
if (process_left_time != 0)
program_left_time = program_time(Standard_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Child_PGM:
if (ac_frequency == 50)
stream_table_row = 10;
else if (ac_frequency == 60)
stream_table_row = 11;
ext_stream_table_row = 0;
table_rom_number = j;
main_soak_time = Child_Soak_Time;
main_wash_time = Child_Wash_Time;
if (soak_time_buff != 0)
main_soak_time = soak_time_buff * 10;
if (wash_time_buff != 12)
main_wash_time = wash_time_buff;
child_program(); /* 调用儿童程序 */
if (process_left_time != 0)
program_left_time = program_time(Child_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Wool_PGM:
if (ac_frequency == 50)
stream_table_row = 12;
else if (ac_frequency == 60)
stream_table_row = 13;
ext_stream_table_row = 1;
table_rom_number = j;
main_soak_time = Wool_Soak_Time;
main_wash_time = Wool_Wash_Time;
if (soak_time_buff != 0)
main_soak_time = soak_time_buff * 10;
if (wash_time_buff != 12)
main_wash_time = wash_time_buff;
wool_program(); /* 调用毛织品程序 */
if (process_left_time != 0)
program_left_time = program_time(Wool_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Silk_PGM:
if (ac_frequency == 50)
stream_table_row = 14;
else if (ac_frequency == 60)
stream_table_row = 15;
ext_stream_table_row = 1;
main_wash_time = Silk_Wash_Time;
if (wash_time_buff != 12)
main_wash_time = wash_time_buff;
silk_program(); /* 调用丝织品程序 */
if (process_left_time != 0)
program_left_time = program_time(Silk_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Wash_PGM:
if (ac_frequency == 50)
stream_table_row = 0;
else if (ac_frequency == 60)
stream_table_row = 1;
ext_stream_table_row = 0;
if (wash_time_buff != 12)
main_wash_time = wash_time_buff;
single_wash_program(); /* 调用单洗程序 */
if (process_left_time != 0)
program_left_time = program_time(Single_Wash_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Rinse_PGM:
if (ac_frequency == 50)
stream_table_row = 0;
else if (ac_frequency == 60)
stream_table_row = 1;
ext_stream_table_row = 0;
rinse_program(); /* 调用漂洗程序 */
if (process_left_time != 0)
program_left_time = program_time(Rinse_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Spin_PGM:
single_spin_program(); /* 调用单脱程序 */
if (process_left_time != 0)
program_left_time = program_time(Single_Spin_Time_Table, Left_time_Colum_Table[program_buff]);
break;
case Special_PGM:
if (ac_frequency == 50)
stream_table_row = 0;
else if (ac_frequency == 60)
stream_table_row = 1;
ext_stream_table_row = 0;
tubedry_program(); /* 调用桶干燥程序 */
if (process_left_time != 0)
program_left_time = program_time(TubeDry_Time_Table, Left_time_Colum_Table[program_buff]);
break;
};
if (status_buff == STAND_BY)
program_left_time = 0;
return;
}
/******************************************************************************************
void standard_program(void): 标准程序运行处理
程序运行根据operation_counter的值判定某一时刻该执行何种对应过程
******************************************************************************************/
void standard_program(void) // use R5G standard_program + one time addition normal rinse
{
if (operation_counter < 21) /* 标准程序,operation_counter小于21时,程序正在运行 */
{
if (Standard_Time_Table[operation_counter]) /* 程序表数据不为 0,则执行相应过程 */
{
switch (operation_counter) /* 根据operation_counter确定执行相应浸、洗、漂、脱程序 */
{
case 0: /* 计数值为0,13时,执行标准进水过程 */
process_buff = Inlet;
case 13:
inlet(Standard_Time_Table[operation_counter], 0, water_level_buff);
break;
case 6: /* 计数值为6时,执行脱水过程 */
spin(Memo_Time_Table[operation_counter]);
break;
case 7: /* 计数值为7时,执行喷淋脱水过程 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -