版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課題六按鍵原理第1頁,共42頁,2023年,2月20日,星期四課題目標本課題的任務是用按鍵控制單片機實現(xiàn)顯示,如圖6-1所示。學習單片機對鍵盤信息的處理方法,學會用鍵盤控制單片機程序的運行。第2頁,共42頁,2023年,2月20日,星期四課題分析為了讓單片機控制發(fā)光二極管,需要將發(fā)光二極管連接到單片機的端口上,圖6-1就是實驗電路板單片機對彩燈(發(fā)光二極管)控制的電路連接。在一個單片機系統(tǒng)中,為了實現(xiàn)人對單片機的控制,按鍵是最常用的輸入設備之一。而要實現(xiàn)多個按鍵的輸入識別與控制,先要學習并理解單個按鍵的輸入與對應程序的處理方法,然后再學習對多個鍵進行處理。因此,將按鍵任務分為單鍵控制LED顯示和獨立式按鍵控制兩個任務來完成。第3頁,共42頁,2023年,2月20日,星期四任務一獨立式按鍵控制的LED顯示
本任務是利用獨立按鍵實現(xiàn)對LED進行控制,每當按下一次鍵時,LED顯示方式變化左移一次,用以顯示按鍵控制的結果。
第4頁,共42頁,2023年,2月20日,星期四圖6-2鍵盤控制原理圖第5頁,共42頁,2023年,2月20日,星期四圖6-3LED顯示原理圖第6頁,共42頁,2023年,2月20日,星期四
為了實現(xiàn)用按鍵控制LED的顯示,首先要使單片機讀入按鍵的狀態(tài),再根據(jù)鍵盤的狀態(tài)去控制LED的亮滅。對LED的控制,在前面的課題中已經(jīng)講了,這里不再作重點講解,僅僅作為一個鍵盤控制對象的例子。根據(jù)圖6-2所示的硬件電路,每當按下按鍵時,單片機引腳P0.0將為低電平,程序運行時,需要檢測P0.0引腳是否為低電平,若P0.0引腳為低電平,表示按鍵已按下。當每次按下按鍵時,則使P1口輸出的數(shù)據(jù)變化一次,輸出不同數(shù)據(jù),對應不同的發(fā)光二極管被點亮,對應的程序設計框圖如圖6-4所示。程序設計分析第7頁,共42頁,2023年,2月20日,星期四初始化LED左移是否按下鍵否是圖6-4按鍵控制LED流程圖第8頁,共42頁,2023年,2月20日,星期四一、按鍵的特性
作為機械按鈕,鍵按下或者放開時,都存在著接通或斷開的不穩(wěn)定現(xiàn)象,從而使信號電平具有抖動現(xiàn)象,這種現(xiàn)象稱為抖動。由于按鍵的抖動,使按鍵對應的輸出電平出現(xiàn)若干個干擾脈沖,如圖6-5所示。為了保證每按下一次按鍵,單片機程序只動作一次,就需要消除因按鍵的抖動現(xiàn)象而引起的錯誤動作,具體的處理方式分為硬件消除抖動和軟件消除抖動,簡稱消抖。鍵盤電路原理抖動時間<10ms開關動作時間>100ms“1”“0”<10ms圖6-5按鍵的波形第9頁,共42頁,2023年,2月20日,星期四1、硬件消抖硬件消抖采用硬件電路完成,圖6-6所示的電路就是一種硬件消抖電路。&I/O接口&+5v圖6-6消除抖動電路開關單片機第10頁,共42頁,2023年,2月20日,星期四2、軟件消抖
也可用軟件方法消除抖動,而用軟件消抖則一般是采用軟件延時的方式,通過延時來換取讀入穩(wěn)定的數(shù)據(jù)。圖6-7就是軟件消抖的流程圖。延時等待10ms
仍有按鍵信號?Y
有按鍵信號?NYN鍵盤處理按鍵釋放?NY圖6-7軟件消抖的流程圖第11頁,共42頁,2023年,2月20日,星期四C語言程序:#include<AT89X51.H>#include<intrins.h>unsignedcharcount;voiddelay10ms(void){unsignedchari,j;for(i=250;i>0;i--)for(j=248;j>0;j--);}第12頁,共42頁,2023年,2月20日,星期四voidmain(void){count=0xfe;while(1){if(P0_3==0){delay10ms();if(P0_3==0){P1=count;count=_crol_(count,1);while(P0_3==0);}}}}第13頁,共42頁,2023年,2月20日,星期四2、匯編語言程序
ORG00hmova,#0fehREL:JBP0.3,REL;判斷SP1是否按下
LCALLDELAY;若按下,則延時10ms左右
JBP0.3,REL;再判斷SP1是否真得按下
movp1,arlaJNBP0.3,$;等待SP1釋放SJMPrel;繼續(xù)對K1按鍵掃描DELAY:MOVR6,#20;延時10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETEND第14頁,共42頁,2023年,2月20日,星期四
任務二獨立式按鍵控制數(shù)碼管顯示本任務是利用獨立按鍵實現(xiàn)對數(shù)碼管的控制,每當按下一次鍵時,數(shù)碼管顯示按鍵次數(shù)0-9。第15頁,共42頁,2023年,2月20日,星期四程序設計流程圖分析初始化數(shù)碼管顯示是否按下鍵否是圖6-5按鍵控制數(shù)碼管流程圖第16頁,共42頁,2023年,2月20日,星期四1、C語言程序:#include<AT89X51.H>unsignedcharcount;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay10ms(void){unsignedchari,j;for(i=250;i>0;i--)for(j=248;j>0;j--);}第17頁,共42頁,2023年,2月20日,星期四voidmain(void){while(1){if(P0_3==0){delay10ms();if(P0_3==0){count++;if(count==10){count=0;}P1=table[count];while(P0_3==0);}}}}第18頁,共42頁,2023年,2月20日,星期四2、匯編程序ORG00hSTART:MOVR1,#00H;初始化R1為0,
REL:JBP0.3,REL;判斷SP1是否按下
LCALLDELAY;若按下,則延時10ms左右
JBP0.3,REL;再判斷SP1是否真得按下
MOVA,R1MOVDPTR,#TABLEMOVCA,@A+DPTRMOVP1,AINCR1JNBP0.3,$;等待SP1釋放CJNER1,#10,REL第19頁,共42頁,2023年,2月20日,星期四SJMPSTART;繼續(xù)對K1按鍵掃描DELAY:MOVR6,#20;延時10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FHEND第20頁,共42頁,2023年,2月20日,星期四任務三矩陣鍵盤數(shù)碼管顯示本任務目標是用矩陣鍵盤控制數(shù)碼管顯示。第21頁,共42頁,2023年,2月20日,星期四圖6-7按鍵電路圖第22頁,共42頁,2023年,2月20日,星期四任務分析為了便于學習和理解,如何用鍵盤實現(xiàn)程序控制,完成設計需要的鍵盤控制功能。著重強調鍵盤定義和鍵盤控制的實現(xiàn)。為了便于輸入,采用16個鍵的4×4矩陣式鍵盤作為輸入,輸出電路采用前面課題已經(jīng)介紹的LED數(shù)碼管的顯示電路,控制電路由AT89S51單片機系統(tǒng)。第23頁,共42頁,2023年,2月20日,星期四圖4-7顯示電路原理圖第24頁,共42頁,2023年,2月20日,星期四在單片機程序中,對多個鍵的處理應包括以下三項內容:鍵輸入檢查鍵盤是否有鍵被按下,并消除按鍵抖動,獲得或規(guī)定(單個按鍵)按鍵的鍵號。鍵譯碼鍵號為鍵盤位置碼,根據(jù)鍵號查表得出被按鍵的鍵值。鍵值:數(shù)字鍵0~9、字符鍵0AH~0FH、功能鍵10H~等,是按鍵在物理位置上的人為規(guī)定數(shù)值。鍵處理根據(jù)鍵值執(zhí)行不同程序段。如:若鍵值屬于數(shù)字、字符鍵,則調用顯示數(shù)字和字符子程序;若鍵值屬于功能鍵,則進行多分支轉移,執(zhí)行各個功能程序段。一、鍵盤處理第25頁,共42頁,2023年,2月20日,星期四
1.掃描鍵盤行列式鍵盤的具體識別方法有掃描法和反轉法。所謂掃描法,即用列線輸出,行線輸入(可交換行線和列線的輸入、輸出關系)。其中,列線逐列輸出0,某行有鍵按下,行線有0輸入,若無按鍵,行線輸入全部為1。當有鍵按下時,根據(jù)行線和列線可最終確定哪個按鍵被按下。另外,還可以采用反轉法,也就是行線和列線交換輸入、輸出,分兩步獲取按鍵的鍵號,但是在多鍵同時按下時不能準確判斷。一、鍵盤處理第26頁,共42頁,2023年,2月20日,星期四
2.鍵譯碼通過上述步驟獲得按鍵的行號和列號,但按鍵所在物理位置的變化將引起鍵號的不一致,或者由于按鍵功能的不同規(guī)定也將影響鍵號所對應的功能的執(zhí)行。如圖4-9所示的鍵盤,就是兩種典型的鍵盤布局,鍵盤的編號與鍵盤的掃描碼沒有直接的運算關系,造成程序編寫的困難。一、鍵盤處理第27頁,共42頁,2023年,2月20日,星期四3.鍵處理對于鍵盤上的每一個鍵,具體是完成什么功能,由鍵盤要完成具體任務和程序設計來決定。對于鍵盤處理來說,首先要做的事情是要消除抖動,矩陣鍵盤的消抖原理與單鍵的消抖原理是一致的,但在程序的編寫上略有不同。為了同時兼顧動態(tài)顯示,而動態(tài)顯示函數(shù)調用一次需要幾個ms,因此可以用動態(tài)顯示函數(shù)代替消抖用的延時函數(shù)。手按動鍵盤的時間為零點幾秒到幾秒之間,遠大于動態(tài)顯示函數(shù)的所消耗的時間,所以可以每調用一次顯示函數(shù)后,再判斷一次是否有鍵按下的方法進行消抖和鍵盤信息處理。具體的消抖功能的鍵盤處理程序框圖如圖4-10所示。一、鍵盤處理第28頁,共42頁,2023年,2月20日,星期四圖4-10帶動態(tài)顯示的鍵盤消抖程序框圖第29頁,共42頁,2023年,2月20日,星期四C語言程序:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuchartemp,num;voiddelay(uintZ);ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};第30頁,共42頁,2023年,2月20日,星期四voidmain(){while(1){P0=0xfe; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xee:num=0;break;case0xde:num=1;break;case0xbe:num=2;break; case0x7e:num=3; break;}第31頁,共42頁,2023年,2月20日,星期四while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}第32頁,共42頁,2023年,2月20日,星期四
P0=0xfd; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xed:num=4;break;case0xdd:num=5;break;case0xbd:num=6;break; case0x7d:num=7;break;}第33頁,共42頁,2023年,2月20日,星期四while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}第34頁,共42頁,2023年,2月20日,星期四
P0=0xfb; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xeb:num=8;break;case0xdb:num=9;break;case0xbb:num=10;break; case0x7b:num=11;break;}第35頁,共42頁,2023年,2月20日,星期四while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}第36頁,共42頁,2023年,2月20日,星期四
P0=0xf7; temp=P0; temp=temp&0xf0;while(temp!=0xf0){delay(5); temp=P0;temp=temp&0xf0; while(temp!=0xf0) {temp=P0; switch(temp){case0xe7:num=12;break;case0xd7:num=13;break;case0xb7:num=14;break; case0x77:num=15;break;}第37頁,共42頁,2023年,2月20日,星期四while(temp!=0xf0){temp=P0;temp=temp&0xf0;}P1=table[num];}}}}voiddelay(uintZ){uintx,y;for(x=Z;x>0;x--)for(y=110;y>0;y--);}第38頁,共42頁,2023年,2月20日,星期四匯編語言源程序ORG0000HAJMPMAINORG0030HMAIN:MOVP1,#07HLOOP:MOVP0,#0feHACALLSCANKEYMOVP0,#0fdHACALLSCANKEYMOVP0,#0fbHACALLSCANKEYMOVP0,#0f7HACALLSCANKEYAJMPLOOP
第39頁,共42頁,2023年,2月20日,星期四
SCANKEY:MOVA,P0CJNEA,#0EEH,NEXT2MOVA,#00HAJMPSENDLEDNEXT2:CJNEA,#0deH,NEXT3MOVA,#01HAJMPSENDLEDNEXT3:CJNEA,#0beH,NEXT4MOVA,#02HAJMPSENDLEDNEXT4:CJNEA,#07eH,NEXT5MOVA,#03HAJMPSENDLEDNEXT5:CJNEA,#0edH,NEXT6MOVA,#04HAJMPSENDLEDNEXT6:CJNEA,#0DDH,NEXT7MOVA,#05HAJMPSENDLED第40頁,共42頁,2023年,2月20日,星期四
NEXT7:CJNEA,#0bdH,NEXT8MOVA,#06HAJMPSENDLEDNEXT8:CJNEA,#07dH,NEXT9MOVA,#07HAJMPSENDLEDNEXT9:CJNEA,#0ebH,NEXT10MOVA,#08HAJMPSENDLEDNEXT10:CJNEA,#0d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版對講門品牌授權與市場推廣合同2篇
- 教培機構2025年度27份合同協(xié)議(教育版權保護)2篇
- 二零二五版住宅小區(qū)配套設施使用權轉讓合同3篇
- 二零二五年度采砂廠承包生態(tài)補償金支付合同范本3篇
- 2024蔬菜種植項目承包合同協(xié)議2篇
- 二零二五版工程招投標與合同管理專家指導與案例分析3篇
- 工業(yè)廠房結構檢測與2025年度注漿加固合同3篇
- 展會安全保障合同(2篇)
- 二零二五年度餐飲業(yè)食品安全標準制定合同3篇
- 二零二五版鋼結構工程專用材料采購合同范本5篇
- 小學四年級數(shù)學知識點總結(必備8篇)
- GB/T 893-2017孔用彈性擋圈
- GB/T 11072-1989銻化銦多晶、單晶及切割片
- GB 15831-2006鋼管腳手架扣件
- 醫(yī)學會自律規(guī)范
- 商務溝通第二版第4章書面溝通
- 950項機電安裝施工工藝標準合集(含管線套管、支吊架、風口安裝)
- 微生物學與免疫學-11免疫分子課件
- 《動物遺傳育種學》動物醫(yī)學全套教學課件
- 弱電工程自檢報告
- 民法案例分析教程(第五版)完整版課件全套ppt教學教程最全電子教案
評論
0/150
提交評論