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

📄 lcd_display.c

📁 电表解决方案概要power_meter_r8c2g_source_code
💻 C
📖 第 1 页 / 共 4 页
字号:
/***********************************************************************/
/*                                                                     */
/*  FILE        :lcd_display.c                                         */
/*  DATE        :Sun, May 06, 2007                                     */
/*  DESCRIPTION :main program file.                                    */
/*  CPU GROUP   :2B                                                    */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.8).     */
/*                                                                     */
/***********************************************************************/

//#pragma SECTION program pro_2

/*****************************************************************************/

#include "sfr_r82b.h"
#include "s6b0108.h"
#include "disp_definel.h"
#include "main_define.h"

//#include "ramdefine.h"

/***************************************************************************************************************

按键扫描处理程序:

void key_scan()

扫描:scan_buff 初始值为 0x10, 扫描过程为,当scan_buff每右移一位,键值暂存变量 key_buff_0 右移两位用以保存扫描

      得到的键值,去抖时间通过增减扫描判断的次数决定

***************************************************************************************************************/  

void key_scan(void)
{
  unsigned char i;
  unsigned char j;
  unsigned char k;
	
  if (key_4ms_buff == 0)				/* 每 4ms 进行一次键扫描 */
   {
	   key_4ms_buff = 1;
	   
	   i = scan_buff;
	   scan_buff = scan_buff >> 1;
	   if (scan_buff == 0 )
	    {
			scan_buff = 0x10;
			scan_count ++;
		}
	
	   p2 &=  0xe0;
	   
	   asm("nop");

	   p2 |=  i;						/* 键扫描列输出 */
	   
	   asm("nop");
  
	   j = p2;							/* 键扫描行读入 */
	   
	   asm("nop");

	   j &= 0x60;
	   
	   j = j << 1;
	   
	   if  (i > 0x02)
	    {
	   		key_buff_0 += j;
	   		key_buff_0 = key_buff_0 >> 2;	
	    }   
	     
	   else if (i == 0x02)
	    {
		   key_buff_0 += j;
 		   key_buff_4 = key_buff_0;			/* 保存前4位键值 */
	    }	   	
		
	   else if (i == 0x01)
	    {
		   if (j != 0)
		   key_buff_1 = Key_9;	
		   else 
		   key_buff_1 = 0;
		   	   
		   key_buff_0 = 0x00;				/* 保存第5位键值 */
	    }  

	   if ((key_debunce_0 != key_buff_4)||(key_debunce_1 != key_buff_1))
		{
			key_debunce_0 = key_buff_4;			/* 去抖同步 */
			key_debunce_1 = key_buff_1;		 
			scan_count = 0;
		}
	   else if (scan_count == 2)				/* 去抖动处理,延长去抖时间,只需增加scan_count的值	*/
		{
			key_buff_2 = key_buff_4;
			key_buff_3 = key_buff_1;
			scan_count = 0;
		}	
   }

  return;
  
}

/***************************************************************************************************************

按键逻辑处理程序:

void key_judge(void)

有按键按下时,进入相应的功能处理程序

***************************************************************************************************************/   

