在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)學(xué)習(xí)之十:查詢方式按鍵

            單片機(jī)學(xué)習(xí)之十:查詢方式按鍵

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

              一、實(shí)驗(yàn)現(xiàn)象

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

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

              二、實(shí)驗(yàn)?zāi)康?/p>

              掌握讀取外部按鍵時(shí)候應(yīng)該注意的事項(xiàng),掌握查詢方式響應(yīng)按鍵的方法

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

              掌握判直接尋址位轉(zhuǎn)移指令jb,jnb的用法。

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

              響應(yīng)外部按鍵的方式有兩種,一種是查詢方式,一種是方式。

              查詢方式的響應(yīng)過程如下:不斷的查詢是否有按鍵按下,如果有按鍵按下的話,就執(zhí)行相應(yīng)的程序,否則繼續(xù)查詢。

              方式的響應(yīng)過程如下:處理自己的工作,如果有按鍵按下,向單片機(jī)發(fā)出請(qǐng)求。單片機(jī)停下現(xiàn)在正在處理的工作,轉(zhuǎn)去執(zhí)行中斷程序,執(zhí)行之后回來繼續(xù)剛才的工作。

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

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

              (注:如果JMP4跳線插上,則按鍵和中斷建立聯(lián)系。在本試驗(yàn)中,JMP4跳線可以插也可以不插。因?yàn)槲覀儾捎貌樵兎绞?,沒有開中斷。具體情況下一個(gè)試驗(yàn)介紹。)

              

             

              從圖上我們可以看到,當(dāng)按鍵k1按下的時(shí)候,對(duì)應(yīng)P1.0輸入低電平。因此,我們要查詢k1是否按下,只要檢測(cè)到p1.0是低電平就可以拉。

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

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

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

              

             

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

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

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

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

              四、實(shí)驗(yàn)程序

              org 0000h

              start: clr p1.5

              mov p0,#48h

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

              main: mov r7,#0ffh

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

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

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

              ljmp play1 ;確定按鍵按下,轉(zhuǎn)去數(shù)碼顯示程序

              play1: inc r7

              mov a,r7

              mov dptr,#tab

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

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

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

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

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

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

              del1: mov r5,#0ffh

              del2: djnz r4,del2

              djnz r3,del1

              ret

              end

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

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

              這是為什么呢?

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

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

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

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

              org 0000h

              start:clr p1.5

              mov p0,#48h

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

              main: mov r7,#0ffh

              wait1:jb p1.0,wait1 ;按鍵沒有按下,等待

              call del10ms ;調(diào)用延時(shí)

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

              ljmp play1

              play1: inc r7

              mov a,r7

              mov dptr,#tab

              movc a,@a+dptr

              mov p0,a ;查表顯示數(shù)字

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

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

              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)鍵詞: 單片機(jī) 中斷

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