一、按鍵功能與原理圖介紹
在學(xué)習(xí)單片機、嵌入式過程中;按鍵是必學(xué)的一個外設(shè),常見的按鍵分為為獨立按鍵、矩陣按鍵等。下面這里介紹的是獨立按鍵,原理比較簡單,只需要將與單片機連接的IO口配置成輸入模式,然后不停的檢測按鍵的狀態(tài)即可,根據(jù)原理圖分析可以提前知道按鍵空閑和按下是什么狀態(tài),程序里檢測到之后對應(yīng)處理即可。
二、GPIO口輸入模式配置
GPIO口作為按鍵檢測使用時,需要將模式配置成輸入模式,詳細(xì)的配置步驟下面有截圖,在手冊里每個功能位都有詳細(xì)介紹。
三、核心代碼
#include
//定義LED燈的端口
#define LED1 P1_2
#define LED2 P1_3
//定義KEY按鍵的端口
#define KEY1 P1_0 //定義按鍵為P1_0口控制
#define KEY2 P1_1 //定義按鍵為P1_1口控制
/*
函數(shù)功能:LED燈IO口初始化
硬件連接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
P1DIR |=0x3<<2; //配置P1_2、P1_3為輸出模式
LED1 = 1;
LED2 = 1;
}
/*
函數(shù)功能:按鍵IO口初始化
硬件連接:KEY1-->P1_0 KEY2-->P1_1
*/
void KEY_Init(void)
{
P1SEL&=~(0x3<<0); //配置P1_0,P1_1處于通用GPIO口模式
P1DIR&=~(0x3<<0); //配置P1_0,P1_1為輸入模式
P1INP|= 0x3<<0; //上拉
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=193;c>0;c--)
for(b=118;b>0;b--)
for(a=2;a>0;a--);
}
/*
函數(shù)功能:按鍵掃描
返 回 值:按下的按鍵值
*/
unsigned char Key_Scan(void)
{
static unsigned char stat=1;
if((KEY1==0||KEY2==0)&&stat)
{
stat=0;
delay10ms();
if(KEY1==0)return 1;
if(KEY2==0)return 2;
}
else
{
if(KEY1&&KEY2)stat=1;
}
return 0;
}
/*主函數(shù)*/
void main(void)
{
unsigned char key;
LED_Init();//初始化LED燈控制IO口
KEY_Init();//按鍵初始化
while(1)
{
key=Key_Scan();
if(key)
{
LED1 = !LED1;
LED2 = !LED2;
}
}
}
復(fù)制代碼
編寫完畢之后,編譯,下載程序、測試按鍵
審核編輯:湯梓紅
-
單片機
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635355 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52104 -
CC2530
+關(guān)注
關(guān)注
19文章
221瀏覽量
58041 -
按鍵檢測
+關(guān)注
關(guān)注
0文章
23瀏覽量
4836
發(fā)布評論請先 登錄
相關(guān)推薦
評論