色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

函數進階與按鍵(2)

冬至子 ? 來源:金沙灘工作室 ? 作者:金沙灘工作室 ? 2023-06-14 10:54 ? 次閱讀

8.4.5 矩陣按鍵的掃描

我們講獨立按鍵掃描的時候,大家已經簡單認識了矩陣按鍵是什么樣子了。矩陣按鍵相當于4組每組各4個獨立按鍵,一共是16個按鍵。那我們如何區分這些按鍵呢?想一下我們生活所在的地球,要想確定我們所在的位置,就要借助經緯線,而矩陣按鍵就是通過行線和列線來確定哪個按鍵被按下的。那么在程序中我們又如何進行這項操作呢?

前邊講過,按鍵按下通常都會保持100ms以上,如果在按鍵掃描中斷中,我們每次讓矩陣按鍵的一個KeyOut輸出低電平,其它三個輸出高電平,判斷當前所有KeyIn的狀態,下次中斷時再讓下一個KeyOut輸出低電平,其它三個輸出高電平,再次判斷所有KeyIn,通過快速的中斷不停的循環進行判斷,就可以最終確定哪個按鍵按下了,這個原理是不是跟數碼管動態掃描有點類似?數碼管我們在動態賦值,而按鍵這里我們在動態讀取狀態。

至于掃描間隔時間和消抖時間,因為現在有4個KeyOut輸出,要中斷4次才能完成一次全部按鍵的掃描,顯然再采用2ms中斷判斷8次掃描值的方式時間就太長了(248=64ms),那么我們就改用1ms中斷判斷4次采樣值,這樣消抖時間還是16ms(144)。下面就用程序實現出來,程序循環掃描板子上的K1~K16這16個矩陣按鍵,分離出按鍵動作并在按鍵按下時把當前按鍵的編號顯示在一位數碼管上(用0~F表示,顯示值=按鍵編號-1)。

圖片

圖片

圖片

圖片

圖片

圖片

這個程序完成了矩陣按鍵的掃描、消抖、動作分離的全部內容,希望大家認真研究一下,徹底掌握矩陣按鍵的原理和應用方法。在程序中還有兩點值得說明一下。

首先,可能你已經發現了,中斷函數中掃描KeyIn輸入和切換KeyOut輸出的順序與前面提到的順序不同,程序中我首先對所有的KeyIn輸入做了掃描、消抖,然后才切換到了下一次的KeyOut輸出,也就是說我們中斷每次掃描的實際是上一次輸出選擇的那行按鍵,這是為什么呢?因為任何信號從輸出到穩定都需要一個時間,有時它足夠快而有時卻不夠快,這取決于具體的電路設計,我們這里的輸入輸出順序的顛倒就是為了讓輸出信號有足夠的時間(一次中斷間隔)來穩定,并有足夠的時間來完成它對輸入的影響,當你的按鍵電路中還有硬件電容消抖時,這樣處理就是絕對必要的了,雖然這樣使得程序理解起來有點繞,但它的適應性是最好的,換個說法就是,這段程序足夠“健壯”,足以應對各種惡劣情況。

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

8.5 簡易加法計算器

學到這里,我們已經掌握了一種顯示設備和一種輸入設備的使用,那么是不是可以來做點綜合性的實驗了。好吧,那我們就來做一個簡易的加法計算器,用程序實現從板子上標有0~9數字的按鍵輸入相應數字,該數字要實時顯示到數碼管上,用標有向上箭頭的按鍵代替加號,按下加號后可以再輸入一串數字,然后回車鍵計算加法結果,并同時顯示到數碼管上。雖然這遠不是一個完善的計算器程序,但作為初學者也足夠你研究一陣子了。

首先,本程序相對于之前的例程要復雜得多,需要完成的工作也多得多,所以我們把各個子功能都做成獨立的函數,以使程序便于編寫和維護。大家分析程序的時候就從主函數和中斷函數入手,隨著程序的流程進行就可以了。大家可以體會體會劃分函數的好處,想想如果還是只有主函數和中斷函數來實現的話程序會是什么樣子。

