


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、STM8的按鍵程序?qū)W習(xí)筆記本程序基于STM8S105K4單片機(jī)學(xué)習(xí)程序。程序硬件就是STM8 的最小開發(fā)板搭建,用的內(nèi)部晶振1分頻。經(jīng)測試可以正常檢測到按 鍵的短按和長按。程序思想見。C程序中的注釋。最終通過調(diào)試和 實(shí)驗(yàn)。所有的程序如下:(程序中可能還有些其他沒有發(fā)現(xiàn)的問題, 或其他錯(cuò)誤有問題再學(xué)習(xí)更改。)/* 按鍵掃描程序 */本程序定義四個(gè)獨(dú)立按鍵,對四個(gè)獨(dú)立按鍵的短按長按進(jìn)行識別,返回最終的鍵值 key_value為最終鍵值:0x11為按鍵1的短按,0x12為按鍵的長按。0x21為按鍵2的短按, 0x22為按鍵的長按。類推注意:鍵值讀取之后應(yīng)將鍵值復(fù)位清零,以備下次檢測;注意:系統(tǒng)中斷函
2、數(shù)中有按鍵打描的部分程序INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler; 4)等。調(diào)用方法:void key_port_init();按鍵端口的定義void scan_key():按鍵的掃描程序,放在定時(shí)器中斷中,定時(shí)器Ims中斷。extern unsigned char key_down_IF=0x00;在中斷函數(shù)中加入變量聲明extern scan_key();在中斷函數(shù)中加入變量聲明extern key_value;在主函數(shù)中加入變量聲明 */#ifndef_KEY_SCAN_H #define _KEY_SCAN_H廠定義按鍵的端口位水/#define
3、key_l_io#defi ne key_2_io#defi ne key_3_ioGPIOnit(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PUT)GPIOnit(GPIOC, GPIO_PIN_5, GPIO_MODEJN_PUJT)GPIOnit(GPIOC, GPIO_PIN_6, GPIO_MODEJN_PUJT)/#define key_l_in() (GPIO_ReadlnputPin(GPIOCz GPI0_PIN_5)=SET)? 1:0廠設(shè)置端1按鍵中斷的觸發(fā)方式 下降沿和低電平觸發(fā)沐/#definekeyjnt.wayEXTI_SetExtlntSe
4、nsitivity(EXTI_PORT_GPIOC,/#definekey_l ong0x02;定義長按鍵值,/#definekey_short0x01;/#definekey_short0x01;/#define key_short 0x01;定義短按鍵值,按鍵按下后根據(jù)按鍵1號按鍵短按最終鍵值為0x11,長按為0x12類推unsigned charkey_value=O;EXTI_SENSITMTY_FALL_ONLY);unsigned char key_down_IF=0x00; 為key2按下,0x30為key3按下。unsigned intkey_deIay_count=0;uns
5、igned intkey_delay_short=100;unsigned intkey_delay_long=l000;定義一個(gè)鍵值變量。按鍵按下標(biāo)志位,0x10代表keyl按下標(biāo)志,0x20按鍵延時(shí)計(jì)數(shù)器定義短按延時(shí)判斷時(shí)間定義長按的延時(shí)判斷時(shí)間廠讀取按鍵的位值審unsigned char key_l_in()if(GPI0_ReadlnputPin(GPI0C,GPI0_PIN_4) return 1;else return 0;unsigned char key_2_in()if(GPI0_ReadlnputPin(GPI0C,GPI0_PIN_5) return 1;else ret
6、urn 0;unsigned char key_3_in()if(GPI0_ReadlnputPin(GPI0C,GPI0_PIN_6) return 1;else return 0;unsigned char key_4_in()if(GPI0_ReadlnputPin(GPI0C,GPI0_PIN_7) return 1;else return 0;# endif/* 按鍵掃描程序 */ 建檔時(shí)間:20151215跟新記錄:20151218測試通過。注意事項(xiàng):調(diào)試中遇到的問題有:按鍵的鍵值讀取函數(shù)unsigned char key_ljn():等本來是 準(zhǔn)備放在宏定義里面的,但是總是報(bào)錯(cuò)有
7、問題。所以放在函數(shù)中。導(dǎo)致不能直接在其他程序中包含這個(gè)頭文件。程序思想:按鍵按下后進(jìn)入中斷,然后判斷是哪個(gè)按鍵按下,并賦值。當(dāng)有按鍵按卜后按鍵 按下標(biāo)志位會被置位,然后在定時(shí)器的中斷中不斷檢測是否有按鍵按下,如果有按鍵被按下,則開始計(jì)時(shí),如果計(jì)數(shù)值沒有達(dá)到去抖的累計(jì)值則松手之 后計(jì)時(shí)自動清零。當(dāng)按卞后計(jì)數(shù)根據(jù)定時(shí)器的計(jì)數(shù)的時(shí)間長短判斷是長按還是短按,然后將數(shù)據(jù)復(fù)制到鍵值返回到主函數(shù)中。按鍵程序沒有在線等待,而是掃 描形式判斷。減小CPU的負(fù)擔(dān)。硬件支持:16MHz晶振1分頻。按鍵中斷選擇下降沿中斷。*/#inelude Hkey_scan.h” void key_port_init() 端I
8、I上拉輸入中斷按鍵觸發(fā)方式為卞降沿低電平觸發(fā)key_l_io; key_2_io; key_3o; key_4o; key_int_way;/INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler;4)/ void keyjnterrupt_do()key_down_l F=0xl0;key_down_l F=0x20;key_down_l F=0x30;key_down_l F=0x40; /1ms定時(shí)器中調(diào)用次程序,即每1ms掃描檢測一次/void sean_key()if(key_down_IF != 0x00)有按鍵按下開始掃描 此時(shí)key_down_IF就有k
9、eyl,2,3的信息key_d e lay_co u nt+; 延時(shí)計(jì)數(shù)器開始計(jì)數(shù)if(key_delay_count=65530)key_deIay_count=0;key_down_lF=0;按鍵按卜時(shí)間過長,則是故障,不執(zhí)行按鍵反饋if (key_delay_count=key_delayjong)key_down_IF &=OxfO; key_down_IF |=0x02; 加上長按標(biāo)志 else if(key_delay_count=key_delay_short)key_down_IF &=OxfO; key_downJF |=0x01;加上短按標(biāo)志if( (key_ln() &
10、(key_2n() & (key_3_in() & (key_4_in()松手后判斷switch(key_down_IF&OxfO)有按鍵按下的條件卞,讀取那個(gè)鍵按下的,然后判斷是否已經(jīng)松手,當(dāng)前鍵值是什么case 0x10:if(key_2_in()&(key_down_IF & OxOf) 0)松手后如果有長短按標(biāo)志,則將結(jié)果公布這句可以省略key_va lue=key_d own _IF;松手的時(shí)候沒有長短按 標(biāo)志,則不顯示結(jié)果,且清零標(biāo)志key_downF=0;key_delay_co un t=0;break;case 0x20:松手后如果有長短按松手的時(shí)候沒有長短按松手后如果有長短按if(key_2_in()&(key_down_IF & OxOf) 0) 標(biāo)志,則將結(jié)果公布這句可以省略下同key_va lue=key_d o wnF;標(biāo)志,則不顯示結(jié)果key_downF=0;key_delay_co un t=0; break;case 0x30:if(key_3_in()&(key_down_IF & OxOf) 0)標(biāo)志,則將結(jié)果公布key_va lue=key_d ownF;松手的時(shí)候沒有長短按標(biāo)志,則不顯示結(jié)果key_downF=0;key_delay_count=0;break;case 0x40:if(key_4Jn()&(key_down_IF &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 核心素養(yǎng)視角下的學(xué)習(xí)環(huán)境優(yōu)化研究論文
- 茶葉包裝間管理制度
- 隨車吊車輛管理制度
- 設(shè)備安裝工藝標(biāo)準(zhǔn)樣本
- 裂解爐管道焊接及熱處理施工技術(shù)措施
- 財(cái)務(wù)會計(jì)輔導(dǎo)材料及試題練習(xí)
- 表住宅工程室內(nèi)空間尺寸質(zhì)量分戶驗(yàn)收記錄表
- 黑龍江省齊齊哈爾市克東縣第三中學(xué)2024-2025學(xué)年七年級下學(xué)期5月期中英語試題(含筆試答案無聽力答案、原文及音頻)
- 幼兒教育神秘星空教學(xué)設(shè)計(jì)教案
- 2025年Android性能優(yōu)化面試題集錦威力加強(qiáng)版-android程序優(yōu)化 面試
- 2023年馬克思主義原理考試知識點(diǎn)匯總
- 華僑大學(xué)2013-電磁場與電磁波試卷
- 北京市消防條例培訓(xùn)課件
- 支原體感染后護(hù)理查房課件
- 建行反洗錢應(yīng)急預(yù)案
- 路燈養(yǎng)護(hù)投標(biāo)方案(技術(shù)方案)
- 國家開放大學(xué)電大本科《管理英語4》期末試題題庫及答案(試卷號:1389)
- 詢價(jià)投標(biāo)文件(范本)
- 去小學(xué)化家長培訓(xùn)講座課件
- 單光纖光鑷數(shù)值仿真和光阱力計(jì)算的中期報(bào)告
- 一份完整的鹵菜店創(chuàng)業(yè)計(jì)劃書 工作計(jì)劃
評論
0/150
提交評論