通用IO(二)
阿新 • • 發佈:2019-02-03
前言
上期我們講了通用IO的功能暫存器和方向暫存器的使用。不瞭解的童鞋可以翻看我的部落格,這期我們講講配置暫存器的使用。
我們已經可以實現燈的閃爍了,但我們不知道怎麼控制它不要一直閃爍。這時候我們需要用到的是按鍵,我們需要檢測按鍵是否按下去了。這時候我們就需要用到配置暫存器。
配置暫存器PxINP的配置
關於配置,無非就是配置0和1嘛,而配置暫存器配置為0代表上拉/下拉狀態。1代表三態
具體配置如下,假設按鍵是P0_3口,
P0INP |=1<<3;//設定為三態
是不是so easy
那麼如何控制燈的閃爍呢?
大體思路是配置LED的初始化,按鍵的初始化。
/*定義LED1*/
#define LED1 P0_1
/*定義按鍵*/
#define SW1 P0_3
void LEDinit()//LED的初始化
{
P0SEL&=~(1<<1);//配置通用IO
PODIR |=1<<1;//配置輸出模式
}
void KEYinit()
{
P0SEL &=~(1<<3);//配置通用IO
P0DIR &=~(1<<3);//配置輸入模式
P0INP |=1<<3;//配置為三態
}
void main()
{
/*LED的初始化*/
LEDinit();
LED1=0;
/*按鍵的初始化*/
KEYinit();
while(1)
{
if(SW1==0)//判斷按鍵是否按下
{
Delay(100);//去抖操作
if(SW1==0)//再次檢測按鍵是否按下
{
while(!SW1);//等待按鍵釋放
LED1=~LED1;
}
}
}
}
通過上面的小程式是否很快就掌握了配置暫存器的使用。上面的小程式是利用查詢的方式來檢測按鍵是否按下。這樣子的毛病是當手不鬆開時,程式就無法執行下面的程式碼了,程式的利用率就很低效,那麼有解決方法嗎?
當然有啦!中斷方式嘛!
那麼我們該如何設定IO的中斷呢?如何讓當前程式執行起來比較高效呢?請繼續關注我的部落格。
授人以魚不如授人以漁,這裡我就不釋出原始碼了,希望大家能靠自己慢慢理解。