一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

函數(shù)進(jìn)階與按鍵(2)

冬至子 ? 來(lái)源:金沙灘工作室 ? 作者:金沙灘工作室 ? 2023-06-14 10:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

8.4.5 矩陣按鍵的掃描

我們講獨(dú)立按鍵掃描的時(shí)候,大家已經(jīng)簡(jiǎn)單認(rèn)識(shí)了矩陣按鍵是什么樣子了。矩陣按鍵相當(dāng)于4組每組各4個(gè)獨(dú)立按鍵,一共是16個(gè)按鍵。那我們?nèi)绾螀^(qū)分這些按鍵呢?想一下我們生活所在的地球,要想確定我們所在的位置,就要借助經(jīng)緯線,而矩陣按鍵就是通過(guò)行線和列線來(lái)確定哪個(gè)按鍵被按下的。那么在程序中我們又如何進(jìn)行這項(xiàng)操作呢?

前邊講過(guò),按鍵按下通常都會(huì)保持100ms以上,如果在按鍵掃描中斷中,我們每次讓矩陣按鍵的一個(gè)KeyOut輸出低電平,其它三個(gè)輸出高電平,判斷當(dāng)前所有KeyIn的狀態(tài),下次中斷時(shí)再讓下一個(gè)KeyOut輸出低電平,其它三個(gè)輸出高電平,再次判斷所有KeyIn,通過(guò)快速的中斷不停的循環(huán)進(jìn)行判斷,就可以最終確定哪個(gè)按鍵按下了,這個(gè)原理是不是跟數(shù)碼管動(dòng)態(tài)掃描有點(diǎn)類似?數(shù)碼管我們?cè)趧?dòng)態(tài)賦值,而按鍵這里我們?cè)趧?dòng)態(tài)讀取狀態(tài)。

至于掃描間隔時(shí)間和消抖時(shí)間,因?yàn)楝F(xiàn)在有4個(gè)KeyOut輸出,要中斷4次才能完成一次全部按鍵的掃描,顯然再采用2ms中斷判斷8次掃描值的方式時(shí)間就太長(zhǎng)了(248=64ms),那么我們就改用1ms中斷判斷4次采樣值,這樣消抖時(shí)間還是16ms(144)。下面就用程序?qū)崿F(xiàn)出來(lái),程序循環(huán)掃描板子上的K1~K16這16個(gè)矩陣按鍵,分離出按鍵動(dòng)作并在按鍵按下時(shí)把當(dāng)前按鍵的編號(hào)顯示在一位數(shù)碼管上(用0~F表示,顯示值=按鍵編號(hào)-1)。

圖片

圖片

圖片

圖片

圖片

圖片

這個(gè)程序完成了矩陣按鍵的掃描、消抖、動(dòng)作分離的全部?jī)?nèi)容,希望大家認(rèn)真研究一下,徹底掌握矩陣按鍵的原理和應(yīng)用方法。在程序中還有兩點(diǎn)值得說(shuō)明一下。

首先,可能你已經(jīng)發(fā)現(xiàn)了,中斷函數(shù)中掃描KeyIn輸入和切換KeyOut輸出的順序與前面提到的順序不同,程序中我首先對(duì)所有的KeyIn輸入做了掃描、消抖,然后才切換到了下一次的KeyOut輸出,也就是說(shuō)我們中斷每次掃描的實(shí)際是上一次輸出選擇的那行按鍵,這是為什么呢?因?yàn)槿魏?a target="_blank">信號(hào)從輸出到穩(wěn)定都需要一個(gè)時(shí)間,有時(shí)它足夠快而有時(shí)卻不夠快,這取決于具體的電路設(shè)計(jì),我們這里的輸入輸出順序的顛倒就是為了讓輸出信號(hào)有足夠的時(shí)間(一次中斷間隔)來(lái)穩(wěn)定,并有足夠的時(shí)間來(lái)完成它對(duì)輸入的影響,當(dāng)你的按鍵電路中還有硬件電容消抖時(shí),這樣處理就是絕對(duì)必要的了,雖然這樣使得程序理解起來(lái)有點(diǎn)繞,但它的適應(yīng)性是最好的,換個(gè)說(shuō)法就是,這段程序足夠“健壯”,足以應(yīng)對(duì)各種惡劣情況。

其次,是一點(diǎn)小小的編程技巧。注意看keyout = keyout & 0x03;這一行,在這里我是要讓keyout在0~3之間變化,加到4就自動(dòng)歸零,按照常規(guī)你可以用前面講過(guò)的if語(yǔ)句輕松實(shí)現(xiàn),但是你現(xiàn)在看一下這樣程序是不是同樣可以做到這一點(diǎn)呢?因?yàn)?、1、2、3這四個(gè)數(shù)值正好占用2個(gè)二進(jìn)制的位,所以我們把一個(gè)字節(jié)的高6位一直清零的話,這個(gè)字節(jié)的值自然就是一種到4歸零的效果了??匆幌?,這樣一句代碼比if語(yǔ)句要更為簡(jiǎn)潔吧,而效果完全一樣。

