第五顯示和鍵盤接口技術(shù)_第1頁
第五顯示和鍵盤接口技術(shù)_第2頁
第五顯示和鍵盤接口技術(shù)_第3頁
第五顯示和鍵盤接口技術(shù)_第4頁
第五顯示和鍵盤接口技術(shù)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 本章內(nèi)容本章內(nèi)容p單片機(jī)與單片機(jī)與LED數(shù)碼管接口數(shù)碼管接口pLED大屏幕顯示器和接口大屏幕顯示器和接口p字符字符LCD 液晶顯示和接口液晶顯示和接口p單片機(jī)與鍵盤接口單片機(jī)與鍵盤接口第第5 5章章 顯示和鍵盤接口技術(shù)顯示和鍵盤接口技術(shù)單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED數(shù)碼管結(jié)構(gòu)及原理 單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED數(shù)碼管結(jié)構(gòu)及原理 單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED數(shù)碼管字型編碼 p若將數(shù)值0送至單片機(jī)的P1口,數(shù)碼管上不會(huì)顯示數(shù)字“0”。顯然,要使數(shù)碼管顯示出數(shù)字或字符,直接將相應(yīng)的數(shù)字或字符送至數(shù)碼管的段控制端是不行的,必

2、須使段控制端輸出相應(yīng)的字形編碼。p將單片機(jī)P1口的P1.0、P1.1 P1.7八個(gè)引腳依次與數(shù)碼管的a、bf、dp八個(gè)段控制引腳相連接。如果使用的是共陽極數(shù)碼管,COM端接+5V,要顯示數(shù)字“0”,則數(shù)碼管的a、b、c、d、e、f六個(gè)段應(yīng)點(diǎn)亮,其它段熄滅,需向P1口傳送數(shù)據(jù)11000000B(C0H),該數(shù)據(jù)就是與字符“0”相對應(yīng)的共陽極字型編碼。若共陰極的數(shù)碼管COM端接地,要顯示數(shù)字“1”,則數(shù)碼管的b、c兩段點(diǎn)亮,其他段熄滅,需向P1口傳送數(shù)據(jù)00000110(06H),這就是字符“1”的共陰極字型碼了。單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED靜態(tài)顯示 靜態(tài)顯示是指數(shù)碼管顯

3、示某一字符時(shí),相應(yīng)的發(fā)光二極管恒定導(dǎo)通或恒定截止。這種顯示方式的各位數(shù)碼管的公共端恒定接地(共陰極)或+5V(共陽極)。每個(gè)數(shù)碼管的八個(gè)段控制引腳分別與一個(gè)八位I/O端口相連。只要I/O端口有顯示字型碼輸出,數(shù)碼管就顯示給定字符,并保持不變,直到I/O口輸出新的段碼。 單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED靜態(tài)顯示 單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED動(dòng)態(tài)顯示 單片機(jī)與單片機(jī)與LEDLED數(shù)碼管接口數(shù)碼管接口LED動(dòng)態(tài)顯示 動(dòng)態(tài)顯示是一種按位輪流點(diǎn)亮各位數(shù)碼管的顯示方式,即在某一時(shí)段,只讓其中一位數(shù)碼管“位選端”有效,并送出相應(yīng)的字型顯示編碼。此時(shí),其它位的數(shù)

4、碼管因“位選端”無效而都處于熄滅狀態(tài);下一時(shí)段按順序選通另外一位數(shù)碼管,并送出相應(yīng)的字型顯示編碼,依此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷地顯示出相應(yīng)的字符。這一過程稱為動(dòng)態(tài)掃描顯示。 LEDLED大屏幕顯示器和接口大屏幕顯示器和接口 LED大屏幕顯示器結(jié)構(gòu)及原理LED點(diǎn)陣顯示器是把很多LED發(fā)光二極管按矩陣方式排列在一起,通過對每個(gè)LED進(jìn)行發(fā)光控制,完成各種字符或圖形的顯示。最常見的LED點(diǎn)陣顯示模塊有57(5列7行),79(7列9行),88(8列8行)結(jié)構(gòu)。LED點(diǎn)陣由一個(gè)一個(gè)的點(diǎn)(LED發(fā)光二極管)組成,總點(diǎn)數(shù)為行數(shù)與列數(shù)之積,引腳數(shù)為行數(shù)與列數(shù)之和。LEDLED大屏幕顯示器和接口大