void key_judge(void)
{
  unsigned char k;
	
//  key_buff_2 = btkeyFlag;
//if (status_buff == INITIAL)	
// {

  if (save_key_1 == key_buff_2)
   {
	   ;									/* 持续按键处理 */
   }
   
  else if (save_key_1 != key_buff_2)
   { 
	   
	save_key_1 = key_buff_2;			/* 如果有新的键值则进入按键处理,并保存键值 */
			   
	if (key_buff_2 != 0)
	 {
//		 key_press_flag = 1;
//		 key_buzz_flag = 1;
//		 buzz_24ms_buff = 6;

//		 key_release = 0;	 	 
	 }
	 	 
	if (key_buff_2 == 0)			/* 程序运行过程中水位键补水处理,水位键松开,补水停止 */
	 {
//		 key_release = 1;
		 
		 if (status_buff == RUN)		// this should be changed to current process buff
		  {
			  k = output_buff;
			  if ((k & INLET)&&(run_water_key_flag == 1))
			   {
				   run_water_key_flag = 0;
				   output_buff &= (~INLET);			/* 补水停止 */
			   }
		  }
	 }	 
	 	 
	Tflash = 0;						/* 有新键按下时闪烁计时变量重置 */
	flash_switch_flag = 0;
	
	Pflash = 0;					
	Pflash_switch_flag = 0x00;		
	
	if (key_buff_2 == Key_Power)		/* 任何状态下电源键按下进入电源键处理程序 */
	 {
		 key_power();
		 return;
	 }
	 
	else if (key_buff_2 == Key_Water)
	 {
		 if (status_buff == RUN)					/* 程序运行中按水位键补水 */
		  {
//			  if (water_full_flag != 1)
//			   {
				   output_buff |= INLET;			/* 补水运行 */
				   run_water_key_flag = 1;
//			   }
		  }
	 }	 
	 
	else if (key_buff_2 == Key_SetUp)
	 {
		 check_2s_buff = 1;						/* 程序运行中程序设定浏览按键处理 */
		 		 
		 if ((status_buff == RUN)||(status_buff == PRESET))
		 confirm_num ++;
		 
		 if (confirm_num == 6)					/* 可以浏览 6 种参数设定 */
		 confirm_num = 0;
	 }	 	 
	 	
    if ((status_buff == INITIAL)||(status_buff == STOP))
	 {
	    status_5m_buff = 5;			/* 状态判定计时变量重置 */
		
		switch (key_buff_2)			/* 在初始状态或停止状态下,有按键按下则进入相应按键处理 */
	 	 {
		 	case Key_Cancel:
		 
		 	disp_key_confirm();				/* 确定键处理程序 */
		 
		 	break;
		 
		 	case Key_Water:
		 
		 	disp_key_water();				/* 水位键处理程序 */
		 
		 	break;
		 
// 		 	case Key_Start:
		 
//		 	disp_key_start();
		 
//		 	break;
		 
		 	case Key_Program:
		 
		 	disp_key_program();				/* 程序键处理程序 */
		 
		 	break;
		 
		 
		 	case Key_Function:
		 
		 	disp_key_function();			/* 功能键处理程序 */
		 
		 	break;		 
		 
		 
		 	case Key_SetUp:
		 
		 	disp_key_setup();				/* “+ ”、“ - ”键处理程序 */
		 
		 	break;
		 
		 	case Key_SetDown:
		 
		 	disp_key_setup();				/* “+ ”、“ - ”键处理程序 */
		 
		 	break;
		 
		 	case Key_Power:
		 
//			key_press_flag = 0;
		 	key_power();					/* 电源键处理程序 */
		 
		 	break;
		 
		 	case Key_OK:
		 
		 	disp_key_confirm();				/* 确定键处理程序 */
		 
		 	break;

	 	 };
	 }
   }
// }
 
  if (save_key_2 != key_buff_3)
 	{
	 	save_key_2 = key_buff_3;
		
	 	if (key_buff_3)
	  	 {
		 	key_start();					/* 开始键处理程序 */
	  	 }	 
 	}
   
 return;									// if same key, return;
 
}

/***************************************************************************************************************

电源键处理程序:

***************************************************************************************************************/ 

void key_power(void)
{	
  key_buzz_flag = 1;
  buzz_24ms_buff = 6;	  	  
	  
 if (status_buff == STAND_BY)
  {
      BlackLight = 0;					/* 开背光 */
	  
	  //buzz_power();
      status_buff = INITIAL;			/* 从待机状态切换到初始状态 */
      status_5m_buff = 5;				/* 状态判定机时变量重置 */
	  default_flag = 1;					/* 默认程序运行标志置位 */
	  
	  power_key_flag = 1;				/* 电源按键标志置位 */
	  kaiji_3s_buff = 3;				/* 开机画面 3s 计时变量计时 */
	  first_init_flag = 1;				/* 系统上电初始状态下程序设置标志置1 */
	  
	  run_1s_buff = 0;					/* 系统运行时钟基准 1s 变量清零 */ 
	  
	  Set_Screen(CS1, nBitmapDot0_KaiJi_1);		/* 显示开机画面 */			  
	  Set_Screen(CS2, nBitmapDot0_KaiJi_2);
	  Set_Screen(CS3, nBitmapDot0_KaiJi_3);	  
	  
      return;
  }
  else if (status_buff != STAND_BY)
  {
	  BlackLight = 1;					/* 关背光 */
	  
      status_buff = STAND_BY;			/* 从初始状态切换到待机状态 */
      run_1s_buff = 0;					/* 系统运行时钟基准 1s 变量清零 */
	  
	  power_key_flag = 0;				/* 电源按键标志清零 */
	  first_init_flag = 0;				/* 系统上电初始状态下程序设置标志置0 */
	  
	  Clr_Screen_0();					/* 清屏程序 */
	  Clr_Screen_1();
	  Clr_Screen_2();
	
	  flash_switch_flag =0x00;	  
	  
//----------------------------------------------------------------	  

	  process_buff = Inlet;			/* 此为调试显示程序是使用 */
	  left_time_buff = 45;			/* 此为调试显示程序是使用 */
	
	  program_buff_0 = 0;
	  water_level_buff_0 = 6;	  
	  
//----------------------------------------------------------------	  

	  wash_init();					/* 初始化全局变量 */
	  
  }	
  
  return;
}


/***************************************************************************************************************

开始键处理程序:

***************************************************************************************************************/

