C51單片機(jī)05(鍵盤)_第1頁
C51單片機(jī)05(鍵盤)_第2頁
C51單片機(jī)05(鍵盤)_第3頁
C51單片機(jī)05(鍵盤)_第4頁
C51單片機(jī)05(鍵盤)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、51系列單片機(jī)第第5講講 單片機(jī)鍵盤單片機(jī)鍵盤獨(dú)立按鍵獨(dú)立按鍵獨(dú)立按鍵觸發(fā)的中斷獨(dú)立按鍵觸發(fā)的中斷#includevoid main()TCON=0 x00;/設(shè)置外部中斷為電平觸發(fā)方式設(shè)置外部中斷為電平觸發(fā)方式EA=1;/中斷總控開放中斷總控開放EX0=1;/外部中斷外部中斷INT0開放開放EX1=1;/外部中斷外部中斷INT1開放開放P0=0 x00;/數(shù)碼管不顯示任何內(nèi)容數(shù)碼管不顯示任何內(nèi)容while(1);/等待中斷發(fā)生等待中斷發(fā)生void keypress0() interrupt 0 /外部中斷外部中斷INT0服務(wù)程序服務(wù)程序P0=0 x3f;/數(shù)碼管數(shù)碼管0顯示數(shù)字顯示數(shù)字0P2

2、=0 x00;void keypress1() interrupt 2 /外部中斷外部中斷INT1服務(wù)程序服務(wù)程序P0=0 x06;/數(shù)碼管數(shù)碼管1顯示數(shù)字顯示數(shù)字1P2=0 x01;練習(xí)練習(xí) 用查詢方式檢測(cè)獨(dú)立按鍵用查詢方式檢測(cè)獨(dú)立按鍵S19是否按下,若是否按下,若第一次按下,第一次按下,LED0發(fā)光;第二次按下,發(fā)光;第二次按下,LED0熄滅,循環(huán)往復(fù)。熄滅,循環(huán)往復(fù)。程序代碼程序代碼#include#define uchar unsigned char#define uint unsigned intsbit KEY1 = P32;/獨(dú)立按鍵獨(dú)立按鍵S19連接的端口連接的端口sbit L

3、ED0 = P00;/獨(dú)立發(fā)光二極管連接端口獨(dú)立發(fā)光二極管連接端口void Delay(uint milisec)/延時(shí)延時(shí)10msuint i,j;for(i=0; imilisec; i+)for(j=0; j1827; j+);程序代碼程序代碼void KEY()if(KEY1=0)/如果檢測(cè)到有鍵按下如果檢測(cè)到有鍵按下Delay(2); /20毫秒軟件防抖毫秒軟件防抖if(KEY1=0)/再次確認(rèn)是否有鍵按下再次確認(rèn)是否有鍵按下 LED0 = LED0;/LED顯示取反顯示取反Delay(50);/延時(shí)延時(shí)0.5秒再進(jìn)行下次按鍵的檢測(cè)秒再進(jìn)行下次按鍵的檢測(cè)void Main(void)

4、while(1) KEY();/查詢方式持續(xù)檢測(cè)是否有鍵按下查詢方式持續(xù)檢測(cè)是否有鍵按下練習(xí)練習(xí) 用查詢方式檢測(cè)獨(dú)立按鍵用查詢方式檢測(cè)獨(dú)立按鍵S19按下的次數(shù),按下的次數(shù),并在數(shù)碼管并在數(shù)碼管LED7上顯示,最大計(jì)數(shù)值為上顯示,最大計(jì)數(shù)值為9,超過超過9則從則從0開始重新計(jì)數(shù)。開始重新計(jì)數(shù)。#include#define uchar unsigned char#define uint unsigned intuchar code table16 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0

5、 x39,0 x5e,0 x79,0 x71;sbit KEY1 = P32;/獨(dú)立按鍵獨(dú)立按鍵S19連接的端口連接的端口uint k=0;void Delay(uint milisec)/延時(shí)延時(shí)10msuint i,j;for(i=0; imilisec; i+)for(j=0; j9) k=0; P0=tablek;/獲取獲取LED段位碼段位碼 Delay(50);/延時(shí)延時(shí)500ms再進(jìn)行下次按鍵的檢測(cè)再進(jìn)行下次按鍵的檢測(cè)練習(xí)練習(xí) 按下獨(dú)立鍵按下獨(dú)立鍵S19,使獨(dú)立發(fā)光二極管,使獨(dú)立發(fā)光二極管LED8發(fā)光發(fā)光1秒,然后自行熄滅(利用定時(shí)器實(shí)現(xiàn)秒,然后自行熄滅(利用定時(shí)器實(shí)現(xiàn)準(zhǔn)確定時(shí))準(zhǔn)

6、確定時(shí))練習(xí)練習(xí) 連續(xù)多次按下獨(dú)立鍵連續(xù)多次按下獨(dú)立鍵S19,使獨(dú)立發(fā)光二極,使獨(dú)立發(fā)光二極管管LED0LED8依次輪流發(fā)光,到頭以后能依次輪流發(fā)光,到頭以后能自行返回開始,循環(huán)執(zhí)行自行返回開始,循環(huán)執(zhí)行4 * 4 鍵盤陣列鍵盤陣列 若無鍵按下,讀回的低若無鍵按下,讀回的低4位為全位為全“1”0111練習(xí)練習(xí) 用查詢方式掃描用查詢方式掃描4 * 4鍵盤陣列,在最右側(cè)鍵盤陣列,在最右側(cè)數(shù)碼管數(shù)碼管LED(LED7)上顯示用戶按鍵的位置上顯示用戶按鍵的位置(0F)分析是否有鍵按下分析是否有鍵按下 先向先向P0口輸出口輸出0 xf0(高四位列選為全(高四位列選為全1 ,低四位行選為全低四位行選為全0

7、),然后讀回),然后讀回 由于由于P0口輸出有鎖存,若無鍵按下,從口輸出有鎖存,若無鍵按下,從P0口讀回應(yīng)該仍為口讀回應(yīng)該仍為0 xf0,低四位行選保持全,低四位行選保持全0 若讀回值不為若讀回值不為0 xf0,即低四位行選不為全,即低四位行選不為全0,說明有鍵按下說明有鍵按下111100001分析是哪個(gè)鍵按下分析是哪個(gè)鍵按下 雙重循環(huán)雙重循環(huán) 先選定一列,再逐行掃描,獲得鍵位置碼先選定一列,再逐行掃描,獲得鍵位置碼 將鍵位置碼送到將鍵位置碼送到LED7顯示顯示第第0次掃描,次掃描,P1輸出輸出0 xef(11101111)01111111 第第0次讀回次讀回P1,P1 & 00000

8、001,結(jié)果不為,結(jié)果不為0 第第1次讀回次讀回P1,P1 & 00000010,結(jié)果不為,結(jié)果不為0 第第2次讀回次讀回P1,P1 & 00000100,結(jié)果不為,結(jié)果不為0 第第3次讀回次讀回P1,P1 & 00001000,結(jié)果不為,結(jié)果不為0說明按下的鍵不在P14對(duì)應(yīng)的列第第1次掃描,次掃描,P1輸出輸出0 xdf(11011111)10111111 第第0次讀回次讀回P1,P1 & 00000001,結(jié)果不為,結(jié)果不為0 第第1次讀回次讀回P1,P1 & 00000010,結(jié)果不為,結(jié)果不為0 第第2次讀回次讀回P1,P1 & 0000

9、0100,結(jié)果不為,結(jié)果不為0 第第3次讀回次讀回P1,P1 & 00001000,結(jié)果不為,結(jié)果不為0說明按下的鍵不在P15對(duì)應(yīng)的列第第2次掃描,次掃描,P1輸出輸出0 xbf(10111111)11011111 第第0次讀回次讀回P1,P1 & 00000001,結(jié)果不為,結(jié)果不為0 第第1次讀回次讀回P1,P1 & 00000010,結(jié)果為,結(jié)果為0 找到了按鍵所在的列找到了按鍵所在的列(2)與行與行(1)說明按下的鍵在P16對(duì)應(yīng)的列0程序代碼程序代碼#include#include#define uint unsigned int#define uchar un

10、signed charuchar code table16 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void Delay_1ms(uint i)/1ms延時(shí)延時(shí)uchar x,j;for(j=0;ji;j+) for(x=0;x=148;x+);void delay()/一個(gè)很短的延時(shí)一個(gè)很短的延時(shí)int i,j;for(i=0; i=20; i+);鍵盤掃描的關(guān)鍵代碼鍵盤掃描的關(guān)鍵代碼uchar Keyscan(void)/返回一個(gè)返回一

11、個(gè)0F的鍵位置碼的鍵位置碼uchar i, j, temp; uchar Buffer4 = 0 xef, 0 xdf, 0 xbf, 0 x7f;for(j=0; j4; j+)/從第從第0列開始,逐列掃描列開始,逐列掃描P1 = Bufferj;/向向P1口輸出列掃描碼口輸出列掃描碼(高高4位含有一個(gè)位含有一個(gè)0)delay();/短暫延時(shí),等待短暫延時(shí),等待 P1 口的狀態(tài)穩(wěn)定口的狀態(tài)穩(wěn)定temp = 0 x01; /從第從第0行開始,逐行掃描行開始,逐行掃描 for(i=0; i4; i+) if(!(P1 & temp) /若有鍵按下,若有鍵按下, P1 & temp為全為全“0” return (j*4+i);/返回鍵位置返回鍵位置(j表示列號(hào),表示列號(hào), i表示行號(hào)表示行號(hào)) temp = 1;/左移一位,掃描下一行左移一位,掃描下一行主程序主程序void Main(void)uchar Key_Value; /讀出的鍵值讀出的鍵值while(1)P1 = 0 xf0;/檢測(cè)是否有鍵按下檢測(cè)是否有鍵按下if(P1 != 0 xf0)/若有鍵按下若有鍵按下 Delay_1ms(15);/等待等待15ms,按鍵消抖,按鍵消抖 if(P1 != 0 xf0)/確實(shí)有鍵按下確實(shí)有鍵按下 Key_Valu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論