<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機學(xué)習之十:查詢(xún)方式按鍵

單片機學(xué)習之十:查詢(xún)方式按鍵

作者: 時(shí)間:2016-09-27 來(lái)源:網(wǎng)絡(luò ) 收藏

  一、實(shí)驗現象

本文引用地址:http://dyxdggzs.com/article/201609/310402.htm

  最右面的數碼管初始顯示0,每次按下外部按鍵K1執行加一,計數到九時(shí)重新回零。

  二、實(shí)驗目的

  掌握讀取外部按鍵時(shí)候應該注意的事項,掌握查詢(xún)方式響應按鍵的方法

  掌握讀取按鍵去抖動(dòng)的方法

  掌握判直接尋址位轉移指令jb,jnb的用法。

  三、實(shí)驗任務(wù)分析

  響應外部按鍵的方式有兩種,一種是查詢(xún)方式,一種是方式。

  查詢(xún)方式的響應過(guò)程如下:不斷的查詢(xún)是否有按鍵按下,如果有按鍵按下的話(huà),就執行相應的程序,否則繼續查詢(xún)。

  方式的響應過(guò)程如下:處理自己的工作,如果有按鍵按下,向單片機發(fā)出請求。單片機停下現在正在處理的工作,轉去執行中斷程序,執行之后回來(lái)繼續剛才的工作。

  本試驗程序我們采用查詢(xún)方式完成,下一個(gè)試驗我們采用中斷方式完成。

  還是先看看電路圖吧,當JMP4跳線(xiàn)拔下的時(shí)候,電路圖如下圖6-1所示。

  (注:如果JMP4跳線(xiàn)插上,則按鍵和中斷建立聯(lián)系。在本試驗中,JMP4跳線(xiàn)可以插也可以不插。因為我們采用查詢(xún)方式,沒(méi)有開(kāi)中斷。具體情況下一個(gè)試驗介紹。)

  

 

  從圖上我們可以看到,當按鍵k1按下的時(shí)候,對應P1.0輸入低電平。因此,我們要查詢(xún)k1是否按下,只要檢測到p1.0是低電平就可以拉。

  注意,在查詢(xún)按鍵是否按下時(shí)候,特別需要注意按鍵的去抖動(dòng)問(wèn)題,為什么呢?

  由于按鍵或者鍵盤(pán)都是利用機械觸點(diǎn)的合、斷作用。由于機械觸點(diǎn)的彈性作用,在閉合和斷開(kāi)的瞬間都會(huì )出現抖動(dòng)問(wèn)題。由于這種抖動(dòng),使得電壓信號在機械觸點(diǎn)的閉合、斷開(kāi)瞬間會(huì )出現一系列的脈沖信號,如下圖所示。抖動(dòng)的時(shí)間長(cháng)短,與開(kāi)關(guān)的機械特性有關(guān),一般為5~10ms。

  按鍵的穩定閉合期,由操作人員的按鍵動(dòng)作確定,一般為十分之幾秒至幾秒。為了保證按下一次按鍵,單片機只對按鍵作一次處理,就必須經(jīng)過(guò)去抖動(dòng)處理。

  

 

  通常去抖動(dòng)的方法有硬件和軟件兩種。

  硬件去抖是利用基本RS觸發(fā)器或者單穩態(tài)電路構成,大家可以參考相關(guān)數電教材。

  軟件處理的方法是:在檢測到按鍵按下時(shí),執行一個(gè)10ms左右的延時(shí)程序后,再次檢測該按鍵是否按下。如果仍然是按下?tīng)顟B(tài),就確認為鍵真正按下,從而消除了抖動(dòng)的影響。

  按照這個(gè)思路編寫(xiě)的程序如下:

  四、實(shí)驗程序

  org 0000h

  start: clr p1.5

  mov p0,#48h

  mov p2,#01h ;初始狀態(tài)最右面的數碼管顯示0

  main: mov r7,#0ffh

  wait1: jb p1.0,wait1 ;如果P1.0為1,轉回wait1繼續查詢(xún)。否則調用延時(shí)程序

  lcall del10ms ;調用10ms延時(shí)

  jb p1.0,wait1 ;再次查詢(xún)P1.0,如果是1,表示是抖動(dòng),轉回wait1

  ljmp play1 ;確定按鍵按下,轉去數碼顯示程序

  play1: inc r7

  mov a,r7

  mov dptr,#tab

  movc a,@a+dptr ;利用查表指令找欲顯示的數字,

  mov p0,a ;把 這個(gè)數字送到P0顯示

  cjne a,#48h,wait1 ;如果沒(méi)有顯示到最后一個(gè)數字,就繼續查詢(xún)按鍵狀態(tài)

  ljmp main ;如果顯示到最后一個(gè)數字就重新開(kāi)始

  tab: db 0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h,48h ;存放欲顯示數字的表格

  del10ms:mov r6,#14h ;10ms延時(shí)子程序

  del1: mov r5,#0ffh

  del2: djnz r4,del2

  djnz r3,del1

  ret

  end

  把這個(gè)程序下載到學(xué)習板上,按下k1,發(fā)現了什么?

  我們發(fā)現這個(gè)程序運行不是很穩定,如果我們按下的時(shí)間稍微長(cháng)一點(diǎn),顯示的數字就會(huì )變換幾次。

  這是為什么呢?

  由于數字顯示之后,單片機會(huì )返回重新查詢(xún)P1.0的狀態(tài),如果按下的時(shí)間很長(cháng),就會(huì )導致單片機又檢測到低電平,所以就繼續顯示。因此就會(huì )出現錯誤。

  如果我們希望按下一次按鍵,無(wú)論時(shí)間長(cháng)短,單片機只作一次按鍵處理,應該怎么辦呢?

  我們可以這樣作:在數字顯示之后,返回重新查詢(xún)之前,我們加入一條指令,讓單片機檢測P1.0是否回到高電平。如果是,就表示按鍵按下了一次,程序可以返回繼續查詢(xún),否則等待,一直到P1.0回到高電平。這樣就保證了按鍵按下一次,無(wú)論時(shí)間長(cháng)短,單片機只作一次按鍵處理。

  具體的做法是在原來(lái)的程序中增加如下的紅色語(yǔ)句,改進(jìn)后的程序如下:

  org 0000h

  start:clr p1.5

  mov p0,#48h

  mov p2,#01h ;初始狀態(tài)右面數碼管顯示0

  main: mov r7,#0ffh

  wait1:jb p1.0,wait1 ;按鍵沒(méi)有按下,等待

  call del10ms ;調用延時(shí)

  jb p1.0,wait1 ;繼續查詢(xún)

  ljmp play1

  play1: inc r7

  mov a,r7

  mov dptr,#tab

  movc a,@a+dptr

  mov p0,a ;查表顯示數字

  wait2: jnb p1.0,wait2 ;等待按鍵彈起

  cjne a,#48h,wait1 ;判斷是否顯示到最后一個(gè)數字

  ljmp main

  ret

  tab: db 0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h,48h

  del10ms:mov r6,#14h

  del1: mov r5,#0ffh

  del2: djnz r4,del2

  djnz r3,del1

  ret

  end



關(guān)鍵詞: 單片機 中斷

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>