void key_start(void)
{
	  key_buzz_flag = 1;
	  
 if ((status_buff == INITIAL)||(status_buff == STOP))
  {
//	if (preset_set_flag == 0)
//	 {
  		program_start_flag = 1;
		program_pause_flag = 0;
		
		if (status_buff == INITIAL)
		program_set_change_flag = 0;
		
		if ((status_buff == STOP)&&(program_set_change_flag == 0))
		output_buff = save_output_buff;
		
		else if ((status_buff == STOP)&&(program_set_change_flag == 1))
		program_set_change_flag = 0;
	
		run_1s_buff = 0;	
		
		if (preset_set_flag == 1)
		status_buff = PRESET;	
		else		 
    	status_buff = RUN;			/* 从初始状态或停止状态切换到运行状态 */
		
		if (run_save_water_flag == 1)			/* 留水运行时,开始按键释放留水状态 */
		 {
			 run_save_water_flag = 0;
			 release_save_water_flag = 0;
			 start_save_water_flag = 0;
			 save_water_number --;
			 
			 buzz_15m_buff = 0;
			 buzz_flag = 0;
		 }

//		process_key_falg = 1;

		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;
		
//		water_level_buff = water_level_buff_0;
//		program_buff = program_buff_0;
		
		Pflash = 0;
		Tflash = 0;		
				
		Pflash_switch_flag = 0x00;	
		run_page3_flag = 0;
	
		switch (program_buff)			/* 当程序选定时,用户按下开始键程序先计算程序运行需要时间 */
	 	{
		 case Memo_PGM:	
		 
		 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[1][1];
			 main_wash_time = Memo_Wash_Time_Table[1][1];  
		  }		
		   
		 program_left_time = program_time(Memo_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;
		 
		 case Strong_PGM:
		 
		 main_soak_time = Strong_Soak_Time_Table[water_level];
		 main_wash_time = Strong_Wash_Time_Table[water_level];
		 		 
		 program_left_time = program_time(Strong_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;
		 
		 case Soft_PGM:

		 main_soak_time = Soft_Soak_Time;
		 main_wash_time = Soft_Wash_Time;	
		 		 
		 program_left_time = program_time(Soft_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;
		 
		 case Quick_PGM:
		 
		 main_wash_time = Speedy_Wash_Time;				 
		 program_left_time = program_time(Speedy_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;		 
		 
		 case Standard_PGM:	
		 
		 main_soak_time = Standard_Soak_Time_Table[water_level][texture_buff];
		 main_wash_time = Standard_Wash_Time_Table[water_level][texture_buff];
		 		 
		 program_left_time = program_time(Standard_Time_Table, Left_time_Colum_Table[program_buff]);				

		 break;
		 
		 case Child_PGM:
		 
		 main_soak_time = Child_Soak_Time;
		 main_wash_time = Child_Wash_Time;
		 		 
		 program_left_time = program_time(Child_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;
		 
		 case Wool_PGM:
		 
		 main_soak_time = Wool_Soak_Time;
		 main_wash_time = Wool_Wash_Time;
		 		 
		 program_left_time = program_time(Wool_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;
		 
		 case Silk_PGM:
		 
		 main_wash_time = Silk_Wash_Time;	
		 		 
		 program_left_time = program_time(Silk_Time_Table, Left_time_Colum_Table[program_buff]);

		 break;
		 		 
		 case Wash_PGM:
		 program_left_time = program_time(Single_Wash_Time_Table, Left_time_Colum_Table[program_buff]);
		 break;
		 
		 case Rinse_PGM:
		 program_left_time = program_time(Rinse_Time_Table, Left_time_Colum_Table[program_buff]);
		 break;
		 
		 case Spin_PGM:
		 program_left_time = program_time(Single_Spin_Time_Table, Left_time_Colum_Table[program_buff]);
		 break;
		 
		 case Special_PGM:	
		 program_left_time = program_time(TubeDry_Time_Table, Left_time_Colum_Table[program_buff]);	 
		 break;

	 	};		
		
		 if (key_preset_flag == 1)
		  {
			  key_preset_flag = 0;	
			  preset_time_buff += program_left_time / 60;
			  
			  if (program_left_time % 60 >= 30)
			  preset_time_buff +=1;
		  }
			 	
		return;
		
//	 }
/*	else if (preset_set_flag == 1)
	{
		status_buff = PRESET;
  		program_start_flag = 1;
		program_pause_flag = 0;		
		run_1s_buff = 0;	
		
		Pflash = 0;
		Tflash = 0;		
				
		Pflash_switch_flag = 0x00;	
		run_page3_flag = 0;		
		
		return;
	}*/
  }
 else  if ((status_buff == RUN)||(status_buff == TEST)||(status_buff == PRESET))
  {
	/* 当洗衣机处于运行,测试,预约运行状态时,按开始键切换位停止状态 */	  
	
  	program_start_flag = 0;
	program_pause_flag = 1;	  
	
	save_output_buff = output_buff;
	
    status_buff = STOP;
	run_1s_buff = 0;
	
	check_2s_buff = 0;
	confirm_num = 0;
	menu_level_buff = Menu_Level_4;	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -