日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
矩陣鍵盤掃描程序
矩陣鍵盤掃描程序
 更新時(shí)間:2008-7-26 19:43:51  點(diǎn)擊數(shù):3
【字體: 字體顏色
 矩陣按鍵掃描程序是一種節(jié)省IO口的方法,按鍵數(shù)目越多節(jié)省IO口就越可觀,本程序的思路跟書上一樣:先判斷某一列(行)是否有按鍵按下,再判斷該行(列)是那一只鍵按下。但是,在程序的寫法上,站長(zhǎng)采用了最簡(jiǎn)單的方法,使得程序效率最高。
  本程序中,如果檢測(cè)到某鍵按下了,就不再檢測(cè)其它的按鍵,這完全能滿足絕大多數(shù)需要,又能節(jié)省大量的CPU時(shí)間。另外,本人認(rèn)為鍵盤用延時(shí)程序來(lái)消除抖動(dòng),完全是浪費(fèi)時(shí)間。試想,如果不用中斷執(zhí)行(用中斷執(zhí)行需要更多的硬件資源)的方法來(lái)掃描鍵盤,每秒鐘掃描20-100次,每次都要延時(shí)10-20MS的話,我們的單片機(jī)還有多少時(shí)間做正事呢?所以,很多人學(xué)會(huì)了單片機(jī),最終確做不出產(chǎn)品(除非產(chǎn)品跟例子一樣)。
  其實(shí),延時(shí)的這段時(shí)間,CPU可以做其它的事呀。所以,本鍵盤掃描程序的前面后面都可以加入少少代碼,既可以達(dá)到完美的消抖動(dòng)效果,又可以擴(kuò)展其它的功能(例如按鍵封鎖、按鍵長(zhǎng)按等按鍵功能復(fù)用!)。注意:以上都是當(dāng)時(shí)的看法,不過(guò),現(xiàn)在還是很有用。
  本鍵盤掃描子程序名叫key,每次要掃描時(shí)用call key調(diào)用即可。以下子程序內(nèi)容:

key:MOV p0,#00001111b;上四位和下四位分別為行和列,所以送出高低電壓檢查有沒有按鍵按下
jmp k10;跳到K10處開始掃描,這里可以改成其它條件轉(zhuǎn)移指令來(lái)決定本次掃描是否要繼續(xù),例如減1為0轉(zhuǎn)移或者位為1或0才轉(zhuǎn)移,這主要用來(lái)增加功能,確認(rèn)上一按鍵功能是否完成?是否相當(dāng)于經(jīng)過(guò)了延時(shí)?是否要封鎖鍵盤?
goend:jmp kend;如果上面判斷本次不執(zhí)行鍵盤掃描程序,則立即轉(zhuǎn)到程序尾部,不要浪費(fèi)CPU的時(shí)間
k10:jb p0.0,k20;掃描正式開始,先檢查列1四個(gè)鍵是否有鍵按下,如果沒有,則跳到K20檢查列2
k11:MOV p0,#11101111b;列1有鍵按下時(shí),P0.0變低,到底是那一個(gè)鍵按下?現(xiàn)在分別輸出各行低電平
jb p0.0,k12;該行的鍵不按下時(shí),p0.0為高電平,跳到到K12,檢查其它的行
MOV r1,#1;如果正好是這行的鍵按下,將寄存器R0寫下1,表示1號(hào)鍵按下了
k12:MOV p0,#11011111b
jb p0.0,k13
MOV r1,#2;如果正好是這行的鍵按下,將寄存器R0寫下2,表示2號(hào)鍵按下了
k13:MOV p0,#10111111b
jb p0.0,k14
MOV r1,#3;如果正好是這行的鍵按下,將寄存器R0寫下3,表示3號(hào)鍵按下了
k14:MOV p0,#01111111b
jb p0.0,kend;如果現(xiàn)在四個(gè)鍵都沒有按下,可能按鍵松開或干擾,退出掃描(以后相同)
MOV r1,#4如果正好是這行的鍵按下,將寄存器R0寫下4,表示4號(hào)鍵按下了
jmp kend;已經(jīng)找到按下的鍵,跳到結(jié)尾吧