5、屏幕顯示器和接口 LED大屏幕顯示器結(jié)構(gòu)及原理LEDLED大屏幕顯示器和接口大屏幕顯示器和接口 LED大屏幕顯示器結(jié)構(gòu)及原理“大”字顯示字型碼示意圖LEDLED大屏幕顯示器和接口大屏幕顯示器和接口 LED大屏幕顯示器結(jié)構(gòu)及原理顯示字符“大”的過程如下:先給第一行送高電平(行高電平有效),同時(shí)給8列送11110111(列低電平有效 ) ; 然 后 給 第 二 行 送 高 電 平 , 同 時(shí) 給 8 列 送11110111,最后給第八行送高電平,同時(shí)給8列送11111111。每行點(diǎn)亮延時(shí)時(shí)間為1ms,第八行結(jié)束后再從第一行開始循環(huán)顯示。利用視覺駐留現(xiàn)象,人們看到的就是一個(gè)穩(wěn)定的圖形。LEDLED大

6、屏幕顯示器和接口大屏幕顯示器和接口 LED大屏幕顯示器接口LEDLED大屏幕顯示器和接口大屏幕顯示器和接口 LED大屏幕顯示器擴(kuò)展接口液晶顯示器液晶顯示器LCDLCD(Liquid Crystal DisplayLiquid Crystal Display),它的主要原),它的主要原理是以電流刺激液晶分子產(chǎn)生點(diǎn)、線、面配合背部燈管理是以電流刺激液晶分子產(chǎn)生點(diǎn)、線、面配合背部燈管構(gòu)成畫面。它由一定數(shù)量的彩色或黑白像素組成,放置構(gòu)成畫面。它由一定數(shù)量的彩色或黑白像素組成,放置于光源或者反射面前方。于光源或者反射面前方。液晶顯示器由于體積小、重量輕、耗電小等優(yōu)點(diǎn)已成為液晶顯示器由于體積小、重量輕、耗

7、電小等優(yōu)點(diǎn)已成為各種嵌入式系統(tǒng)所采用的顯示器,尤其適用于使用電池各種嵌入式系統(tǒng)所采用的顯示器,尤其適用于使用電池的電子設(shè)備。如手機(jī)、的電子設(shè)備。如手機(jī)、PDAPDA,以及家電產(chǎn)品,儀器儀表,以及家電產(chǎn)品,儀器儀表產(chǎn)品等,產(chǎn)品等,LCDLCD是首選的顯示器。是首選的顯示器。1LCD 的特點(diǎn)的特點(diǎn)2LCD 顯示器的分類顯示器的分類從液晶顯示器的使用和顯示內(nèi)容來分,從液晶顯示器的使用和顯示內(nèi)容來分,LCD LCD 可分為字可分為字段式(筆劃式),點(diǎn)陣字符式,點(diǎn)陣圖形式三種。段式(筆劃式),點(diǎn)陣字符式,點(diǎn)陣圖形式三種。 字段式液晶顯示器字段式液晶顯示器同同LEDLED數(shù)碼管有些相似,它是以長條數(shù)碼管有

8、些相似,它是以長條筆劃狀或一些特殊固定圖形與漢字顯示象素組成的液筆劃狀或一些特殊固定圖形與漢字顯示象素組成的液晶顯示器件,簡稱段型顯示器。段型顯示器以七段顯晶顯示器件,簡稱段型顯示器。段型顯示器以七段顯示器最為常見,特殊圖形與字符類的段型液晶顯示器示器最為常見,特殊圖形與字符類的段型液晶顯示器一般要生產(chǎn)廠家定做。段型液晶顯示器在數(shù)字儀表、一般要生產(chǎn)廠家定做。段型液晶顯示器在數(shù)字儀表、計(jì)數(shù)器,家電產(chǎn)品中應(yīng)用較多。計(jì)數(shù)器,家電產(chǎn)品中應(yīng)用較多。點(diǎn)陣字符式液晶顯示器點(diǎn)陣字符式液晶顯示器一般是一個(gè)功能模塊,它由小面積的液晶顯示屏和一般是一個(gè)功能模塊,它由小面積的液晶顯示屏和驅(qū)動(dòng)電路組合而成。模塊中內(nèi)置有

