嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)12 用鍵盤控制秒表的運行_第1頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)12 用鍵盤控制秒表的運行_第2頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)12 用鍵盤控制秒表的運行_第3頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)12 用鍵盤控制秒表的運行_第4頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)12 用鍵盤控制秒表的運行_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

任務(wù)12用鍵盤控制秒表的運行任務(wù)要求在任務(wù)11的基礎(chǔ)上增加S0、S1兩個按鍵。S0鍵作啟動/停止鍵,奇數(shù)次按S0鍵,啟動秒表走時,秒表在當前顯示秒數(shù)的基礎(chǔ)上計時。例如,當前數(shù)碼管顯示的是05,第1次或者第3次按S0鍵后,秒表在5秒的基礎(chǔ)上計時,依次顯示06,07,……。偶數(shù)次按S0鍵,秒表停止走時,顯示時間一直保持不變。S1鍵為清0鍵,按S1鍵,秒表停止走時,顯示數(shù)值為0。上電時,秒表停止計時,數(shù)碼管顯示0秒。知識儲備

1.鍵盤的基本知識(1)鍵盤處理流程單片機系統(tǒng)中所用的鍵盤有獨立式鍵盤和矩陣式鍵盤兩種。鍵盤接口的基本任務(wù)主要有4個方面:⑴判斷是否有鍵按下;⑵去抖動;⑶確定所按下鍵的鍵值,即確定是何鍵按下;⑷對按鍵功能進行解釋。在一次按鍵操作中,由于按鍵的機械特性的原因,鍵按下或釋放都有一個彈跳的抖動過程,抖動的時間一般為5~15ms,其波形圖如圖5-16所示。圖5-16

抖動波形圖

1.鍵盤的基本知識(1)鍵盤處理流程按鍵抖動必須消除,否則會引起按鍵識別錯誤。去抖動的方法有硬件去抖動和軟件去抖動兩種方法。硬件去抖動的方法是,在按鍵兩端并上一個小電容,或者用R-S觸發(fā)器組成的閂鎖電路來去抖動。軟件法是采取延時的方法來回避抖動期,其具體的做法是,檢測到有鍵按下或者有鍵釋放后,延時5ms~15ms左右的時間,再去讀按鍵輸入情況,此時抖動期已過,所讀的按鍵輸入是按鍵穩(wěn)定按下或釋放狀態(tài)。鍵盤處理的一般流程如圖5-17所示。圖5-17

鍵盤處理流程

1.鍵盤的基本知識(2)獨立式鍵盤接口⑴獨立式鍵盤的接口電路其電路如圖5-18所示,其中,圖a為所有按鍵接在同一個GPIO口上的鍵盤電路,圖b為按鍵接在不同的GPIO口上的鍵盤電路。圖中,K1~K4為按鍵,R1~R4為上拉電阻,其作是,將按鍵按下與釋放的機械動作轉(zhuǎn)換成單片機可識別的高低電平,例如,在圖b中,K1按下后,PC13=0,K1釋放后,PC13=1。電容C1~C4為去抖動濾波電容,它們分別與各按鍵并聯(lián)。從圖5-18可以看出,獨立鍵盤電路的特點是,按鍵的一端接地,另一端接并行口的某一根I/O口線,I/O口線外接上拉電阻。若并行口內(nèi)部有上拉電阻,可不接上拉電阻。

1.鍵盤的基本知識(2)獨立式鍵盤接口(a)按鍵位于同一GPIO口中(b)按鍵位于不同GPIO口中圖5-18

獨立式鍵盤接口電路

1.鍵盤的基本知識(2)獨立式鍵盤接口⑵獨立式鍵盤的處理程序鍵盤處理程序的執(zhí)行時間一般在幾毫秒以內(nèi),而一次按鍵按下的時間一般為幾十毫秒乃至上百毫秒。鍵盤處理需要注意的問題是,要防止一次按鍵按下被多次解釋執(zhí)行(連擊鍵除外)。鍵盤處理可以放在main函數(shù)中,也可以放在10ms定時中斷服務(wù)函數(shù)中。