k20:jb p0.1,k30;列2檢查為高電平再檢查列3、4
k21:MOV p0,#11101111b;列2有健按下時(shí),P0.0會(huì)變低,到底是那一行的鍵按下呢?分別輸出行的低電平
jb p0.1,k22;該行的鍵不按下時(shí)p0.0為高電平,跳到到K22,檢查另外三行
MOV r1,#5;如果正好是這行的鍵按下,將寄存器R0寫下5,表示5號(hào)鍵按下了(以后相同,不再重復(fù)了)
k22:MOV p0,#11011111b
jb p0.1,k23
MOV r1,#6
k23:MOV p0,#10111111b
jb p0.1,k24
MOV r1,#7
k24:MOV p0,#01111111b
jb p0.1,kend
MOV r1,#8
jmp kend;已經(jīng)找到按下的鍵,跳到結(jié)尾吧(以后相同,不要重復(fù)了)

k30:jb p0.2,k40
k31:MOV p0,#11101111b
jb p0.2,k32
MOV r1,#9
k32:MOV p0,#11011111b
jb p0.2,k33
MOV r1,#10
k33:MOV p0,#10111111b
jb p0.2,k34
MOV r1,#11
k34:MOV p0,#01111111b
jb p0.2,kend
MOV r1,#12
jmp kend

k40:jb p0.3,kend
k41:MOV p0,#11101111b
jb p0.3,k42
MOV r1,#13
k42:MOV p0,#11011111b
jb p0.3,k43
MOV r1,#14
k43:MOV p0,#10111111b
jb p0.3,k44
MOV r1,#15
k44:MOV p0,#01111111b
jb p0.3,kend
MOV r1,#16
kend: ret

  鍵盤掃描結(jié)束了,寄存器R1的值就直接表示了是那個(gè)鍵按下的,根據(jù)不同的鍵值去執(zhí)行不同的程序,從而實(shí)現(xiàn)了十六個(gè)矩陣鍵盤掃描,同樣原理,最多可以識(shí)別255個(gè)按鍵的矩陣掃描。
  我們可以每次鍵盤掃描開始時(shí)檢查R0的值是否為0,只有在為0才掃描鍵盤,不為0就證明剛剛掃描過(guò)鍵值,相應(yīng)的按鍵工作還沒有完成。但是必須記得,每個(gè)按鍵命令執(zhí)行完成后,要給R0寫上0,表示可以掃描鍵盤。
  本鍵盤掃描程序的優(yōu)點(diǎn)在于:不用專門的按鍵延時(shí)程序,提高了CPU效率,也不用中斷來(lái)掃描鍵盤,節(jié)省了硬件資源。另外,本鍵盤掃描程序,每次掃描占用CPU時(shí)最短,不論有鍵按下或者無(wú)鍵按下都可以在很短的時(shí)間完成一次掃描。(2007年更新:其實(shí)占用CPU多少時(shí)間無(wú)關(guān)緊要,最要緊的就是能將CPU的時(shí)間合理的分配給每一個(gè)任務(wù),當(dāng)時(shí)是因?yàn)楫?dāng)時(shí)程序任務(wù)中采用了多字節(jié)數(shù)據(jù)的乘除運(yùn)算,對(duì)CPU時(shí)間特別緊張才有這樣的看法。)
  還有,本程序只使用幾條最常用的匯編命令,MOV/JB/JMP/RET,而這幾條命令是最常用、最易懂、最好學(xué)的命令!有的鍵盤掃描程序還用與呀、或呀、移位呀、查表呀,我都還沒有看懂。
  • 上一篇: STC89C系列單片機(jī)燒錄程序步驟
  • 下一篇: 單片機(jī)定時(shí)中斷的精確定時(shí)編程方法種種
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1