其次,大家可以看到我們再把矩陣按鍵掃描分離出動作以后,并沒有直接使用行列數所組成的數值作為分支判斷執行動作的依據,而是把抽象的行列數轉換為了一種叫做標準鍵盤鍵碼(就是電腦鍵盤的編碼)的數據,然后用得到的這個數據作為下一步分支判斷執行動作的依據,為什么多此一舉呢?有兩層含義:第一,盡量讓自己設計的東西(包括硬件和軟件)向已有的行業規范或標準看齊,這樣有助于別人理解認可你的設計,也有助于你的設計與別人的設計相對接,畢竟標準就是為此而生的嘛。第二,有助于程序的層次化而方便維護與移植,比如我們現在用的按鍵是44的,但如果后續又增加了一行成了45的,那么由行列數組成的編號可能就變了,我們就要在程序的各個分支中查找修改,稍不留神就會出錯,而采用這種轉換后,我們則只需要維護KeyCodeMap這樣一個數組表格就行了,看上去就像是把程序的底層驅動與應用層的功能實現函數分離開了,應用層不用關心底層的實現細節,底層改變后也無需在應用層中做相應修改,兩層程序之間是一種標準化的接口。這就是程序的層次化,而層次化是構建復雜系統的必備條件,那么現在就先通過簡單的示例來學習一下吧。

作為初學者針對這種程序的學習方式是,先從頭到尾讀一到三遍,邊讀邊理解,然后邊抄邊理解,徹底理解透徹后,自己嘗試獨立寫出來。完全采用記憶模式來學習這種例程,一兩個例程你可能感覺不到什么提高,當這種例程背過上百八十個的時候,厚積薄發的感覺就來了。同時,在抄讀的過程中也要注意學習編程規范,這些可都是無形的財富,可以為你日后的研發工作加分的哦。

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

8.6 練習題

1、理解單片機最小系統三要素電路設計規則。

2、掌握函數間相互調用的方法和規則。

3、學會獨立按鍵和矩陣按鍵的電路設計方法和軟件編程思路。

4、用一個按鍵實現一個數碼管數字從F~0遞減的變化程序。

5、用矩陣按鍵做一個簡易減法計算器。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6042

    文章

    44617

    瀏覽量

    637566
  • 數碼管
    +關注

    關注

    32

    文章

    1883

    瀏覽量

    91337
  • 計算器
    +關注

    關注

    16

    文章

    437

    瀏覽量

    37427
  • 矩陣按鍵
    +關注

    關注

    0

    文章

    28

    瀏覽量

    8380