9、驅(qū)動(dòng)電路組合而成。模塊中內(nèi)置有 192 192 種字符、數(shù)字、字母、標(biāo)點(diǎn)符號等種字符、數(shù)字、字母、標(biāo)點(diǎn)符號等可顯示的字型點(diǎn)陣圖形庫,并提供可控制的并行或串行接口以及通信協(xié)議??娠@示的字型點(diǎn)陣圖形庫,并提供可控制的并行或串行接口以及通信協(xié)議。市場上常見的有市場上常見的有 1 1 行、行、2 2 行、行、4 4 行,每行可顯示行,每行可顯示8 8、1212、1616、2424、3232個(gè)個(gè) 5x7 5x7 點(diǎn)陣字符的通用液晶顯示器。點(diǎn)陣字符的通用液晶顯示器。 點(diǎn)陣圖形式液晶顯示器點(diǎn)陣圖形式液晶顯示器一般顯示面積大于字符式液晶顯示器,點(diǎn)陣從一般顯示面積大于字符式液晶顯示器,點(diǎn)陣從 80 x3280

10、x32到到 1024x7681024x768不等。顯示靈活性好,自由度大,可以顯示各種圖形、不等。顯示靈活性好,自由度大,可以顯示各種圖形、字符和漢字等。但控制最復(fù)雜,硬件連接線多,占用字符和漢字等。但控制最復(fù)雜,硬件連接線多,占用 MCU MCU 的資源也多。的資源也多。為了適應(yīng)越來越多的液晶顯示器應(yīng)用,一些高性能的單片機(jī)已經(jīng)將液晶顯為了適應(yīng)越來越多的液晶顯示器應(yīng)用,一些高性能的單片機(jī)已經(jīng)將液晶顯示器驅(qū)動(dòng)功能集成在片內(nèi)。目前國內(nèi)一些廠商將驅(qū)動(dòng)電路、漢字庫和點(diǎn)陣示器驅(qū)動(dòng)功能集成在片內(nèi)。目前國內(nèi)一些廠商將驅(qū)動(dòng)電路、漢字庫和點(diǎn)陣液晶顯示器屏做成一個(gè)組件模塊,模塊帶有與液晶顯示器屏做成一個(gè)組件模塊,

11、模塊帶有與 MCU MCU 通信的并行或串行接通信的并行或串行接口,使用時(shí),只要口,使用時(shí),只要 MCU MCU 通過通信口下發(fā)相應(yīng)的控制指令就能顯示各種信通過通信口下發(fā)相應(yīng)的控制指令就能顯示各種信息。息。通用點(diǎn)陣字符液晶顯示器是把通用點(diǎn)陣字符液晶顯示器是把 LCDLCD控制器、點(diǎn)陣驅(qū)動(dòng)器、控制器、點(diǎn)陣驅(qū)動(dòng)器、字符存儲(chǔ)器全做在一塊字符存儲(chǔ)器全做在一塊 PCB PCB 板上,構(gòu)成便于應(yīng)用的顯示器板上,構(gòu)成便于應(yīng)用的顯示器模塊。該模塊在國際上已經(jīng)規(guī)范化,一般都采用模塊。該模塊在國際上已經(jīng)規(guī)范化,一般都采用HD44780HD44780及其兼容電路作為及其兼容電路作為LCD LCD 的控制器。的控制器