1.鍵盤的基本知識(2)獨立式鍵盤接口鍵盤的處理方法是,用位變量keytreated標識按鍵是否已處理,該變量可以是全局變量,也可以是靜態(tài)的局部變量。keytreated=0表示按鍵未處理,keytreated=1表示按鍵已處理。用keytreated標志位與按鍵是否按下來控制按鍵解釋程序的執(zhí)行,延時去抖動后,如果無鍵按下或者是鍵按下已處理(keytreated=1),則不進行按鍵功能的解釋處理。如果檢測到有鍵按下,并且鍵按下未處理(keytreated=0),則確定按鍵的位置后再對按鍵進行解釋處理,按鍵解釋處理結(jié)束后再將keytreated位置1,以阻止下一次循環(huán)時,對同一鍵按下進行重復解釋。另外,為了保證下次有鍵按下時程序能正常處理按鍵,按鍵釋放后,還需要將keytreated清0。按鍵處理的流程如圖5-19所示。

1.鍵盤的基本知識(2)獨立式鍵盤接口圖5-19

鍵盤處理的流程圖

1.鍵盤的基本知識(2)獨立式鍵盤接口不同的電路實現(xiàn)上述流程圖的代碼略有不同,其差別在于判斷是否有鍵按下、確定按鍵的位置以及按鍵功能解釋的方法不同。按鍵位于同一個GPIO口時,一般是讀GPIO口的輸入,然后判斷輸入值中按鍵所在位是否為1來確定是否有鍵按下,再用switch-case語句確定是何鍵按下并進行按鍵功能解釋。以圖5-18(a)所示的電路為例,在main函數(shù)中進行鍵盤處時,main函數(shù)的框架結(jié)構(gòu)詳寫鏈接文檔。

1.鍵盤的基本知識(2)獨立式鍵盤接口【說明】①本程序也適合于后面介紹的矩陣式鍵盤處理。不同的鍵盤其獲取鍵值的方法不同,在實際使用中需要根據(jù)具體情況作適當變換。②在key()函數(shù)中,第23行代碼的功能是,讀PE口的輸入,并消除PE0~PE7、PE13~PE15的輸入影響。本例中,讀按鍵輸入讀的是PE口的輸入,由于PE0~PE7、PE13~PE15并不是有效的按鍵輸入引腳,它們的輸入是不確定的(與其外接電路有關(guān)),為了方便后續(xù)的分析判斷,我們必須將這些不確定的無效位設(shè)置成0或者1,本例中,我們是將其設(shè)置成1。

1.鍵盤的基本知識(2)獨立式鍵盤接口③對于按鍵位于同一GPIO口的獨立式鍵盤而言,按鍵的輸入值中包含了按鍵的鍵值信息,即按鍵的輸入值實際上就是按鍵的編碼值。輸入值的某位為0,則表示對應(yīng)的按鍵按下。對于圖5-18(a)所示電路,按鍵接在PE8~PE12引腳上,在PE口的輸入值中,D0~D7、D13~D15為無效位。去掉無效位的輸入后,若PE口輸入值為1111101011111111B,則是K1、K3鍵按下。程序中可以不單獨使用scan()函數(shù)獲取鍵值。

1.鍵盤的基本知識(2)獨立式鍵盤接口【例】STM32的PE口外接3只按鍵,PD口外接一位數(shù)碼管顯示電路,如圖5-20所示。編寫程序?qū)崿F(xiàn)以下功能:上電時數(shù)碼顯示0,按S1顯示數(shù)據(jù)加1,按S2顯示數(shù)據(jù)減1,按S3顯示數(shù)據(jù)清0。圖5-20

例題中電路圖

1.鍵盤的基本知識(2)獨立式鍵盤接口【解】電路中,數(shù)碼管的位選腳(com腳)接正電源VCC,因此數(shù)碼為共陽極數(shù)碼管。實現(xiàn)本例功能的思路是,用全局變量num保存數(shù)碼管的顯示值,在鍵盤處理程序中依按鍵的功能對num分別進行加1、減1或清0處理,然后在數(shù)碼管顯示程序中對num中的數(shù)進行顯示,這樣就可以實用按鍵調(diào)整數(shù)碼管的顯示值。本例的程序詳見鏈接文檔例題程序按鍵位于不同GPIO口時,一般用if語句直接判斷各按鍵是否按下,再用if-else語句確定是何鍵按下并進行按鍵功能解釋。以圖5-18(b)所示的電路為例,鍵盤處理程序的框架結(jié)構(gòu)詳見鏈接文檔。

1.鍵盤的基本知識(3)矩陣式鍵盤接口⑴矩陣式鍵盤的接口電路由PE8~PE11、PE12~PE15口線與外部16個按鍵構(gòu)成的矩陣式鍵盤電路如圖5-21所示。由圖可以看出,矩陣式鍵盤采用行列電路結(jié)構(gòu),行線為輸入口(圖中PE8~PE11口線),外接有上拉電阻,列線為輸出口,按鍵位于行線與列線的交叉處,一端接行線,另一端接列線。圖5-21

矩陣鍵盤接口電路

1.鍵盤的基本知識(3)矩陣式鍵盤接口(2)矩陣式鍵盤的處理程序1)判斷是否有鍵按下判斷矩陣式鍵盤是否有鍵按下的方法是,將列線全部輸出0后再讀行線輸入,若行線輸入為全1,則無鍵按下,否則有鍵按下。例如,在圖5-21的矩陣式鍵盤中,若S5按下,PE12~PE15全部輸出0(即二進制數(shù)0000)后讀PE8~PE11的輸入。這時,第1行與第1列因S5按下而導通,第1行被拉至低電平,PE9=0,行線PE8~PE11的輸入就不再是全1了。必須注意的是,若PE9=0,并不能確定是S5鍵按下,因為S4、S5、S6、S7任意一鍵按下都會導致PE9=0。判斷是否有鍵按下的程序段如下:

1.鍵盤的基本知識(3)矩陣式鍵盤接口123456789uint16_ttmp;HAL_GPIO_WritePin(GPIOE,0xf000,GPIO_PIN_RESET);//4根列線(PE12~PE15)輸出0tmp=GPIOE->IDR|0xf0ff; //讀4根行線(PE8~PE11)的輸入,并將無效位置1if(tmp!=0xffff) //判斷是否有鍵按下{ //有鍵按下時的處理}else{ //無鍵按下時的處理}

1.鍵盤的基本知識(3)矩陣式鍵盤接口2)確定按鍵的位置確定按鍵位置的方法是,先將第0列輸出低電平,其他列輸出高電平,讀行線輸入,這時檢查的是S0、S4、S8、S12這4個按鍵的狀態(tài)。若讀得的行輸入為全1,則表示與第0列相接的4個鍵無鍵按下。再將第1列輸出低電平,其他各列輸出高電平,讀行線輸入,這時檢查的是S1、S5、S9、S13這4個按鍵的狀態(tài)。若讀得的行輸入仍為全1,則表示與第1列相接的4個鍵無鍵按下。依此類推,再查下一列,直到所有列檢查完畢,則必有一列輸出低電平時,行輸入不為全1。

1.鍵盤的基本知識(3)矩陣式鍵盤接口若第j列輸出低電平,其他列輸出高電平時,讀行線輸入不是全1,則表示按鍵位于第j列,此時應(yīng)退出循環(huán),再查看是哪一根行線為低電平,如果是第i根行線為低電平,則按鍵位于第i行,按鍵的鍵值keyval=i×每行按鍵數(shù)+j。上述方法可以概括為,列線逐列輸出低電平,然后檢查行線輸入,若行線輸入為全1,則繼續(xù)下一列輸出。若第j列輸出0時,行輸入不為全1,則查輸入為0的行線號。確定按鍵位置的流程圖如圖5-22所示。圖5-22

確定按鍵位置程序流程圖

1.鍵盤的基本知識(3)矩陣式鍵盤接口確定按鍵位置的程序【說明】

第15行~第33行的功能是,檢查第j列是否有鍵按下,并確定按鍵所在的行號。這部分代碼也可以用逐根行線判斷的方式來實現(xiàn),其代碼如鏈接所示。實現(xiàn)方法與步驟任務(wù)12的硬件電路如圖5-23所示。

1.搭建電路圖5-23

任務(wù)12的電路圖