8.5 簡(jiǎn)易加法計(jì)算器

學(xué)到這里,我們已經(jīng)掌握了一種顯示設(shè)備和一種輸入設(shè)備的使用,那么是不是可以來(lái)做點(diǎn)綜合性的實(shí)驗(yàn)了。好吧,那我們就來(lái)做一個(gè)簡(jiǎn)易的加法計(jì)算器,用程序?qū)崿F(xiàn)從板子上標(biāo)有0~9數(shù)字的按鍵輸入相應(yīng)數(shù)字,該數(shù)字要實(shí)時(shí)顯示到數(shù)碼管上,用標(biāo)有向上箭頭的按鍵代替加號(hào),按下加號(hào)后可以再輸入一串?dāng)?shù)字,然后回車鍵計(jì)算加法結(jié)果,并同時(shí)顯示到數(shù)碼管上。雖然這遠(yuǎn)不是一個(gè)完善的計(jì)算器程序,但作為初學(xué)者也足夠你研究一陣子了。

首先,本程序相對(duì)于之前的例程要復(fù)雜得多,需要完成的工作也多得多,所以我們把各個(gè)子功能都做成獨(dú)立的函數(shù),以使程序便于編寫(xiě)和維護(hù)。大家分析程序的時(shí)候就從主函數(shù)和中斷函數(shù)入手,隨著程序的流程進(jìn)行就可以了。大家可以體會(huì)體會(huì)劃分函數(shù)的好處,想想如果還是只有主函數(shù)和中斷函數(shù)來(lái)實(shí)現(xiàn)的話程序會(huì)是什么樣子。

其次,大家可以看到我們?cè)侔丫仃嚢存I掃描分離出動(dòng)作以后,并沒(méi)有直接使用行列數(shù)所組成的數(shù)值作為分支判斷執(zhí)行動(dòng)作的依據(jù),而是把抽象的行列數(shù)轉(zhuǎn)換為了一種叫做標(biāo)準(zhǔn)鍵盤(pán)鍵碼(就是電腦鍵盤(pán)的編碼)的數(shù)據(jù),然后用得到的這個(gè)數(shù)據(jù)作為下一步分支判斷執(zhí)行動(dòng)作的依據(jù),為什么多此一舉呢?有兩層含義:第一,盡量讓自己設(shè)計(jì)的東西(包括硬件和軟件)向已有的行業(yè)規(guī)范或標(biāo)準(zhǔn)看齊,這樣有助于別人理解認(rèn)可你的設(shè)計(jì),也有助于你的設(shè)計(jì)與別人的設(shè)計(jì)相對(duì)接,畢竟標(biāo)準(zhǔn)就是為此而生的嘛。第二,有助于程序的層次化而方便維護(hù)與移植,比如我們現(xiàn)在用的按鍵是44的,但如果后續(xù)又增加了一行成了45的,那么由行列數(shù)組成的編號(hào)可能就變了,我們就要在程序的各個(gè)分支中查找修改,稍不留神就會(huì)出錯(cuò),而采用這種轉(zhuǎn)換后,我們則只需要維護(hù)KeyCodeMap這樣一個(gè)數(shù)組表格就行了,看上去就像是把程序的底層驅(qū)動(dòng)與應(yīng)用層的功能實(shí)現(xiàn)函數(shù)分離開(kāi)了,應(yīng)用層不用關(guān)心底層的實(shí)現(xiàn)細(xì)節(jié),底層改變后也無(wú)需在應(yīng)用層中做相應(yīng)修改,兩層程序之間是一種標(biāo)準(zhǔn)化的接口。這就是程序的層次化,而層次化是構(gòu)建復(fù)雜系統(tǒng)的必備條件,那么現(xiàn)在就先通過(guò)簡(jiǎn)單的示例來(lái)學(xué)習(xí)一下吧。

作為初學(xué)者針對(duì)這種程序的學(xué)習(xí)方式是,先從頭到尾讀一到三遍,邊讀邊理解,然后邊抄邊理解,徹底理解透徹后,自己嘗試獨(dú)立寫(xiě)出來(lái)。完全采用記憶模式來(lái)學(xué)習(xí)這種例程,一兩個(gè)例程你可能感覺(jué)不到什么提高,當(dāng)這種例程背過(guò)上百八十個(gè)的時(shí)候,厚積薄發(fā)的感覺(jué)就來(lái)了。同時(shí),在抄讀的過(guò)程中也要注意學(xué)習(xí)編程規(guī)范,這些可都是無(wú)形的財(cái)富,可以為你日后的研發(fā)工作加分的哦。

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