12、。HD44780 HD44780 具有簡單而功能較強(qiáng)的指令集,可實(shí)現(xiàn)字符移動(dòng)、具有簡單而功能較強(qiáng)的指令集,可實(shí)現(xiàn)字符移動(dòng)、閃爍等功能。與閃爍等功能。與 MCU MCU 的數(shù)據(jù)傳輸可采用的數(shù)據(jù)傳輸可采用 8 8 位并行或位并行或4 4位并位并行傳輸兩種方式。可用于驅(qū)動(dòng)行傳輸兩種方式??捎糜隍?qū)動(dòng) 40 40 * * 4 4,16 16 * * 1 1,16 16 * * 2 2,16 16 * * 4 4,20 20 * * 2 2,20 20 * * 4 4等多種點(diǎn)陣字符液晶顯示器。等多種點(diǎn)陣字符液晶顯示器。HD44780 引腳功能定義引腳功能定義 字符字符LCD LCD 液晶顯示和接口液晶顯示

13、和接口 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模塊模塊Vss: +5V電源管腳(Vcc)VDD: 地管腳(GND)Vo: 液晶顯示驅(qū)動(dòng)電源(0V5V)字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模塊DB0DB7:數(shù)據(jù)線,可以用8位連接,也可以只用高4位連接,節(jié)約單片機(jī)資源,本實(shí)驗(yàn)中采用的是八位連接方法。字符字符LCD LCD 液晶顯示和接口液晶顯

14、示和接口 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模塊A:背光控制正電源K:背光控制地字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模塊單片機(jī)與LCD模塊之間有四種基本操作: 寫命令寫命令 讀狀態(tài)讀狀態(tài) 寫顯示數(shù)據(jù)寫顯示數(shù)據(jù) 讀顯示數(shù)據(jù)讀顯示數(shù)據(jù)字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 12345678910111213141516VSS

15、 VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模塊RSR/W操作操作00寫命令寫命令操作(初始化、光標(biāo)操作(初始化、光標(biāo)定位等)定位等)01讀狀態(tài)讀狀態(tài)操作(讀忙標(biāo)志)操作(讀忙標(biāo)志)10寫數(shù)據(jù)寫數(shù)據(jù)操作(要顯示的內(nèi)容)操作(要顯示的內(nèi)容)11讀數(shù)據(jù)讀數(shù)據(jù)操作(可以把顯示存操作(可以把顯示存儲(chǔ)區(qū)中的數(shù)據(jù)反讀出來)儲(chǔ)區(qū)中的數(shù)據(jù)反讀出來)字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 12345678910111213141516VSS VDD VORS R/WEDB0 DB1ADB3DB2DB5DB4DB7DB6KLCD模塊RS:數(shù)據(jù)和指令選擇控制

16、端,RS=0:命令/狀態(tài);RS=1:數(shù)據(jù)R/W:讀寫控制線,R/W=0:寫操作;R/W=1:讀操作E:數(shù)據(jù)讀寫操作控制位,E線向LCD模塊發(fā)送一個(gè)脈沖,LCD模塊與單片機(jī)之間將進(jìn)行一次數(shù)據(jù)交換字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 讀狀態(tài)操作 狀態(tài)字的最高位的BF為忙標(biāo)志位,1表示LCD正在忙,0表示不忙。通過判斷最高位BF的0、1狀態(tài),就可以知道LCD當(dāng)前是否處于忙狀態(tài),如果LCD一直處于忙狀態(tài),則繼續(xù)查詢等待,否則進(jìn)行下面的操作。查詢忙狀態(tài)程序段如下:do i=lcd_r_start(); / 調(diào)用讀狀態(tài)函數(shù),讀取LCD狀態(tài)字 i&=0 x80; / 采用與操作屏蔽掉

17、低7位 delay(2);/ 延時(shí) while(i!=0); / LCD忙,繼續(xù)查詢,否則退出循環(huán)字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 寫命令操作 LCD上電時(shí),都必須按照一定的時(shí)序?qū)CD進(jìn)行初始化操作,主要任務(wù)是設(shè)置LCD的工作方式、顯示狀態(tài)、清屏、輸入方式、光標(biāo)位置等。 字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 寫命令操作 編號指令名稱控制信號命令字D7 D6 D5 D4 D3 D2 D1 D01清屏0 00 0 0 0 0 0 0 12歸home位0 00 0 0 0 0 0 1 3輸入方式設(shè)置0 00 0 0 0 0 1 I/D S4顯示狀態(tài)設(shè)置0 00

