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

📄 key.h

📁 电子钟(有二十四节气)
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _KEY
#define _KEY
/***********************键盘预定义******************************************/
#define up_array          0x01
#define down_array        0x02
#define clear_array       0x03
#define function_array    0x04
#define null              0

/********************************************************************************************
* 函数名称:Key_Idle()
* 功    能:键盘松开
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Key_Idle()
{
   while( ( P0 & 0x0f ) != 0x0f );
}

/********************************************************************************************
* 函数名称:Key_Scan()
* 功    能:键盘扫描
* 入口参数:无
* 出口参数:键值
*********************************************************************************************/
uchar Key_Scan()
{
   if( ( P0 & 0x0f ) != 0x0f )         //判断按键
   {
       Delay(4);                  //消除抖动
       if( ( P0 & 0x0f ) != 0x0f )
	   {
          
          switch ( P0 & 0x0f )              //将按键码转换成键值
          {  
             case  0x0e: return  up_array;  
             case  0x0d: return  down_array;
             case  0x0b: return  clear_array; 
             case  0x07: return  function_array;
             default :   return  null;
          }
	   }
	  
   }
   return null;
}


/********************************************************************************************
* 函数名称:Key_Set_Clock( uchar * clock_time )
* 功    能:键盘设定时间
* 入口参数:clock_time[6]指针
* 出口参数:无
*********************************************************************************************/
void Key_Set_Clock( uchar * clock_time )
{
   uchar *i; 
   i = clock_time ;
   clock_time ++ ;   //指向分
   Lcd_Set_Clock( 2, i );  //屏幕显示更该时间 
   Key_Idle();
   while(1)
   {
      uchar minute;
      minute = ( ( * clock_time >>4 ) * 10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
      switch( Key_Scan() )   //调整分  
      {	  	  	  	  
         case    up_array:   
		                     { 
							   minute ++  ;      if( minute == 60 ) minute=0;
                               ( * clock_time ) =  minute/10 <<4 ; ( * clock_time ) = ( * clock_time ) | ( minute%10);                         //HEX 转 BCD 
							   Lcd_Set_Clock( 2, i );  //屏幕显示更该时间 
 							   Key_Idle();
                             }
                              break;
         case    down_array: 
		                     { 
							   if( minute == 0 )  minute = 60;   minute --; 
                               ( *clock_time ) =  minute/10 <<4 ;  ( * clock_time ) = ( * clock_time ) | ( minute%10);                         //HEX 转 BCD  
                               Lcd_Set_Clock( 2, i );  //屏幕显示更该时间
                               Key_Idle();
                             }
                             break;
 //******************************************************************************************************************************************************   
         case   function_array:    //调整时
                           {
						      clock_time ++;   //指向时
                              Lcd_Set_Clock( 3, i );   //屏幕显示更该时间 
							  Key_Idle();
                              while(1)
                              {
							     uchar hour;
                                 hour = ( ( * clock_time >>4 ) * 10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
                                 switch( Key_Scan())
                                 {
                                    case    up_array:  
								                    {
												       hour ++; if(hour == 24) hour = 0; 
													   ( * clock_time ) = hour/10 <<4 ;  ( * clock_time ) = ( * clock_time ) | (hour%10);                         //HEX 转 BCD 
                                                       Lcd_Set_Clock( 3, i );   //屏幕显示更该时间 
							                           Key_Idle();
													} 
													break;

                                    case  down_array:  
								                    {
												       if(hour == 0) hour = 24; hour --; if( hour == 0) hour =23;
												       ( * clock_time ) = hour/10 <<4 ; ( * clock_time ) = ( * clock_time ) | (hour%10);                         //HEX 转 BCD 
													   Lcd_Set_Clock( 3, i );   //屏幕显示更该时间 
							                           Key_Idle();
													}
												    break; 
       //******************************************************************************************************************************************************   
                                    case function_array:    //调整日
  								                      {
                                                         clock_time ++;   //指向日
                                                         Lcd_Set_Clock( 4, i );   //屏幕显示更该时间 
							                             Key_Idle();
														 while(1)
														 {
														    uchar day;
															day = ( (*clock_time >>4)*10 ) + ( (*clock_time)&0x0f );                                //BCD 转 HEX
															switch(Key_Scan())
															{
															   case up_array:
   															                { 
																		       day ++; if(day == 32) day = 1; 
																			   ( * clock_time ) = day/10 <<4 ;  ( * clock_time ) = ( * clock_time) | (day%10);                         //HEX 转 BCD 
																			   Lcd_Set_Clock( 4, i );   //屏幕显示更该时间 
							                                                   Key_Idle();
																			}
																		    break;
                                                               case down_array: 
															                  { 
																			     if(day == 0) day= 31;  day --; if(day == 0) day=31; 
																				 (*clock_time) = day/10 <<4 ;     (*clock_time) = (*clock_time) | (day%10);                         //HEX 转 BCD ;
																			     Lcd_Set_Clock( 4, i );   //屏幕显示更该时间 
							                                                     Key_Idle();
																			  }
																			  break;
	    //******************************************************************************************************************************************************   
		                                                       case function_array:    //调整月
															                     {
                                                                                    clock_time ++;   //指向月
																					Lcd_Set_Clock( 5, i );   //屏幕显示更该时间 
							                                                        Key_Idle();
																					while(1)
																					{
																					   uchar month;
																					   month = ( ( * clock_time >>4)*10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
                                                                                       switch(Key_Scan())
																					   {
                                                                                          case up_array: 
																						               {  
																									      month ++; if(month == 13) month= 1;
																										  ( * clock_time ) = month/10 <<4 ;  ( * clock_time ) = ( * clock_time ) | (month%10);                         //HEX 转 BCD 
																										  Lcd_Set_Clock( 5, i );   //屏幕显示更该时间 
							                                                                              Key_Idle();
																									   }
																									   break;
                                                                                          case down_array:
																						                 {  
																										    if(month==0) month = 12; month --; if(month==0) month = 12; 
																											( * clock_time ) = month/10 <<4 ; ( * clock_time ) = ( * clock_time ) | (month%10);                         //HEX 转 BCD 
																										    Lcd_Set_Clock( 5, i );   //屏幕显示更该时间 
							                                                                                Key_Idle();
																										 }
                                                                                                            break;
	    //******************************************************************************************************************************************************   
																						  case function_array:    //调整年
																						                    {
																											   clock_time ++;   //指向年
																											   Lcd_Set_Clock( 6, i );   //屏幕显示更该时间 
							                                                                                   Key_Idle();
																											   while(1)
																											   {
																											       uchar year;
																											       year = ( ( * clock_time >>4 ) * 10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
                                                                                                                   switch( Key_Scan() )
																												   {
																												      case up_array: 
																													               {   
																																      year ++; if(year == 100) year= 0; 
																																	  ( * clock_time ) = year / 10 << 4 ;  ( * clock_time ) = ( * clock_time ) | (year%10);                         //HEX 转 BCD 
																																	  Lcd_Set_Clock( 6, i );   //屏幕显示更该时间 

⌨️ 快捷键说明

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