⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 operation_a.c

📁 电表解决方案概要power_meter_r8c2g_source_code
💻 C
📖 第 1 页 / 共 4 页
字号:

#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 + -