18、0 0 0 1 D C B5光標(biāo)畫面滾動(dòng)0 00 0 0 1 S/C R/L 6工作方式設(shè)置0 00 0 1 DL N F 7CGRAM地址設(shè)置0 00 1 A5 A4 A3 A2 A1 A08DDRAM地址設(shè)置0 01 A6 A5 A4 A3 A2 A1 A09讀BF和AC0 1BF AC6 AC5 AC4 AC3 AC2 AC1 AC0字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 初始化操作 LCD初始工作方式設(shè)置顯示狀態(tài)設(shè)置清屏返回輸入方式設(shè)置001DL N F * *設(shè)置單片機(jī)與LCD接口數(shù)據(jù)位數(shù)DL、顯示行數(shù)N、字型FDL=1:8位、DL=0:4位; N=1:2行、N=0:1

19、行F=1:510、F=0:57例:00111000B(38H)設(shè)置數(shù)據(jù)位數(shù)8位,2行顯示,57點(diǎn)陣字符00001DCB設(shè)整體顯示開關(guān)D、光標(biāo)開關(guān)C、光標(biāo)位的字符閃耀BD=1:開顯示;C=0:不顯示光標(biāo);B=0:光標(biāo)位字符不閃爍例:00001100B(0CH)打開LCD顯示,光標(biāo)不顯示,光標(biāo)位字符不閃爍清屏命令字01H,將光標(biāo)設(shè)置為第一行第一列000001 I/D S設(shè)光標(biāo)移動(dòng)方向并確定整體顯示是否移動(dòng)I/D=1:增量方式右移、I/D=0:減量方式左移S=1:移位、S=0:不移位例:00000110B(06H)設(shè)置光標(biāo)增量方式右移,顯示字符不移動(dòng)字符字符LCD LCD 液晶顯示和接口液晶顯示和接

20、口 寫命令操作 void lcd_w_cmd(unsigned char com) unsigned char i; do / 查LCD忙操作 i=lcd_r_start(); / 調(diào)用讀狀態(tài)字函數(shù) i=i&0 x80; / 與操作屏蔽掉低7位 delay(2); while(i!=0); / LCD忙,繼續(xù)查詢,否則退出循環(huán) RW=0; delay1(); RS=0; / RW=1,RS=0,寫LCD命令字 delay1(); E=1; /E端時(shí)序 delay1(); P1=com; /將com中的命令字寫入LCD數(shù)據(jù)口 delay1(); E=0; delay1(); RW=1;

21、delay(255);字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 寫數(shù)據(jù)操作 光標(biāo)位置與相應(yīng)命令字 列行 123456789101112131415161808182838485868788898A8B8C8D8E8F2C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF注:表中命令字以十六進(jìn)制形式給出,該命令字就是與LCD顯示位置相對應(yīng)的DDRAM地址。字符字符LCD LCD 液晶顯示和接口液晶顯示和接口 void lcd_w_dat(unsigned char dat) unsigned char i; do / 查忙操作 i=lcd_r_start();/ 調(diào)用讀狀

22、態(tài)字函數(shù) i=i&0 x80; / 與操作屏蔽掉低7位 delay(2); while(i!=0); / LCD忙,繼續(xù)查詢,否則退出循環(huán) RW=0; delay1(); RS=1;/ RW=1,RS=0,寫LCD命令字 delay1(); E=1;/ E端時(shí)序 delay1(); P1=dat;/ 將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口 delay1(); E=0; delay1(); RW=1; delay(255);單片機(jī)與鍵盤接口單片機(jī)與鍵盤接口單片機(jī)與鍵盤接口單片機(jī)與鍵盤接口p按鍵按照結(jié)構(gòu)原理可分為兩類,一類是觸點(diǎn)式開關(guān)按鍵,如機(jī)械式開關(guān)、導(dǎo)電橡膠式開關(guān)等;另一類是無觸點(diǎn)開關(guān)按

23、鍵,如電氣式按鍵,磁感應(yīng)按鍵等。前者造價(jià)低,后者壽命長。p按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類。主要區(qū)別是識(shí)別鍵符及給出相應(yīng)鍵碼的方法。編碼鍵盤主要是用硬件來實(shí)現(xiàn)對按鍵的識(shí)別,硬件結(jié)構(gòu)復(fù)雜;非編碼鍵盤主要是由軟件來實(shí)現(xiàn)按鍵的定義與識(shí)別,硬件結(jié)構(gòu)簡單,軟件編程量大。按鍵消抖處理:按鍵消抖處理:按鍵為機(jī)械彈性觸點(diǎn)開關(guān),是利用機(jī)械觸點(diǎn)接按鍵為機(jī)械彈性觸點(diǎn)開關(guān),是利用機(jī)械觸點(diǎn)接觸和分離實(shí)現(xiàn)電路的通斷。由于機(jī)械觸點(diǎn)的彈性作用,加上人們觸和分離實(shí)現(xiàn)電路的通斷。由于機(jī)械觸點(diǎn)的彈性作用,加上人們按鍵時(shí)的力度、方向的不同,按鍵開關(guān)從按下到接觸穩(wěn)定要經(jīng)過按鍵時(shí)的力度、方向的不同,按鍵開關(guān)從按下到接觸穩(wěn)定要經(jīng)

24、過數(shù)毫秒的彈跳抖動(dòng),既在按下的幾十毫秒時(shí)間里會(huì)連續(xù)產(chǎn)生多個(gè)數(shù)毫秒的彈跳抖動(dòng),既在按下的幾十毫秒時(shí)間里會(huì)連續(xù)產(chǎn)生多個(gè)脈沖。釋放按鍵時(shí)同樣會(huì)產(chǎn)生抖動(dòng)脈沖。釋放按鍵時(shí)同樣會(huì)產(chǎn)生抖動(dòng) 。這兩次抖動(dòng)的時(shí)間分別為。這兩次抖動(dòng)的時(shí)間分別為 5-10ms 左右,按鍵的穩(wěn)定閉合期通常大于左右,按鍵的穩(wěn)定閉合期通常大于 0.3-0.5 秒。為了確保秒。為了確保 MCU 對一次按鍵動(dòng)作只確認(rèn)一次,在確認(rèn)按鍵是否閉合時(shí),必須對一次按鍵動(dòng)作只確認(rèn)一次,在確認(rèn)按鍵是否閉合時(shí),必須要進(jìn)行消抖處理。要進(jìn)行消抖處理。硬件消抖硬件消抖,需要在按鍵連接的設(shè)計(jì)上增加硬件消抖電路,需要在按鍵連接的設(shè)計(jì)上增加硬件消抖電路,如如 R-S

25、觸發(fā)器或觸發(fā)器或 RC 積分電路等。積分電路等。軟件消抖軟件消抖,在軟件中對按鍵進(jìn)行兩次確認(rèn),第一次檢測到,在軟件中對按鍵進(jìn)行兩次確認(rèn),第一次檢測到按鍵按下后,間隔按鍵按下后,間隔 10ms 左右再次檢測該按鍵是否按下,兩左右再次檢測該按鍵是否按下,兩次都測到按鍵按下時(shí)才最終確認(rèn),從而消除了抖動(dòng)的影響。次都測到按鍵按下時(shí)才最終確認(rèn),從而消除了抖動(dòng)的影響。硬件消抖方式增加了系統(tǒng)的成本,而利用軟件方式消抖則硬件消抖方式增加了系統(tǒng)的成本,而利用軟件方式消抖則是比較經(jīng)濟(jì)的做法,但增加了軟件設(shè)計(jì)的復(fù)雜性。是比較經(jīng)濟(jì)的做法,但增加了軟件設(shè)計(jì)的復(fù)雜性。 在按鍵接口軟件中,除了要考慮按鍵消抖外,一般還要判在按

