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

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

3天內不再提示

全面剖析數碼管與矩陣鍵盤聯(lián)合使用法則

AGk5_ZLG_zhiyua ? 來源:互聯(lián)網 ? 作者:佚名 ? 2017-11-21 07:47 ? 次閱讀

第七章為面向通用接口的編程,本文內容為7.7 數碼管與矩陣鍵盤聯(lián)合使用、7.8 ZLG72128——數碼管與鍵盤管理、7.9 溫控器。

7.7 數碼管與矩陣鍵盤聯(lián)合使用

數碼管的位選引腳為PIO0_17 和PIO0_23,而矩陣鍵盤的列線引腳同樣為PIO0_17 和PIO0_23,當數碼管和矩陣鍵盤同時使用時,數碼管的位選引腳和矩陣鍵盤的列線引腳是復用的,這是常見的硬件電路設計,可以達到節(jié)省引腳的目的。

AMetal 提供了數碼管和矩陣鍵盤聯(lián)合使用的驅動,其本質上就是數碼管驅動和矩陣鍵盤驅動的簡單整合,避免了在多個實例信息中提供一些相同的信息,如數碼管實例信息中的位選引腳在和矩陣鍵盤實例信息中的列線引腳是完全一樣的。

由于存在兩種數碼管驅動:GPIO 輸出段碼,對應MiniPort-View 單獨使用;HC595 輸出段碼,對應MiniPort-View + MiniPort-595。當與矩陣鍵盤聯(lián)合使用時,也存在對應的兩種情況:GPIO 輸出段碼的數碼管和矩陣鍵盤聯(lián)合使用,對應MiniPort-View + MiniPort-Key;HC595 輸出段碼的數碼管和矩陣鍵盤聯(lián)合使用,對應MiniPort-View + MiniPort-595 +

MiniPort-Key。

>>> 7.7.1 數碼管、鍵盤與I/O 驅動

當MiniPort-View 和MiniPort-Key 兩塊配板聯(lián)合使用時,對應的驅動初始化函數原型(am_miniport_view_key.h)為:

  • p_dev 為指向am_miniport_view_key_dev_t 類型實例的指針;

  • p_info 為指向am_miniport_view_key_info_t 類型實例信息的指針。

1. 實例

am_miniport_view_key_dev_t 類型(am_miniport_view_key.h)實例的定義如下:

其中,miniport_view_key 為用戶自定義的實例,其地址作為p_dev 的實參傳遞。

2. 實例信息

描述與數碼管、矩陣鍵盤相關的實例信息的類型am_miniport_view_key_info_t 的定義(am_miniport_view_key.h)如下:

其中,scan_info 是am_digitron_scan_gpio_info_t 類型的數碼管實例信息(GPIO 輸出段碼),其對應的定義僅與數碼管相關信息有關,詳見程序清單7.49,可以不作任何改動。

key_info 是am_key_matrix_base_info_t 類型的矩陣鍵盤的基礎信息,在矩陣鍵盤的實例信息中有定義,詳見程序清單7.35。

在前面矩陣鍵盤實例信息的定義中,除am_key_matrix_base_info_t 類型的基礎信息外,還包含p_pins_row 指定的行線引腳信息和p_pins_col 指定的列線引腳信息,但當數碼管和矩陣鍵盤同時使用時,由于矩陣鍵盤的列線引腳與數碼管的位選引腳是相同的,因此,無需再額外指定矩陣鍵盤的列線引腳,僅需使用p_pins_row 指定行線引腳即可,結合前面定義的數碼管實例信息和矩陣鍵盤信息,可以定義MiniPort-View+MiniPort-Key 設備對應的實例信息如下:

基于實例、實例信息,即可完成數碼管實例的初始化:

它將同時完成數碼管和按鍵的初始化,當完成初始化后,可使用通用數碼管接口和通用按鍵接口操作數碼管和按鍵?;谀K化編程思想,將初始化相關的實例和實例信息等的定義存放到數碼管的配置文件中,詳見程序清單7.55 和程序清單7.56。

程序清單7.55 數碼管、按鍵聯(lián)合使用實例初始化函數實現(xiàn)(am_hwconf_miniport_view_key.c)

程序清單7.56 數碼管、按鍵聯(lián)合使用實例初始化函數聲明(am_hwconf_miniport_view_key.h)

后續(xù)只需使用無參數的實例初始化函數,即可執(zhí)行以下語句完成MiniPort-View +MiniPort-Key 實例的初始化:

當完成初始化后,可使用通用數碼管接口和通用按鍵接口操作數碼管和按鍵。

>>> 7.7.2 數碼管、鍵盤與HC595 驅動

當MiniPort-View、MiniPort-Key 和MiniPort-595 三塊配板聯(lián)合使用時,對應的驅動初始化函數原型(am_miniport_view_key_595.h)為:

  • p_dev 為指向am_miniport_view_key_595_dev_t 類型實例的指針;

  • p_info 為指向am_miniport_view_key_595_info_t 類型實例信息的指針。

1. 實例

am_miniport_view_key_595_dev_t 類型(am_miniport_view_key_595.h)實例定義如下:

其中,miniport_view_key_595 為用戶自定義的實例,其地址作為p_dev 的實參傳遞。

2. 實例信息

描述與數碼管和矩陣鍵盤相關的實例信息的類型am_miniport_view_key_595_info_t 的定義(am_miniport_view_key_595.h)如下:

唯一的不同,僅僅是數碼管信息scan_info 成員的類型由am_digitron_scan_gpio_info_t變?yōu)榱薬m_digitron_scan_hc595_gpio_info_t,其余的信息保存不變。因為它們硬件上的區(qū)別僅僅是一個使用GPIO 輸出段碼,一個使用595 輸出段碼,因此實例信息也僅僅是數碼管信息存在一點差異。

結合前面定義的數碼管和矩陣鍵盤實例信息,定義MiniPort-View + MiniPort-Key +MiniPort-595 設備對應的實例信息如下:

3. HC595 句柄handle

若使用Miniport-595 輸出碼段,則應通過MiniPort-595 的實例初始化函數獲得HC595的句柄。即:

HC595 句柄即可直接作為handle 的實參傳遞。

基于實例、實例信息和HC595 句柄,即可完成MiniPort-View + MiniPort-Key +MiniPort-595 設備實例的初始化。比如:

當完成初始化后,即可使用通用數碼管和按鍵接口操作數碼管和按鍵。基于模塊化編程思想,將初始化相關的實例和實例信息等的定義存放到數碼管的配置文件中,將相關內容新增到am_hwconf_miniport_view_key.c 文件中。與此同時,將實例初始化函數的聲明新增到am_hwconf_miniport_view_key.h 文件中,詳見程序清單7.57 和程序清單7.58。

程序清單7.57 實例初始化函數實現(xiàn)(am_hwconf_miniport_view_key.c)

程序清單7.58 am_hwconf_miniport_view_key.h 文件更新

后續(xù)只需使用無參數的實例初始化函數,即可執(zhí)行以下語句完成MiniPort-View +MiniPort-Key + MiniPort-595 設備實例的初始化:

當完成初始化后,即可使用通用數碼管和按鍵接口操作數碼管和按鍵。

通過Miniport 系列配板在各種組合方式下的驅動介紹可知,MiniPort 系列配板可以非常靈活地搭配使用。對于用戶來說,對于不同的搭配方式,只需要使用對應的實例初始化函數即可,無需關心底層細節(jié),使用數碼管和按鍵通用接口編程的應用程序可以始終保持不變。為了便于查詢,表7.9 列出了MiniPort-View、MiniPort-Key 和MiniPort-595 配板在各種組合方式下應該使用的實例初始化函數。

表7.9 各種組合方式下應該使用的實例初始化函數

表7.9 中展示了共計5 種使用方式,每種方式對應一行,若配板相應的單元格內容為“●”,則表示在該種方式下會使用該配板,若僅選擇了一個配板,則表示該方式僅單獨使用該配板。

7.8 ZLG72128——數碼管與鍵盤管理

>>> 7.8.1 ZLG72128 簡介

當矩陣鍵盤和數碼管擴大到一定數目時,將非常占用系統(tǒng)的I/O 資源,同時還需要配套軟件執(zhí)行按鍵的和數碼管掃描,對CPU 資源的耗費也不可忽視。在實際應用中,可能不會用到全部的32 個按鍵或12 個數碼管,可以根據實際情況裁剪。ZLG 設計了相應的MiniPort-ZLG72128 配板,可以直接與AM824-Core 連接使用,作為示例MiniPort-ZLG72128配板僅使用了2 個數碼管和4 個按鍵(2 行2 列),當將MiniProt-ZLG72128 與AM824-Core連接時,其等效電路詳見圖7.2。

圖7.2 MiniPort-ZLG72128 電路圖

