1. 程式人生 > >通用IO(二)

通用IO(二)

前言

上期我們講了通用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的中斷呢?如何讓當前程式執行起來比較高效呢?請繼續關注我的部落格。

授人以魚不如授人以漁,這裡我就不釋出原始碼了,希望大家能靠自己慢慢理解。