8.6 練習(xí)題

1、理解單片機(jī)最小系統(tǒng)三要素電路設(shè)計(jì)規(guī)則。

2、掌握函數(shù)間相互調(diào)用的方法和規(guī)則。

3、學(xué)會(huì)獨(dú)立按鍵和矩陣按鍵的電路設(shè)計(jì)方法和軟件編程思路。

4、用一個(gè)按鍵實(shí)現(xiàn)一個(gè)數(shù)碼管數(shù)字從F~0遞減的變化程序。

5、用矩陣按鍵做一個(gè)簡(jiǎn)易減法計(jì)算器。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44961

    瀏覽量

    648853
  • 數(shù)碼管
    +關(guān)注

    關(guān)注

    32

    文章

    1889

    瀏覽量

    92401
  • 計(jì)算器
    +關(guān)注

    關(guān)注

    16

    文章

    439

    瀏覽量

    37993
  • 矩陣按鍵
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    8493
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    函數(shù)進(jìn)階按鍵(1)

    用戶與單片機(jī)之間的信息交互需要依賴于兩類設(shè)備:輸入設(shè)備和輸出設(shè)備。
    的頭像 發(fā)表于 06-14 10:50 ?1283次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>進(jìn)階</b>與<b class='flag-5'>按鍵</b>(1)

    按鍵函數(shù)分享!

    #defineKEY_InvalidState0#defineKEY_ShortState1#defineKEY_LongState2_UBYTEKEY_ReturnState(void);//用戶調(diào)用,返回按鍵狀態(tài)//清除按鍵
    發(fā)表于 10-23 04:37

    STM32入門(mén)(進(jìn)階)任務(wù)具體的要求

    這個(gè)小項(xiàng)目是來(lái)自參加電設(shè)時(shí),老師發(fā)的STM32入門(mén)(進(jìn)階)任務(wù),具體的要求 STM32入門(mén)(進(jìn)階)任務(wù),具體的要求如下:軟件設(shè)計(jì)要求編寫(xiě)簡(jiǎn)單I/O程序,能用板上的4個(gè)基本按鍵控制10個(gè)LED燈的亮滅
    發(fā)表于 08-09 08:09

    51單片機(jī)按鍵檢測(cè)和信號(hào)函數(shù)仿真的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)按鍵檢測(cè)和信號(hào)函數(shù)仿真的詳細(xì)資料說(shuō)明,在單片機(jī)中會(huì)遇到識(shí)別按鍵的問(wèn)題,常用的獨(dú)立按鍵電路如下圖:
    發(fā)表于 04-11 18:22 ?4次下載
    51單片機(jī)<b class='flag-5'>按鍵</b>檢測(cè)和信號(hào)<b class='flag-5'>函數(shù)</b>仿真的詳細(xì)資料說(shuō)明

    單片機(jī)的按鍵處理框架資料和函數(shù)詳細(xì)說(shuō)明

    按鍵處理代碼即可,言歸正傳,先簡(jiǎn)介一下幾個(gè)文件,ringfifo.c提供了一個(gè)簡(jiǎn)單的環(huán)形緩沖隊(duì)列,用以通知按鍵消息,key.c 實(shí)現(xiàn)的按鍵的框架處理(讀取按鍵,調(diào)用
    發(fā)表于 09-12 17:23 ?1次下載
    單片機(jī)的<b class='flag-5'>按鍵</b>處理框架資料和<b class='flag-5'>函數(shù)</b>詳細(xì)說(shuō)明

    STM32實(shí)用的按鍵處理程序可移植的函數(shù)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32實(shí)用的按鍵處理程序可移植的函數(shù)免費(fèi)下載
    發(fā)表于 04-28 08:00 ?3次下載
    STM32實(shí)用的<b class='flag-5'>按鍵</b>處理程序可移植的<b class='flag-5'>函數(shù)</b>免費(fèi)下載

    C語(yǔ)言的進(jìn)階學(xué)習(xí)課件資料合集

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言的進(jìn)階學(xué)習(xí)課件資料合集包括了:第1節(jié)-數(shù)據(jù)的存儲(chǔ),第2節(jié)-指針的進(jìn)階,第3節(jié)-字符串+內(nèi)存函數(shù)的介紹,第4節(jié)-自定義類型詳解(結(jié)構(gòu)體+枚舉+聯(lián)合),第
    發(fā)表于 07-14 08:00 ?13次下載
    C語(yǔ)言的<b class='flag-5'>進(jìn)階</b>學(xué)習(xí)課件資料合集

    大疆發(fā)布 “御”2 行業(yè)進(jìn)階版:熱成像傳感器、可見(jiàn)光相機(jī)模塊

    昨天,大疆發(fā)布了 “御”2 行業(yè)進(jìn)階版,擁有更高清、流暢的熱成像傳感器和更高像素的可見(jiàn)光傳感器,支持 32 倍數(shù)碼變焦,可搭載 RTK 模塊實(shí)現(xiàn)厘米級(jí)定位,標(biāo)準(zhǔn)套裝售價(jià) 36000 元。 IT之家
    的頭像 發(fā)表于 12-16 09:15 ?4038次閱讀

    【CC2530強(qiáng)化實(shí)訓(xùn)02】普通延時(shí)函數(shù)實(shí)現(xiàn)按鍵的單擊與雙擊

    【題目要求】 用一個(gè)按鍵實(shí)現(xiàn)單擊與雙擊的功能已經(jīng)是很多嵌入式產(chǎn)品的常用手法。使用定時(shí)器的間隔定時(shí)來(lái)計(jì)算按鍵按下的時(shí)間是通用的做法,然而,使用普通的延時(shí)函數(shù)實(shí)現(xiàn)按鍵單擊與雙擊的區(qū)分也
    發(fā)表于 11-29 20:21 ?19次下載
    【CC2530強(qiáng)化實(shí)訓(xùn)02】普通延時(shí)<b class='flag-5'>函數(shù)</b>實(shí)現(xiàn)<b class='flag-5'>按鍵</b>的單擊與雙擊

    STM32 按鍵輸入實(shí)驗(yàn)

    加粗樣式一.實(shí)驗(yàn)?zāi)康?.熟悉使用STM32F4XX開(kāi)發(fā)板2.掌握其GPIO的使用方法3.掌握按鍵的實(shí)現(xiàn)方法二.實(shí)現(xiàn)步驟(1)使能按鍵對(duì)應(yīng)IO口時(shí)鐘。調(diào)用函數(shù)
    發(fā)表于 12-27 18:53 ?4次下載
    STM32 <b class='flag-5'>按鍵</b>輸入實(shí)驗(yàn)

    stm32按鍵實(shí)驗(yàn)講解

    按鍵實(shí)驗(yàn)GPIO引腳圖及相關(guān)配置按鍵初始化函數(shù)按鍵掃描函數(shù)按下按鍵給出對(duì)應(yīng)響應(yīng)GPIO引腳圖及相
    發(fā)表于 12-27 19:09 ?6次下載
    stm32<b class='flag-5'>按鍵</b>實(shí)驗(yàn)講解

    指針進(jìn)階第五站:函數(shù)指針!

    定義一個(gè)函數(shù)指針,指向的函數(shù)有兩個(gè)int形參并且返回一個(gè)函數(shù)指針,返回的指針指向一個(gè)有一個(gè)int形參且返回int的函數(shù)?下面哪個(gè)是正確的?
    發(fā)表于 08-17 15:58 ?656次閱讀

    Python-函數(shù)進(jìn)階與遞歸

    在程序開(kāi)發(fā)中,有時(shí)候,會(huì)希望一個(gè)函數(shù)執(zhí)行結(jié)束后,告訴調(diào)用者 **一個(gè)結(jié)果** ,以便調(diào)用者針對(duì)結(jié)果作后續(xù)的處理,返回值是函數(shù)完成工作后,最后給調(diào)用者的一個(gè)結(jié)果,在函數(shù)中使用 return 關(guān)鍵字可以返回結(jié)果,**調(diào)用者** 可以
    的頭像 發(fā)表于 02-16 15:19 ?1000次閱讀
    Python-<b class='flag-5'>函數(shù)</b>的<b class='flag-5'>進(jìn)階</b>與遞歸

    函數(shù)信號(hào)發(fā)生器按鍵介紹

    函數(shù)信號(hào)發(fā)生器是電子測(cè)試領(lǐng)域中不可或缺的重要工具,它能夠模擬產(chǎn)生各種波形信號(hào),如正弦波、方波、三角波等,廣泛應(yīng)用于電路測(cè)試、信號(hào)模擬、科學(xué)研究等多個(gè)領(lǐng)域。函數(shù)信號(hào)發(fā)生器的按鍵設(shè)計(jì)是其功能實(shí)現(xiàn)的重要組成部分,本文將對(duì)
    的頭像 發(fā)表于 05-15 16:14 ?3072次閱讀

    函數(shù)信號(hào)發(fā)生器的各類按鍵

    發(fā)生器的功能,了解其按鍵的功能和使用方法至關(guān)重要。本文將詳細(xì)介紹函數(shù)信號(hào)發(fā)生器的各類按鍵,旨在為讀者提供全面而深入的了解。
    的頭像 發(fā)表于 05-30 16:05 ?2383次閱讀