數碼管僅使用了兩個,按鍵使用了第0 行和第3 行(功能按鍵),每行兩列共計4 個按鍵,ZLG72128 與LPC824 的引腳連接詳見表7.10。

表7.10 ZLG72128 與LPC824 的引腳連接

>>> 7.8.2 ZLG72128 驅動

使用ZLG72128 時,雖然底層的驅動方式(I2C總線接口)與之前使用GPIO 驅動按鍵和數碼管的方式是完全不同的,但由于AMetal 已經提供了ZLG72128 的驅動,對于用戶來講,可以忽略底層的差異性,直接使用通用鍵盤接口和通用數碼管接口編寫應用程序。

ZLG 設計了相應的MiniPort-ZLG72128 配板,可以直接與AM824-Core 連接使用,在使用通用接口使用數碼管和按鍵前,需要使用初始化函數完成設備實例的初始化操作。其函數(am_zlg72128_std.h)的原型為:

該函數用于將ZLG72128 初始化為標準的數碼管和按鍵功能,初始化完成后,即可使用通用的按鍵和數碼管接口操作數碼管和按鍵。p_dev 為指向am_zlg72128_std_dev_t 類型實例的指針,p_info 為指向am_zlg72128_std_devinfo_t 類型實例信息的指針,i2c_handle 為與ZLG72128 通信的I2C實例句柄。

(1)實例

定義am_zlg72128_std_dev_t 類型(am_zlg72128_std.h)實例如下:

其中,g_miniport_zlg72128 為用戶自定義的實例,其地址作為p_dev 的實參傳遞。

(2)實例信息

實例信息主要描述了與ZLG72128、鍵盤和數碼管等相關的信息,如按鍵對應的按鍵編碼、數碼管顯示器的ID 等信息。其類型am_zlg72128_std_devinfo_t(am_zlg72128_std.h)的定義如下:

base_info 是ZLG72128 的基礎信息,其類型(am_zlg72128.h)的定義如下:

其主要指定了與ZLG72128 相關聯(lián)的引腳信息,其中,rst_pin 為復位引腳,若復位引腳未使用(固定為RC 上電復位電路,無需主控參與控制),則該值可設置為-1。use_int_pin表示是否使用ZLG72128 的中斷輸出引腳(KEY_INT),若該值為AM_TRUE,表明使用了中斷引腳,此時int_pin 指定與主控制器(如LPC824)連接的引腳號,按鍵的鍵值將在引腳中斷中獲??;若該值為AM_FALSE,表明不使用中斷引腳,此時interval_ms 指定查詢鍵值的時間間隔,使用查詢方式時,可以節(jié)省一個管腳資源,但也會額外耗費一定的CPU 資源。當使用AM824-Core 與MiniPort-ZLG72128 連接時,其相應的引腳連接詳見表7.10,基于此,各成員可以分別賦值為:PIO0_6,AM_TRUE、PIO0_1、0。id_info 是僅包含顯示器ID 號的標準數碼管設備的信息,其類型定義(am_digitron_dev.h)如下:

在前面的驅動配置中,將MiniPort-View 對應的ID 號設置為0,在這里,如果MiniPort-ZLG72128 不會與MiniPort-View 同時使用,可以將ID 也設置為0,如此一來,使用MiniPort-ZLG72128 可以直接替換MiniPort-View 配板作為新的顯示器,但應用程序無需作任何改變,同樣可以繼續(xù)使用ID 為0 的顯示器。blink_on_time 和blink_off_time 分別指定了數碼管閃爍時,數碼管點亮的時間和熄滅的時間,以此可以達到調節(jié)閃爍效果的作用。通常情況下,數碼管以1Hz 頻率閃爍,點亮和熄滅的時間分別設置為500ms。

key_use_row_flags 標志指定使用了哪些行,ZLG72128 最多可以支持4 行按鍵,分別對應COM8~COM11。該值由表7.11 所示的宏值組成,使用多行時應將多個宏值相“或”。對于MiniPort-ZLG72128,其使用了第0 行和第3 行,因此key_use_row_flags 的值為:

AM_ZLG72128_STD_KEY_ROW_0| AM_ZLG72128_STD_KEY_ROW_3

表7.11 行使用宏標志

key_use_col_flags 標志指定使用了哪些列,ZLG72128 最多可以支持8 列按鍵,分別對應COM0 ~ COM7。該值由表7.12 所示的宏值組成,使用多列時應將多個宏值相“或”。對于MiniPort-ZLG72128,其使用了第0 列和第1 列,因此key_use_col_flags 的值為:

