?? key.h
字號:
#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 ); //屏幕顯示更該時間
Key_Idle();
}
break;
case down_array:
{
if(year==0) year=100 ; year--; if(year==0) year=100;
( * clock_time ) = year/10 <<4 ; ( * clock_time ) = ( * clock_time ) | (year%10); //HEX 轉 BCD
Lcd_Set_Clock( 6, i ); //屏幕顯示更該時間
Key_Idle();
}
break;
//******************************************************************************************************************************************************
case function_array:
{
goto loop;
}
break;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
loop: Key_Idle();
}
/***************************************************************************************
* 名稱: Key_Set_Alarm( uchar * alarm_time )
* 功能: 鬧鐘調整
* 入口參數: 鬧鐘地址
* 出口參數:
****************************************************************************************/
void Key_Set_Alarm( uchar * alarm_time )
{
Lcd_Alarm( 1, alarm_time);//顯示初始鬧鈴時間
Key_Idle();
while( 1 )
{
switch( Key_Scan() )
{
case up_array:
{
( *alarm_time)++;
if(*alarm_time ==60)
*alarm_time=0;
Lcd_Alarm( 1, alarm_time );
Key_Idle();
}
break;
case down_array:
{
if( * alarm_time == 0 )
*alarm_time = 60;
( * alarm_time )--;
Lcd_Alarm( 1, alarm_time);
Key_Idle();
}
break;
case clear_array:
{
Lcd_Clear();
goto loop;
}
break;
case function_array:
{
alarm_time ++;
Lcd_Alarm( 2, alarm_time - 1 );
Key_Idle();
while( 1 )
{
switch( Key_Scan() )
{
case up_array:
{
( *alarm_time ) ++; if( *alarm_time == 24 ) * alarm_time = 0;
Lcd_Alarm( 2, alarm_time - 1 );
Key_Idle();
}
break;
case down_array:
{
if( * alarm_time == 0 ) *alarm_time = 24; ( *alarm_time ) --;
Lcd_Alarm( 2, alarm_time - 1 );
Key_Idle();
}
break;
case clear_array:
{
Lcd_Clear();
goto loop;
}
break;
case function_array:
{
Lcd_Clear();
goto loop;
}
break;
}
}
}
break;
}
}
loop: Key_Idle();
}
/****************************************************************************************
* 名稱: Key_Function( uchar * clock_time )
* 功能: 系統功能調試
* 入口參數: 時鐘程序
* 出口參數: 無
*****************************************************************************************/
void Key_Function( uchar * clock_time, uchar * alarm_time )
{
uchar temp = 2;
Lcd_Clear();
Lcd_Function( temp );
Key_Idle();
while( 1 )
{
switch( Key_Scan() )
{
case up_array:
{
temp ++;
if( temp > 2 )
temp = 2;
Lcd_Function( temp );
Key_Idle();
}
break;
case down_array:
{
temp--;
if( temp == 0 )
temp = 1;
Lcd_Function( temp );
Key_Idle();
}
break;
case clear_array:
{
Lcd_Clear();
goto loop;
}
break;
case function_array:
{
if( temp == 2 )
{
Lcd_Clear();
Key_Set_Clock(clock_time);
Clock_Initial(clock_time);
Lcd_Clear();
goto loop;
}
if( temp == 1 )
{
Lcd_Clear();
Key_Set_Alarm(alarm_time);
Lcd_Clear();
goto loop;
}
}
break;
}
}
loop: Key_Idle();
}
/********************************************************************************/
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -