資源描述:
《由淺入深,藍牙40BLE協(xié)議棧開發(fā)攻略大全(2)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。
1、本系列教程將結合TI推出的CC254xSoC系列,講解從環(huán)境的搭建到藍牙4.0協(xié)議棧的開發(fā)來深入學習藍牙4.0的開發(fā)過程。教程共分為六部分,本文為第二部分:?????? 第二部分知識點: 第六節(jié)獨立按鍵之查詢方式 第七節(jié)獨立按鍵之中斷方式 第八節(jié)CC254x內(nèi)部溫度傳感器溫度采集 第九節(jié)五向按鍵 第十節(jié)蜂鳴器? 有關TI的CC254x芯片介紹,可點擊下面鏈接查看: 主流藍牙BLE控制芯片詳解(1):TICC2540? 同系列資料推薦:? 由淺入深,藍牙4.0/BLE協(xié)議棧開發(fā)攻略大全(1)? 有關本文的工具下載,大家可以到以下這個地址:
2、 朱兆祺ForARM 第六節(jié)獨立按鍵之查詢方式 在MT254xboard上有一個獨立按鍵KEY1,如圖,獨立按鍵和復位鍵在整個班子的左上角。按鍵通過P0.0口和CPU連接,在沒有按鍵時為高電平,按下后為低電平。下面我們通過LCD來顯示獨立按鍵的狀態(tài)?! ∑鋵脑韴D如下: 我們先用查詢的方式讀取按鍵的狀態(tài)。因為按鍵接入在P0.0口,所以我們讀取P0.0口的電平即可知道按鍵的狀態(tài)?! int8KeyValue(void)//讀取按鍵狀態(tài) { if((P0&0X01)==0X00)//按下為低電平 { returnKEY_DOWN; }
3、else { returnKEY_UP; } } 這里我們在while循環(huán)中不斷的讀取按鍵狀態(tài),并且判斷是否改變,如果改變則改變LCD的顯示?! ntmain(void) { uint8OldKeyValue=0; uint8NewKeyValue=0; SysStartXOSC(); LCD12864_Init(); LCD12864_DisStr(1,“KeyTest”); //按鍵初始化 P0SEL&=~0X01;//設置為IO功能 P0DIR&=~0X01;//設置為輸入功能 while(1) { NewKeyVa
4、lue=KeyValue();//讀取按鍵狀態(tài) if(OldKeyValue!=NewKeyValue)//按鍵狀態(tài)改變 { OldKeyValue=NewKeyValue;//保存當前按鍵狀態(tài) if(OldKeyValue==KEY_DOWN) { LCD12864_DisStr(3,“KeyDown”); } else { LCD12864_DisStr(3,“KeyUp”); } } } return0; } 運行程序,效果如圖所示: 第七節(jié)獨立按鍵之中斷方式 復制Key工程,重命名為KeyInterrupt。剛剛我
5、們用查詢的方式讀取按鍵的狀態(tài)。但是這種方式在實際的工程中沒有實際的應用價值,下面我們采用外部中斷的方式來讀取按鍵的狀態(tài),每當按鍵按下時就會觸發(fā)一次外部中斷。為了P0.0口能夠觸發(fā)中斷,我們需要進行如下配置: P0IEN
6、=0X01;//P00設置為中斷方式 PICTL&=~0X01;//下降沿觸發(fā) IEN1
7、=0X20;//允許P0口中斷 P0IFG=0x00;//清除中斷標志位 EA=1;//開總中斷 然后就需要編寫中斷服務函數(shù)了。這里注意一點,在IAR中的中斷函數(shù)有點特殊,格式為: #pragmavector=中斷向量 __interru
8、pt函數(shù) 所以我們的中斷函數(shù)為: #pragmavector=P0INT_VECTOR __interruptvoidP0_ISR(void) { if(0x01&P0IFG) { NewKeyValue=KEY_DOWN;//記錄按鍵按下 } P0IFG=0;//清中斷標志 P0IF=0;//清中斷標志 } 在中斷中我們記錄按鍵按下,等待應用程序處理。而在主函數(shù)中我們需要處理按鍵按下事件,主函數(shù)中我們對按鍵計數(shù)并且通過LCD顯示?! ntmain(void) { charLCDBuf[21]={0};//顯存 intKeyC
9、nt=0; SysStartXOSC(); LCD12864_Init(); LCD12864_DisStr(1,“KeyTest”); P0SEL&=~0X01;//設置為IO功能 P0DIR&=~0X01;//設置為輸入功能 P0IEN
10、=0X01;//P0.0設置為中斷方式 PICTL
11、=0X01;//下降沿觸發(fā) IEN1
12、=0X20;//允許P0口中斷 P0IFG=0x00;//清除中斷標志位 EA=1;//開總中斷 sprintf(LCDBuf,“KeyCount:%d”,KeyCnt++);//按鍵計數(shù) LCD12864_
13、DisStr(3,LCDBuf); while(1