26、鍵接口軟件中,除了要考慮按鍵消抖外,一般還要判別按鍵的釋放,只有檢測到按鍵釋放以后,才能確定為一別按鍵的釋放,只有檢測到按鍵釋放以后,才能確定為一次完整的按鍵動(dòng)作完成。次完整的按鍵動(dòng)作完成。 軟件去抖 (a)檢測按鍵 (b)釋放按鍵 按鍵去抖流程圖獨(dú)立式按鍵 獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但每個(gè)按鍵必須占用一根I/O口線,因此,在按鍵較多時(shí),I/O口線浪費(fèi)較大,不宜采用。矩陣式按鍵 通常,矩陣式鍵盤的列線由單片機(jī)輸出口控制,行線連接單片機(jī)的輸入口。當(dāng)鍵盤中按鍵數(shù)量較多時(shí),為了減少對當(dāng)鍵盤中按鍵數(shù)量較多時(shí),為了減少對 I/O 口的占用,通口的占用,通常將按鍵排列成矩陣形式,也稱為行列鍵盤

27、。常將按鍵排列成矩陣形式,也稱為行列鍵盤。 unsigned char scan_key (void)unsigned char i,temp,m,n;bit find=0;P0=0 xff;for(i=0;i4;i+)P2=0 xfei;temp=P0;temp=temp&0 x0f;while(temp!=0)m=i;find=1;switch(temp)case 0 x01: n=0;break;case 0 x02: n=1;break;case 0 x04: n=2;break;case 0 x08: n=3;break;default: break;if(find=0) r

28、eturn -1;else return (n*4+m);單片機(jī)與鍵盤接口單片機(jī)與鍵盤接口矩陣式按鍵 鍵盤編程掃描法識(shí)別按鍵一般應(yīng)包括以下內(nèi)容:(1)判別有無鍵按下。(2)鍵盤掃描取得閉合鍵的行、列號。(3)用計(jì)算法或查表法得到鍵值。(4)判斷閉合鍵是否釋放,如沒釋放則繼續(xù)等待。(5)將閉合鍵的鍵值保存,同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。完成鍵盤掃描和處理的程序是系統(tǒng)程序中的一個(gè)專完成鍵盤掃描和處理的程序是系統(tǒng)程序中的一個(gè)專用子程序,用子程序,MCU 調(diào)用該鍵盤掃描子程序?qū)︽I盤進(jìn)調(diào)用該鍵盤掃描子程序?qū)︽I盤進(jìn)行掃描和處理的方式有三種:行掃描和處理的方式有三種:1.程序控制掃描方式程序控制掃描方式。在主

29、控程序中的適當(dāng)位置調(diào)用鍵盤。在主控程序中的適當(dāng)位置調(diào)用鍵盤掃描程序,對鍵盤進(jìn)行讀取和處理。掃描程序,對鍵盤進(jìn)行讀取和處理。 2.定時(shí)掃描方式。定時(shí)掃描方式。使用使用 MCU 的一個(gè)定時(shí)器,使其產(chǎn)生一的一個(gè)定時(shí)器,使其產(chǎn)生一個(gè)個(gè) 10ms 的定時(shí)中斷,在連續(xù)兩次中斷中都讀到相同的按的定時(shí)中斷,在連續(xù)兩次中斷中都讀到相同的按鍵按下(間隔鍵按下(間隔 10ms 作為消抖處理),作為消抖處理),MCU 才執(zhí)行相應(yīng)才執(zhí)行相應(yīng)的鍵處理程序。的鍵處理程序。 3.中斷方式。中斷方式。鍵盤的硬件電路要做一定的改動(dòng),增加一個(gè)鍵盤的硬件電路要做一定的改動(dòng),增加一個(gè)按鍵產(chǎn)生中斷信號的輸入線,當(dāng)鍵盤有按鍵按下時(shí),鍵按鍵

