複製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元,可以多少汽水 程式設計實現...