?? key.c
字號:
/*****************************************************************************
* 文件名: Key.c
* Copyright (c) 2008 *********武漢理工大學信息工程學院電信系
* 創建人: 王康
* 日 期: 2008.8.13
* 修改人: 王康
* 日 期:
* 描 述: 本文件定義了供調用的用戶外部函數,是關于板上5個按鍵的驅動程序,函數名
* 均以Key開頭.
* 接 口: K1 K1--P1.4 K2--P5.7
* K2 K5 K4 K3--P8.6 K4--P5.5
* K3 K5--P5.4
* 版 本: IAR V4.11
******************************************************************************/
//頭文件
#include "config.h"
/*****************************************************************************
* 函數名: Key_Init
* 輸 入: 無
* 輸 出: 無
* 功能描述: 本函數為鍵盤初始化子函數
* 全局變量: 無
* 調用模塊: 無
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
void Key_Init(void)
{
g_KeyPressed = 0;
g_KeyVal = 0;
g_KeyFlag = 0;
P1DIR = 0xef; //P1.4為輸入,其余為輸出模式
P5DIR = 0x0f; //P5.4~P5.7為輸入,其余為輸出模式
}
/*****************************************************************************
* 函數名: Key_Delay
* 輸 入: 無
* 輸 出: 無
* 功能描述: 本函數為延時子函數,主要用于按鍵去抖
* 全局變量: 無
* 調用模塊: 無
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
void Key_Delay(void)
{
uchar t = 100;
while(t--);
}
/*****************************************************************************
* 函數名: Key_Check
* 輸 入: 無
* 輸 出: 無
* 功能描述: 本函數為獲取鍵值子函數,用來檢查按鍵,確認鍵值
* 全局變量: 無
* 調用模塊: 無
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
void Key_Check(void)
{
uchar temp1;
uchar temp2;
temp2 = P1IN & 0x10;
temp1 = (P5IN & 0xf0) | (temp2 >> 1);
switch(temp1)
{
case 0xf0 : g_KeyVal = 1;
break;
case 0x78 : g_KeyVal = 2;
break;
case 0xb8 : g_KeyVal = 3;
break;
case 0xd8 : g_KeyVal = 4;
break;
case 0xe8 : g_KeyVal = 5;
break;
default : break;
}
}
/*****************************************************************************
* 函數名: Key_Event
* 輸 入: 無
* 輸 出: 無
* 功能描述: 本函數為按鍵查詢子函數,用來檢測鍵盤是否有鍵按下,若有則獲取鍵值
* 全局變量: 無
* 調用模塊: 無
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
void Key_Event(void)
{
uchar temp1;
uchar temp2;
temp2 = P1IN & 0x10; //讀取P1.4的狀態
//將5個按鍵的狀態全部讀入到temp1中,并且依次存放在temp1的高5位中
temp1 = (P5IN & 0xf0) | (temp2 >> 1);
if((g_KeyPressed == 0) & ((temp1 & 0xf8) < 0xf8))
{ //若g_KeyPressed為0,且有鍵按下
Key_Delay(); //延時去抖
if((g_KeyPressed == 0) & ((temp1 & 0xf8) < 0xf8))
{
g_KeyPressed = 1; //如果有鍵按下,則置位g_KeyPressed標志
Key_Check(); //調用獲取鍵值子函數
}
}
else if((g_KeyPressed == 1) & ((temp1 & 0xf8) == 0xf8))
{
g_KeyPressed = 0; //鍵已釋放則復位g_KeyPressed標志
g_KeyFlag = 1; //置位g_KeyFlag標志,表示可以讀出已獲取的鍵值
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -