資源描述:
《嵌入式KL25 鍵盤(pán)中斷實(shí)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、實(shí)驗(yàn)五鍵盤(pán)中斷實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.熟練運(yùn)用CodeWarrior嵌入式開(kāi)發(fā)系統(tǒng)環(huán)境、C語(yǔ)言、調(diào)試方式。2.復(fù)習(xí)串行通信接口(SCI)的內(nèi)容。3.加強(qiáng)鍵盤(pán)中斷基本原理及編程原理的理解。4.理解“行掃描”法的原理并能進(jìn)行鍵值識(shí)別和鍵值編碼。5.理解鍵盤(pán)接線原理圖(如圖5-1)。二、知識(shí)要點(diǎn)本實(shí)驗(yàn)采用的是4×4矩陣式鍵盤(pán)(以下簡(jiǎn)稱鍵盤(pán))。PTG4、PTD2、PTD3、PTD7分別接四根列線,定義為輸入且上拉,PTG0~PTG3分別接四根行線,且定義為輸出。行掃描法是使鍵盤(pán)的某一行輸出為低電平,其余行為高電平,然
2、后讀取列值,如果列值中有某位為低電平,則表明該行和列交點(diǎn)處的鍵被按下;若為全高則再掃描下一行,直至掃描完全部的行線為止。這樣就可以確定是哪一行哪一列交點(diǎn)的鍵被按下。MCU與鍵盤(pán)接線原理圖:鍵盤(pán)的c語(yǔ)言編程:1)初始化,先按IO第8頁(yè)共8頁(yè)口方式初始化,即定義列線為輸入且上拉,行線為輸出,然后依輸入口的鍵盤(pán)功能初始化相應(yīng)的寄存器。2)定義鍵值表3)掃描一次,讀取鍵值4)獲得鍵盤(pán)定義值行掃描法是使鍵盤(pán)的某一行輸出為低電平,其余行為高電平,然后讀取列值,如果列值中有某位為低電平,則表明該行和列交點(diǎn)處的鍵被按下;
3、若為全高則再掃描下一行,直至掃描完全部的行線為止。這樣就可以確定是哪一行哪一列交點(diǎn)的鍵被按下。設(shè)置鍵盤(pán)中斷允許寄存器,當(dāng)鍵盤(pán)有鍵被按下時(shí),立即產(chǎn)生中斷,中斷程序處理按鍵事件,比如確定哪個(gè)鍵被按下,然后轉(zhuǎn)換為該鍵的定義值。鍵盤(pán)的鍵面標(biāo)示碼(即定義值)與MCU識(shí)別的鍵值對(duì)應(yīng)關(guān)系通過(guò)列表對(duì)應(yīng)起來(lái),即鍵盤(pán)定義表對(duì)應(yīng)表示。當(dāng)通過(guò)“行掃描”法獲得某個(gè)鍵的鍵值時(shí),通過(guò)查表法就可以得到它的定義值。該鍵盤(pán)中斷方式程序的主程序主體是一個(gè)死循環(huán),且是一個(gè)空循環(huán)體,所有處理的過(guò)程代碼放在中斷程序中。三、演示性實(shí)驗(yàn)在光盤(pán)資料中提供
4、讀者鍵盤(pán)實(shí)例程序文件夾。編程采用規(guī)范要求編寫(xiě),將鍵盤(pán)獨(dú)立成一個(gè)構(gòu)件,如C語(yǔ)言中,形成key.h頭文件和key.c源文件。頭文件對(duì)鍵盤(pán)的所用端口寄存器或引腳進(jìn)行宏定義以及初始化函數(shù)和驅(qū)動(dòng)函數(shù)聲明。源文件對(duì)初始化函數(shù)和驅(qū)動(dòng)函數(shù)進(jìn)行定義。具體實(shí)現(xiàn)代碼見(jiàn)光盤(pán)。四、設(shè)計(jì)性實(shí)驗(yàn)要求按下的一個(gè)鍵的鍵值和鍵面定義值(鍵的ASCII碼值)通過(guò)串口在PC方軟件界面顯示。當(dāng)鍵值被按下時(shí),高端虛擬鍵盤(pán)被按下,或者在高端PC機(jī)中顯示對(duì)應(yīng)按鍵值。1、資源使用鍵盤(pán)的數(shù)據(jù)線分別接在MCU口的號(hào)引腳、口的號(hào)引腳。2、硬件設(shè)計(jì)(標(biāo)識(shí)引腳名)
5、第8頁(yè)共8頁(yè)圖5-24×4鍵盤(pán)按鍵的信息顯示在PC機(jī)界面的連線圖3、軟件設(shè)計(jì)1)MCU端程序流程圖2)編程(1)下面填寫(xiě)主程序main。(填寫(xiě)主程序main.c)鍵盤(pán)中斷程序第8頁(yè)共8頁(yè)(填寫(xiě)C語(yǔ)言編寫(xiě)的鍵盤(pán)中斷程序)#include"includes.h"http://包涵總頭文件intmain(void){//1.聲明主函數(shù)使用的局部變量uint_8*g_DispalyInit;//2.關(guān)總中斷enter_critical();//3.初始化底層模塊LEDInit();//LED初始化LCDInit();//L
6、CD初始化KBInit();uart_init(UART_1,BUSCLK,9600);//串口1、2使用總線時(shí)鐘24000Khzuart_send_string(UART_1,"HelloUart_1!r");//鍵盤(pán)初始化tpm_init(TPM0,TPM_CLKSRC_PLL,1000);//初始化TPM模塊,1ms中斷一次//4.緩沖區(qū)賦值g_DispalyInit=(uint_8*)"WaitReceiving..Soochow2013.01.";//5.開(kāi)中斷tpm_enable_int
7、(0);init_critical();//6.lcd顯示初始字符LCDShow(g_DispalyInit);//===========================================================================第8頁(yè)共8頁(yè)for(;;){}//===========================================================================return0;}(2)PC端軟件的SCI接收函數(shù)(填寫(xiě)PC
8、機(jī)的SCI接收函數(shù))//===========================================================================//文件名稱:isr.c//功能概要:中斷底層驅(qū)動(dòng)構(gòu)件源文件//版權(quán)所有:蘇州大學(xué)飛思卡爾嵌入式中心(sumcu.suda.edu.cn)//更新記錄:2013-03-12V1.2//====================================