收藏 人收藏

    評論

    相關推薦

    函數進階按鍵(1)

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

    按鍵函數分享!

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

    STM32入門(進階)任務具體的要求

    這個小項目是來自參加電設時,老師發的STM32入門(進階)任務,具體的要求 STM32入門(進階)任務,具體的要求如下:軟件設計要求編寫簡單I/O程序,能用板上的4個基本按鍵控制10個LED燈的亮滅
    發表于 08-09 08:09

    51單片機按鍵檢測和信號函數仿真的詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機按鍵檢測和信號函數仿真的詳細資料說明,在單片機中會遇到識別按鍵的問題,常用的獨立按鍵電路如下圖:
    發表于 04-11 18:22 ?4次下載
    51單片機<b class='flag-5'>按鍵</b>檢測和信號<b class='flag-5'>函數</b>仿真的詳細資料說明

    單片機的按鍵處理框架資料和函數詳細說明

    按鍵處理代碼即可,言歸正傳,先簡介一下幾個文件,ringfifo.c提供了一個簡單的環形緩沖隊列,用以通知按鍵消息,key.c 實現的按鍵的框架處理(讀取按鍵,調用
    發表于 09-12 17:23 ?1次下載
    單片機的<b class='flag-5'>按鍵</b>處理框架資料和<b class='flag-5'>函數</b>詳細說明

    STM32實用的按鍵處理程序可移植的函數免費下載

    本文檔的主要內容詳細介紹的是STM32實用的按鍵處理程序可移植的函數免費下載
    發表于 04-28 08:00 ?2次下載
    STM32實用的<b class='flag-5'>按鍵</b>處理程序可移植的<b class='flag-5'>函數</b>免費下載

    C語言的進階學習課件資料合集

    本文檔的主要內容詳細介紹的是C語言的進階學習課件資料合集包括了:第1節-數據的存儲,第2節-指針的進階,第3節-字符串+內存函數的介紹,第4節-自定義類型詳解(結構體+枚舉+聯合),第
    發表于 07-14 08:00 ?11次下載
    C語言的<b class='flag-5'>進階</b>學習課件資料合集

    大疆發布 “御”2 行業進階版:熱成像傳感器、可見光相機模塊

    昨天,大疆發布了 “御”2 行業進階版,擁有更高清、流暢的熱成像傳感器和更高像素的可見光傳感器,支持 32 倍數碼變焦,可搭載 RTK 模塊實現厘米級定位,標準套裝售價 36000 元。 IT之家
    的頭像 發表于 12-16 09:15 ?3754次閱讀

    【CC2530強化實訓02】普通延時函數實現按鍵的單擊與雙擊

    【題目要求】 用一個按鍵實現單擊與雙擊的功能已經是很多嵌入式產品的常用手法。使用定時器的間隔定時來計算按鍵按下的時間是通用的做法,然而,使用普通的延時函數實現按鍵單擊與雙擊的區分也
    發表于 11-29 20:21 ?19次下載
    【CC2530強化實訓02】普通延時<b class='flag-5'>函數</b>實現<b class='flag-5'>按鍵</b>的單擊與雙擊

    STM32 按鍵輸入實驗

    加粗樣式一.實驗目的1.熟悉使用STM32F4XX開發板2.掌握其GPIO的使用方法3.掌握按鍵的實現方法二.實現步驟(1)使能按鍵對應IO口時鐘。調用函數
    發表于 12-27 18:53 ?4次下載
    STM32 <b class='flag-5'>按鍵</b>輸入實驗

    stm32按鍵實驗講解

    按鍵實驗GPIO引腳圖及相關配置按鍵初始化函數按鍵掃描函數按下按鍵給出對應響應GPIO引腳圖及相
    發表于 12-27 19:09 ?6次下載
    stm32<b class='flag-5'>按鍵</b>實驗講解

    指針進階第五站:函數指針!

    定義一個函數指針,指向的函數有兩個int形參并且返回一個函數指針,返回的指針指向一個有一個int形參且返回int的函數?下面哪個是正確的?
    發表于 08-17 15:58 ?550次閱讀

    Python-函數進階與遞歸

    在程序開發中,有時候,會希望一個函數執行結束后,告訴調用者 **一個結果** ,以便調用者針對結果作后續的處理,返回值是函數完成工作后,最后給調用者的一個結果,在函數中使用 return 關鍵字可以返回結果,**調用者** 可以
    的頭像 發表于 02-16 15:19 ?796次閱讀
    Python-<b class='flag-5'>函數</b>的<b class='flag-5'>進階</b>與遞歸

    函數信號發生器按鍵介紹

    函數信號發生器是電子測試領域中不可或缺的重要工具,它能夠模擬產生各種波形信號,如正弦波、方波、三角波等,廣泛應用于電路測試、信號模擬、科學研究等多個領域。函數信號發生器的按鍵設計是其功能實現的重要組成部分,本文將對
    的頭像 發表于 05-15 16:14 ?2042次閱讀

    函數信號發生器的各類按鍵

    發生器的功能,了解其按鍵的功能和使用方法至關重要。本文將詳細介紹函數信號發生器的各類按鍵,旨在為讀者提供全面而深入的了解。
    的頭像 發表于 05-30 16:05 ?1258次閱讀
    主站蜘蛛池模板: 在线亚洲精品福利网址导航 | 日本久久精品免视看国产成人 | 美女被爆插 | 波多野结衣网站www 波多野结衣教师系列6 | 欧美日韩视频高清一区 | 国产成人精品免费视频大全办公室 | 伊人久久大香线蕉综合亚洲 | 99视频在线观看免费视频 | 性派对xxxhd 性啪啪chinese东北女人 | 恋夜影院支持安卓视频美女 | 性XXXXX搡XXXXX搡景甜 | 亚洲AV无码专区国产乱码网站 | 孕交videosgratis乌克兰 | 欧美18在线 | 国产不卡在线观看视频 | 双性诱受灌满哭求饶BL | 神马影院午夜理论二 | 青青草久久伊人 | 宫交拔不出来了h黑人 | 欧美激情性AAAAA片欧美 | 九九精品久久 | 女人被躁到高潮嗷嗷叫免费 | 日日干夜夜爽 | 久久中文字幕乱码免费 | 超碰97人人做人人爱少妇 | 9亚洲欧洲免费无码在线 | 国产综合欧美区在线 | 广西美女色炮150p图 | 中文字幕 日韩 无码 在线 | 久久国产亚洲电影天堂 | 欧美精品AV无码一区二区 | 午夜伦伦电影理论片费看 | 免费人妻无码AV不卡在线 | 国产AV精品白浆一区二 | 精品久久久久中文字幕加勒比东京热 | www精品一区二区三区四区 | 99热在线免费观看 | 甜性涩爱下载 | 亚洲欧美成人无码久久久 | 国产精品人成在线播放新网站 | 日本伦理电影聚 |