AM_ZLG72128_STD_KEY_COL_0 | AM_ZLG72128_STD_KEY_COL_1

表7.12 列使用宏標志

p_key_codes 指向存放矩陣鍵盤各按鍵對應編碼的數組,其編碼數目與實際使用的按鍵數目一致,MiniPort-ZLG72128 共計2×2 個按鍵。

在配置MiniPort-key 時,將MiniPort-key 對應的按鍵編碼設置為KEY0 ~ KEY3。如果MiniPort-ZLG72128 與MiniPort-Key不同時使用,則將MiniPort-ZLG72128 對應的按鍵編碼也設置為KEY0~KEY3,使用MiniPort-ZLG72128 替換MiniPort-Key 配板,但應用程序無需作任何改變。num_digitron 指定了數碼管的個數,MiniPort-ZLG72128 僅使用了2 個數碼管,因此num_digitron 的值為2?;谝陨闲畔ⅲ瑢嵗畔⒖梢远x如下:

(3)I2C句柄i2c_handle

若使用LPC824 的I2C1 與ZLG72128 通信,則I2C句柄可以通過LPC82x 的I2C1 實例初始化函數am_lpc82x_i2c1_inst_init()獲得。即:

獲得的I2C句柄即可直接作為i2c_handle 的實參傳遞。

基于實例、實例信息和I2C句柄,可以完成MiniPort-ZLG72128 的初始化。比如:

當完成初始化后,即可使用通用的數碼管接口和通用的按鍵處理接口。由于標準按鍵處理接口中,并沒有將按鍵按照普通按鍵和功能按鍵進行區(qū)分,因此ZLG72128 對應的第3 行功能按鍵也會當作一般按鍵處理,其按鍵按下和釋放均會觸發(fā)執(zhí)行相應的按鍵處理函數。此外,由于ZLG72128 不會上報普通按鍵的釋放事件,因此當普通按鍵釋放時,不會觸發(fā)相應的按鍵處理函數。為了便于配置矩陣鍵盤(修改實例信息)。基于模塊化編程思想,將初始化相關的實例、實例信息等的定義存放到相應的配置文件中,通過頭文件引出實例初始化函數接口,源文件和頭文件的程序范例分別詳見程序清單7.59 和程序清單7.60。

程序清單7.59 獨立鍵盤實例初始化函數實現(xiàn)(am_hwconf_miniport_zlg72128.c)

程序清單7.60 獨立鍵盤實例初始化函數聲明(am_hwconf_miniport_zlg72128.h)

后續(xù)只需要使用無參數的實例初始化函數即可完成MiniPort-ZLG72128 實例的初始化,即執(zhí)行如下語句:

由于在配置信息中,將按鍵編碼和數碼管ID 號設置與MiniPort-Key 和Miport-View 一樣,因此可以直接使用MiniPort-ZLG72128 替換MiniPort-Key 和MiniPort-View,應用程序無需作任何修改。比如,可以使用之前編寫的按鍵應用程序和數碼管應用程序測試按鍵和數碼管,詳見程序清單7.61。

程序清單7.61 運行按鍵和數碼管應用程序的主程序

由此可見,應用程序無需作任何修改。

7.9 溫控器

此前,使用自定義的數碼管、LED、溫度等接口實現(xiàn)了一個簡易的溫控器,現(xiàn)在將對其進行升級,全部使用通用接口實現(xiàn)。修改較為容易,基本邏輯保持不變,僅僅將其中的非通用接口修改為使用通用接口實現(xiàn),詳見程序清單7.62。

程序清單7.62 使用通用接口實現(xiàn)溫控器代碼

由于使用通用接口時,數碼管、按鍵均會自動掃描,無需每隔一定的時間定時掃描一次,因此主程序中沒有再執(zhí)行數碼管和按鍵掃描的語句。

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

    關注

    32

    文章

    1872

    瀏覽量

    90729
  • 溫控器
    +關注

    關注

    10

    文章

    247

    瀏覽量

    34226
  • 矩陣鍵盤
    +關注

    關注

    7

    文章

    205

    瀏覽量

    31384
  • i/o驅動
    +關注

    關注

    0

    文章

    1

    瀏覽量

    561