30、產(chǎn)生中斷信號的輸入線,當(dāng)鍵盤有按鍵按下時(shí),鍵盤硬件電路產(chǎn)生一個(gè)外部的中斷信號,盤硬件電路產(chǎn)生一個(gè)外部的中斷信號,MCU 響應(yīng)外部中響應(yīng)外部中斷,進(jìn)行鍵盤處理。斷,進(jìn)行鍵盤處理。實(shí)際產(chǎn)品中按鍵的功能和使用:實(shí)際產(chǎn)品中按鍵的功能和使用:電子手表電子手表 只有只有2-3 個(gè)的按鍵,卻要實(shí)現(xiàn)時(shí)間、日期、個(gè)的按鍵,卻要實(shí)現(xiàn)時(shí)間、日期、鬧鐘時(shí)間的設(shè)置和查看顯示等多種功能,因此這些按鍵鬧鐘時(shí)間的設(shè)置和查看顯示等多種功能,因此這些按鍵是多功能(或復(fù)用)的,在不同的狀態(tài)下,按鍵的功能是多功能(或復(fù)用)的,在不同的狀態(tài)下,按鍵的功能也不同。也不同。手機(jī)鍵盤手機(jī)鍵盤 按鍵接口設(shè)計(jì)和實(shí)現(xiàn)的核心,更多的體現(xiàn)在軟件接口處

31、按鍵接口設(shè)計(jì)和實(shí)現(xiàn)的核心,更多的體現(xiàn)在軟件接口處理程序的設(shè)計(jì)中。理程序的設(shè)計(jì)中。有限狀態(tài)機(jī)分析設(shè)計(jì)的基本原理有限狀態(tài)機(jī)分析設(shè)計(jì)的基本原理 :有限狀態(tài)機(jī)由有限的狀態(tài)和相互之間的轉(zhuǎn)移構(gòu)成,有限狀態(tài)機(jī)由有限的狀態(tài)和相互之間的轉(zhuǎn)移構(gòu)成,在任何時(shí)候只能處于給定數(shù)目的狀態(tài)中的一個(gè)。當(dāng)在任何時(shí)候只能處于給定數(shù)目的狀態(tài)中的一個(gè)。當(dāng)接收到一個(gè)輸入事件時(shí),狀態(tài)機(jī)產(chǎn)生一個(gè)輸出,同接收到一個(gè)輸入事件時(shí),狀態(tài)機(jī)產(chǎn)生一個(gè)輸出,同時(shí)也可能伴隨著狀態(tài)的轉(zhuǎn)移。時(shí)也可能伴隨著狀態(tài)的轉(zhuǎn)移。基于狀態(tài)機(jī)分析的簡單按鍵設(shè)計(jì)基于狀態(tài)機(jī)分析的簡單按鍵設(shè)計(jì)#define key_input P07 / 按鍵輸入口 #define key_st

32、ate_0 0 #define key_state_1 1 #define key_state_2 2 char read_key(void) static char key_state = 0; char key_press, key_return = 0; key_press = key_input; / 讀按鍵 I/O電平 switch (key_state) case key_state_0: / 按鍵初始態(tài) if (!key_press) key_state = key_state_1; / 鍵被按下,狀態(tài)轉(zhuǎn)換到鍵確認(rèn)態(tài) break; case key_state_1: / 按鍵確認(rèn)

33、態(tài) if (!key_press) key_return = 1; / 按鍵仍按下,按鍵確認(rèn)輸出為“1” key_state = key_state_2; / 狀態(tài)轉(zhuǎn)換到鍵釋放態(tài) else key_state = key_state_0; / 按鍵已抬起,轉(zhuǎn)換到按鍵初始態(tài) break; case key_state_2: if (key_press) key_state = key_state_0; /按鍵已釋放,轉(zhuǎn)換到按鍵初始態(tài) break; return key_return; 定時(shí)掃描方式的鍵盤接口程序定時(shí)掃描方式的鍵盤接口程序鍵盤接口函數(shù)鍵盤接口函數(shù) read_keyboard()完成了對完成了對 4*3 鍵盤鍵盤的掃描識(shí)別和鍵盤的編碼。編碼鍵盤的定義使用的掃描識(shí)別和鍵盤的編碼。編碼鍵盤的定義使用 define 語句定義,鍵盤的形式:語句定義,鍵盤的形式:#define No_key 255 #define K1_1 1 #define K1_2 2 #define K1_3 3 #define K2_1 4 #define K2_2 5 #define K2_3 6 #define K3_1 7 #define K3_2 8 #define K3_3 9 #define K4_1 10 #define K4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論