第七節 獨立按鍵之中斷方式

2021-07-08 09:21:48 字數 1391 閱讀 4843

複製key工程,重新命名為keyinterrupt。剛剛我們用查詢的方式讀取按鍵的狀態。但是這種方式在實際的工程中沒有實際的應用價值,下面我們採用外部中斷的方式來讀取按鍵的狀態,每當按鍵按下時就會觸發一次外部中斷。為了p0.0口能夠觸發中斷,我們需要進行如下配置:

p0ien |= 0x01;  // p00 設定為中斷方式

pictl &=~ 0x01; // 下降沿觸發

ien1 |= 0x20; // 允許p0口中斷

p0ifg = 0x00; // 清除中斷標誌位

ea = 1; // 開總中斷

然後就需要編寫中斷服務函式了。這裡注意一點,在iar中的中斷函式有點特殊,格式為:

#pragma vector = 中斷向量

__interrupt 函式

所以我們的中斷函式為:

#pragma vector = p0int_vector

__interrupt void p0_isr(void)

p0ifg = 0; //清中斷標誌

p0if = 0; //清中斷標誌

}

在中斷中我們記錄按鍵按下,等待應用程式處理。而在主函式中我們需要處理按鍵按下事件,主函式中我們對按鍵計數並且通過lcd顯示。

int main(void)

; // 視訊記憶體

int keycnt = 0;

sysstartxosc();

lcd12864_init();

lcd12864_disstr(1, " key test");

p0sel &= ~0x01; // 設定為io功能

p0dir &= ~0x01; // 設定為輸入功能

p0ien |= 0x01; // p0.0 設定為中斷方式

pictl |= 0x01; // 下降沿觸發

ien1 |= 0x20; // 允許p0口中斷

p0ifg = 0x00; // 清除中斷標誌位

ea = 1; // 開總中斷

sprintf(lcdbuf, " key count : %d", keycnt++); // 按鍵計數

lcd12864_disstr(3, lcdbuf);

while(1)

else}}

return 0;

}

每按一次按鍵計數加1,效果如圖所示:

第七節 指標

go語言有指標這一概念。直接上 func pointtest 定義int型別的值a,並且賦值為3 定義int型別指標變數p,並且取a的位址賦值給p 輸出a和p 控制台 3 0xc00000a0a8 3 process finished with exit code 0 a的值為3,p為a在記憶體中的...

第七節 覆蓋虛介面

有時候我們需要表達一種抽象的東西,它是一些東西的概括,但我們又不能真正的看到它成為乙個實體在我們眼前出現,為此物件導向的程式語言便有了抽象類的概念。c 作為乙個物件導向的語言,必然也會引入抽象類這一概念。介面和抽象類使您可以建立元件互動的定義。通過介面,可以指定元件必須實現的方法,但不實際指定如何實...

第七節 結構體

1,下面程式是執行結果是?include include struct stu void fun struct stu p intmain1 fun students 1 system pause return0 2,喝汽水,1瓶汽水1元,2個空瓶可以換一瓶汽水,給20元,可以多少汽水 程式設計實現...