原文標題:周立功:面向通用接口的編程——數碼管與矩陣鍵盤聯(lián)合使用、(ZLG72128)數碼管與鍵盤管理、溫控器

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數碼管矩陣鍵盤聯(lián)合應用設計

    AMetal 提供了數碼管矩陣鍵盤聯(lián)合使用的驅動,其本質上就是數碼管驅動和矩陣
    的頭像 發(fā)表于 01-19 09:31 ?7816次閱讀
    <b class='flag-5'>數碼管</b>與<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b><b class='flag-5'>聯(lián)合</b>應用設計

    應用數碼管矩陣鍵盤、蜂鳴器、流水燈的程序

    課題學習的模塊:數碼管、矩陣鍵盤、蜂鳴器、流水燈鍵盤按鍵數值排布如下:789456123 0引腳定義:LEDP1數碼管P0
    發(fā)表于 08-14 21:34

    數碼管顯示4×4鍵盤矩陣按鍵

    數碼管顯示4×4鍵盤矩陣按鍵
    發(fā)表于 12-22 16:49

    數碼管顯示鍵盤矩陣按鍵

    51單片機 at89c52 數碼管顯示鍵盤矩陣按鍵
    發(fā)表于 10-13 07:27

    基于FPGA的數碼管顯示矩陣鍵盤鍵值

    `如圖所示,杜邦線連接外擴矩陣鍵盤。下載后為什么稍微晃動杜邦線,數碼管的數字就會變化很厲害。按下按鍵后數字也在抖動。`
    發(fā)表于 06-19 16:05

    矩陣按鍵數碼管移位顯示

    /******************************************************************************** 實 驗 名: 動態(tài)顯示數碼管實驗* 使用的IO : 數碼管使用P0,P2.2,P2.3,P2.4
    發(fā)表于 12-01 08:17

    矩陣鍵盤數碼管功能簡析

    模塊 :矩陣鍵盤數碼管功能 :當按下鍵盤的每鍵一個時,數碼管顯示不同的值。#include //包含51頭文件#include //包含移位
    發(fā)表于 01-11 07:44

    數碼管顯示矩陣鍵盤掃描程序

    數碼管顯示矩陣鍵盤掃描程序 ?/*矩陣鍵盤掃描出鍵值,在數碼管上顯示出來?????? P0口接
    發(fā)表于 01-11 19:14 ?2246次閱讀

    數碼管顯示矩陣鍵盤掃描值

    數碼管顯示矩陣鍵盤掃描值 ?/*矩陣鍵盤掃描出鍵值,在數碼管上顯示出來?????? P0口接
    發(fā)表于 01-14 21:01 ?2706次閱讀

    基于單片機的數碼管矩陣鍵盤顯示【C語言版】

    基于單片機的數碼管矩陣鍵盤顯示【C語言版】
    發(fā)表于 12-29 18:19 ?0次下載

    單片機的鍵盤及LED數碼管顯示接口

    本文主要介紹了單片機的應用--矩陣鍵盤和LED數碼管顯示接口。
    發(fā)表于 03-25 11:38 ?7次下載

    基于8051的Proteus仿真-數碼管顯示4×4鍵盤矩陣按鍵

    基于8051的Proteus仿真-數碼管顯示4×4鍵盤矩陣按鍵
    發(fā)表于 09-01 23:36 ?93次下載

    使用51單片機和8255芯片驅動矩陣鍵盤控制數碼管切換顯示的程序

    本文檔的主要內容詳細介紹的是使用51單片機和8255芯片驅動矩陣鍵盤控制數碼管切換顯示的程序免費下載。
    發(fā)表于 09-06 17:26 ?22次下載
    使用51單片機和8255芯片驅動<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>控制<b class='flag-5'>數碼管</b>切換顯示的程序

    數碼管顯示4X4鍵盤矩陣按鍵的仿真原理圖免費下載

    本文檔的主要內容詳細介紹的是數碼管顯示4X4鍵盤矩陣按鍵的仿真原理圖免費下載。
    發(fā)表于 12-31 10:04 ?45次下載
    <b class='flag-5'>數碼管</b>顯示4X4<b class='flag-5'>鍵盤</b><b class='flag-5'>矩陣</b>按鍵的仿真原理圖免費下載

    單片機中級項目13丨矩陣按鍵數碼管移位顯示

    /******************************************************************************** 實 驗 名 : 動態(tài)顯示數碼管實驗* 使用的IO : 數碼管使用P0,P2.2,P2.3,P2
    發(fā)表于 11-23 16:51 ?13次下載
    單片機中級項目13丨<b class='flag-5'>矩陣</b>按鍵<b class='flag-5'>數碼管</b>移位顯示