實現(xiàn)方法與步驟任務(wù)12只是在任務(wù)11的基礎(chǔ)上添加了2只按鍵電路,其硬件初始化代碼可通過修改任務(wù)11的硬件初始化代碼而成,其生成過程如下:步驟(1)在“D:\ex”文件夾中新建Task12子文件夾。(2)將任務(wù)11的STM32CubeMX工程文件Task11.ioc(位于“D:\ex\Task11”文件夾中)復制到Task12文件夾中,并將其改名為Task12.ioc。2.生成硬件初始化代碼

實現(xiàn)方法與步驟步驟(3)雙擊Task12.ioc文件圖標,打開任務(wù)12的STM32CubeMX工程文件,然后按照任務(wù)5中介紹的方法,在STM32CubeMX工程文件中將PC13、PD13配置成輸入引腳,并將其設(shè)置為上拉輸入模式。(4)保存STM32CubeMX工程文件,然后點擊“GENERATECODE”按鈕,STM32CubeMX就會生成任務(wù)12的初始化代碼。2.生成硬件初始化代碼

實現(xiàn)方法與步驟任務(wù)12需要控制秒表的啟動、停止以及清0。其編程思路是,用變量sec保存秒表的秒時間,用變量entim控制秒表的運行,entim=0時,秒表停止運行,entim=1時,秒表走時。在其他模塊中,只需要控制entim、sec的值,就可以實現(xiàn)秒表的啟動、停止和清0。由于entim和sec這2個變量需在多個模塊中使用,程序中要將這2個變量定義成全局變量。任務(wù)12中,仍然是在main.c文件中編寫秒表程序,其修改后的程序如鏈接所示。(其中,第4~5行、第21~22行、第30行為修改部分。)3.修改秒表程序

實現(xiàn)方法與步驟步驟(1)將D:\ex\Task11文件夾中的User子文件夾以及文件夾中的文件(任務(wù)11中的顯示程序文件)復制到D:\ex\Task12文件夾中。(2)按照任務(wù)11中介紹的方法在任務(wù)12的Keil工程中新建User組,并將User文件夾中的Display.c文件添加至User組中。(3)將User文件夾添加到include目錄中。(4)按照程序編寫規(guī)范的要求將上述程序代碼添加至main.c文件的對應(yīng)位置處。再將程序下載至開發(fā)板中并運行程序,我們可以看到數(shù)碼顯示的是00,秒表處于停止狀態(tài),如果將程序中第4行代碼改為“uint8_tentim=1;”,則秒表與任務(wù)11一樣可以正常計時。

實現(xiàn)方法與步驟任務(wù)12中,S1鍵為清0鍵,它只有一種功能,可以直接照按前面介紹的方法編寫程序。S0鍵為啟動/停止鍵,它有2種功能,與S0鍵按下的次數(shù)有關(guān)。其編程思路是,用變量keycnt記錄S0鍵按下的次數(shù),當S0按下且沒處理過時,就將keycnt的值加1,然后對keycnt的值進行判斷,若為奇數(shù),則啟動秒表走時,若為偶數(shù),就停止秒表走時。其中,判斷keycnt的值是否為奇數(shù)的方法可以是,判斷keycnt的最低位是否為1。用key.c文件保存按鍵處理程序,其接口文件為key.h。按照上述思路,key.c文件的內(nèi)容如鏈接所示。4.添加鍵盤處理程序

實現(xiàn)方法與步驟【思考】去掉第21行代碼會是什么結(jié)果?去掉第22行代碼會是什么結(jié)果?去掉第21、22行代碼又是什么結(jié)果?請先分析再上機實踐。(key.h文件)

實現(xiàn)方法與步驟步驟(1)新建key.c和key.h文件,并將其保存至D:\ex\Task12\User文件夾中,然后在key.c和key.h文件中添加上述程序代碼。(2)將key.c文件添加至User組中。(3)在main.c文件添加調(diào)用鍵盤處理函數(shù)key()的相關(guān)代碼,添加代碼后main.c文件的結(jié)構(gòu)如下:

實現(xiàn)方法與步驟123456789101112…#include"Display.h"#include"key.h"…i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論