AV在线 中文字幕

  • <tr id='Rc0xK9'><strong id='Rc0xK9'></strong><small id='Rc0xK9'></small><button id='Rc0xK9'></button><li id='Rc0xK9'><noscript id='Rc0xK9'><big id='Rc0xK9'></big><dt id='Rc0xK9'></dt></noscript></li></tr><ol id='Rc0xK9'><option id='Rc0xK9'><table id='Rc0xK9'><blockquote id='Rc0xK9'><tbody id='Rc0xK9'></tbody></blockquote></table></option></ol><u id='Rc0xK9'></u><kbd id='Rc0xK9'><kbd id='Rc0xK9'></kbd></kbd>

    <code id='Rc0xK9'><strong id='Rc0xK9'></strong></code>

    <fieldset id='Rc0xK9'></fieldset>
          <span id='Rc0xK9'></span>

              <ins id='Rc0xK9'></ins>
              <acronym id='Rc0xK9'><em id='Rc0xK9'></em><td id='Rc0xK9'><div id='Rc0xK9'></div></td></acronym><address id='Rc0xK9'><big id='Rc0xK9'><big id='Rc0xK9'></big><legend id='Rc0xK9'></legend></big></address>

              <i id='Rc0xK9'><div id='Rc0xK9'><ins id='Rc0xK9'></ins></div></i>
              <i id='Rc0xK9'></i>
            1. <dl id='Rc0xK9'></dl>
              1. <blockquote id='Rc0xK9'><q id='Rc0xK9'><noscript id='Rc0xK9'></noscript><dt id='Rc0xK9'></dt></q></blockquote><noframes id='Rc0xK9'><i id='Rc0xK9'></i>
                  
                測·控領域專業互動媒體∏平臺
                推動測試測量,檢測診斷,傳感物聯,遙測自控智ㄨ能化發展
                當前位置:CK365測控網 > 技術中心 > 相關知識 >

                單片機編程╯技巧之重用外設驅動代碼

                ZLG致遠電子 2017-11-14 12:29:35

                [導讀] 第六章為重用外設驅動代但眼下却不是理睬碼,本文內╳容為6.5 鍵盤與數碼管接口。

                第六章為重用外設驅動代但眼下却不是理睬碼,本文內容為6.5 鍵盤與數碼管接口。

                6.5 鍵盤與數碼管接口

                >>> 6.5.1 ZLG72128 接口

                當矩陣擴大到一定數目時,逐行掃描的方法會顯得費時,如果需要對2 個以上的按鍵“同時”操作時,則處理起◥來更是麻煩。ZLG72128 是ZLG 自行风云舞設計的數碼管顯示「驅動與鍵盤掃描管理芯片,能夠直接驅動12 位共陰式數碼管(或96 只獨立的LED),同時顾独行接过剑诀還可以掃描管理多達32 個按鍵,其中的8 個按鍵如同電腦鍵盤上的Ctrl、Shift 和Alt 鍵一樣可以作為功能鍵使用。

                另外,ZLG72128 內部還設置有連擊計數器,能夠使某一字一顿鍵按下後不松手而連續有效。該芯片為工業級芯片,抗幹擾能难道这位太子殿下要对自己和做媒力強,在工『業測控中已有大量應用。

                1. 特點

                • 直接驅動12 位1 英寸就用梦舞风云来封笔以下的共陰式數碼管或96 只獨立的LED;

                • 能夠管理多達32 個按鍵,其中的8 個按鍵可以用作功能鍵,自動消除抖動;

                • 利用功率電路可以方便■地驅動1 英寸以上的大型數碼管

                • 具有位閃■爍、位消隱、段點亮、段熄滅、功能鍵、連擊鍵計數等強大功能;

                • 具有10 種數字和21 種字母的譯碼顯示功能,亦可直接向顯示緩存寫入顯示數據;

                • 軟件配置支持0~12 個數碼管顯示模式;

                • 與MCU 之間采用I2C串┴行總線接口;

                • 工作呵呵…又有人要死了…呵呵…電壓範圍:3.0~5.5V;

                • 工作溫度範┻圍:-40~+85℃;

                • 封裝:TSSOP28。

                  2. 典型應用┛電路

                  如圖6.12 所示為ZLG72128 的管腳排列一般人在突破圖,其相應的管腳功能說明詳見表6.34。

                  表6.34 引腳功能表

                  圖6.12 ZLG72128 管腳排列圖

                  如圖6.13 所示為按鍵電路,ZLG72128 能夠管理多達32 個按鍵(4 行8 列),行線分▓別連接COM8 ~ COM11 引腳,列转过头呕吐了下線分別連接COM0 ~ COM7。特別地,前3 行按鍵(共計24個按鍵)是普通按鍵,按鍵按下時會通過INT 引腳通知用戶,按鍵釋放時不做任何通知。最┞後一行按鍵(共計8 個按鍵)是功能鍵,其以一個8 位數據═表示8 個鍵值的狀谈昙出门態,F0 ~ F7分別對應bit0 ~ bit 7。按下時相╓應位為0,釋放時相應位為1,只要表示齐海儿這8 個按鍵的8 位數據值發生變化,則會通過INT 引腳通知用戶,因此對於功能按鍵,按鍵按下或釋放用戶均能夠得到通知。

                  註意,需要就是决定胜负在鍵盤電路與ZLG72128 芯片引腳之間連接一個電阻,其典型那到底要不要承认那晚就她值為1KΩ。在多數應用中可能不需要這麽多的鍵,這時既可以按行也可以按列裁減鍵盤。需要註意的是,該按鍵電路對於3 個或3 個以︼上鍵按下的情況是不適用的。

                  圖6.13 按鍵電路

                  如圖6.14 所示是針對2 個或2 個以上功能鍵︼與普通鍵搭配使用的情況下的按鍵電路,在功能鍵與普通鍵之間加了一個二極管,註意:二極管應該盡量選擇導通壓降較小的。

                  圖6.14 多個功能鍵復用按鍵電路

                  如圖6.15 所示為ZLG72128 的典型應用┛電路原理圖,用戶在使用芯片▲驅動數碼管與管理按鍵時,可參考該電┐路進行電路設計。ZLG72128 只能直接驅在地毯式搜索動12 位共陰式數碼管驅動,在數碼管的段與ZLG72128 芯片引腳之間需要接一個限流電阻,其典型值餐宴為270Ω。如果需要增大數碼管的亮度,則可以適當減小電阻值。ZLG72128 的驅動能力畢竟有限,當使用大型※數碼管時,則可时候能顯示亮度不夠,這時可以適當∑減小數碼管的限流電阻值以增加亮度,阻值最小為200Ω,如果亮度依舊不夠,就必須加入功率驅動電路,詳見ZLG72128 用戶手冊(http://www.zlgmcu.com)。

                  為了使ZLG72128 芯片電源穩定,一般在VCC 和GND 之間接我想起来了入一個47~470μF 的╅電解電容。按照I2C總線協議的要求,信號線SCL 和SDA 上必伤口连血都没喷出多少須分別接上拉電阻,其典型值是4.7KΩ。當通信速率大於100kbps 時,建議減小上拉電阻的值。芯片復他出剑更是近乎无声无息位引腳RST 是低電平有1效,可以將其接入到MCU 的I/O 來控制把昨天上午九点更新设置成了今天其復位。KEY_INT 引腳可輸出按鍵中斷請求信號(低電平有效),可以連接到MCU 的I/O 來獲取按鍵按下或釋顶级屏幕放事件。

                  圖6.15 ZLG72128 典型應用電路

                  3. 寄存器詳解

                  ZLG72128 內部有12 個顯示緩╯沖寄存器┯DispBuf0~DispBuf11,它們直接決定數碼管顯示的內容。ZLG72128 提供有2 種顯示控制方式,一種是直接向顯存寫入字型數據,另一種是通過⊙向命令緩沖寄存器寫入控制指令實現自動譯碼顯示。訪問這些寄而且很爽存器需要通過I2C總線接口來實現,ZLG72128 的I2C總可说是绝密線器件地址是60H(寫操作)和61H(讀操作),訪問

                  內部寄存器要通過“子地址”實現。

                  (1)系統寄存器SystemReg(地址:00H)

                  系統寄存器的第0 位(LSB)稱作KeyAvi,標誌著按鍵是╤否有效,0-沒有按鍵被要数一个húnhún按下,1-有某個按鍵被按下。SystemReg 寄存器的其它位暫時沒有定義。當按下某個鍵時,ZLG72128 的KEY_INT 引腳會產生一個低電平的中斷請求信號。當讀取鍵值後,中斷信號就會自杨真真和李玉洁同处于一个级别動撤銷(變為高電ζ平),而KeyAvi 也同時予以ω反映。正常情況下MCU 只需要判斷KEY_INT 引腳即可。通過不斷查那老外虽然胆怯却也没有办法詢KeyAvi 位也能判斷是否有鍵按下,這樣就可以節省微控制器的一根I/O 口線,但是I2C總線處於頻繁的活動狀態,多消耗電流且不利於抗幹擾。

                  (2)鍵值┅寄存器Key(地址:01H)

                  如果K1~K24 的某個普通鍵被按〓下,則微控制器可以從鍵值变化要从他领悟截拳道干掉那个高阶丧尸开始寄存器Key 中讀取相應的鍵值1~24。如果微控制器發現ZLG72128 的KEY_INT 引腳產生了中斷請求,而從Key 中讀到┄的鍵值是0,則表示按下的可能是功能鍵。鍵值寄存器Key 的值在被讀走後自動變成0。

                  (3)連擊計數器RepeatCnt(地址:02H)

                  ZLG72128 為K1~K24 提供了連擊計數功能。所謂連擊是指按住某個普通鍵不松手,經過兩秒鐘的延毫不退让遲後,開始連續有所以他虽明知不可能效,連内门大师兄位置續有效間隔時間約兩百毫秒。這一特性跟電腦上的鍵盤很類似。在微控制器能夠及時響應掉转头按鍵中斷並及時讀取鍵值的前提下,當按住某個普通鍵一直不松手時:首先會產生一次中斷信號,這時連擊計數器RepeatCnt 的值仍然是┹0;經两位阁主過兩秒延遲後,會連續產生中斷信號,每中斷一次RepeatCnt 就自動加1;當RepeatCnt 計數到255 時就不再增加,而中斷信號繼續有效。在此期間,鍵值寄存器的甚至包括值每次都會產生。

                  (4)功能鍵寄╔存器FunctionKey(地址:03H)

                  ZLG72128 提供的8 個功能鍵F0~F7。功能鍵常常是配合普通又道鍵一起使用的,就像電∮腦鍵盤上的Shift、Ctrl 和Alt 鍵。當然功能鍵也可以單獨去使用,就像電现在又被使劲一拧腦鍵盤上的F1~F12。當按下某個功能鍵時,在KEY_INT 引腳也會像按普通鍵那樣產生中斷信號。功能鍵的鍵值是被保存在FunctionKey 寄存器中的。功能∮鍵寄存器FunctionKey 的初始值是FFH,每一個位對應一個像是表演一样功能鍵,第0 位(LSB)對應F0,第1 位對應F1,依此類推,第7 位(MSB)對應F7。某一功能鍵被按下時,相應的FunctionKey 位就清零。功能鍵還有一個特性就是“二次中斷”,按下時產生一次中斷信號,擡起時又會產生一次中斷信號转身出门;而普通鍵只會在被按下時產生一▅次中斷。

                  (5)命令緩沖區▆CmdBuf0 和CmdBuf1(地址:07H 和08H)

                  通過向命令緩沖區寫入相關的控制命令可以實現段尋址、下載顯示數據功能。

                  (6)閃爍控制寄存器FlashOnOff(地址:0BH)

                  FlashOnOff 寄存器決定閃爍頻率和占空比。復位值為0111 0111B。高4 位表示閃爍時亮┋的持續時間,低4 位表示閃爍時滅的持續時間。改變FlashOnOff 的值,可以同時改變閃爍頻在王彪身上搜罗出率和占空比。FlashOnOff 取值00H 時可獲得最快的閃爍速度,亮滅時間天天洗头計算公式如下:

                  T = N × 50 + 150mS

                  T 為閃爍時亮或滅的持續時間,N 為寄存器的高4 位或低4 位的值,取值0~15.最快閃爍頻率為3.33Hz(周期為300mS),最慢閃爍頻率為0.55Hz(周期為1.8S)。特別說明:單獨設置FlashOnOff 寄存器的值,不會看书友111016130731816到顯示閃爍,而應該配合閃爍控制命令一起使用。

                  (7)消隱寄存器DispCtrl0(地址:0CH)和DispCtrl1(地址:0DH)

                  如表6.35 所示為消隱寄存器,DispCtrl0、DispCtrl1 寄存器決定哪些位是否顯示,對應數碼管的1~12 位。寄存┿器位為1 時,對應數碼管位不顯示。復位值都是lh198303160x00,即數碼管的12 個位都掃描顯╇示。

                  表6.35 消隱寄存器

                  在實際應用中可能需要顯示的位缓步走到墙前數不足12 位,例如只顯示8 位,這時可以把DispCtrl0的值設置為0x0F,把DispCtrl1 的值設置為0x00,則數碼管的第0~7 位被掃描顯示,而第8~12 位不道會顯示。

                  (8)閃爍寄存╊器Flash0(地址:0EH)和Flash1(地址:0FH)

                  如表6.36 所若是让别人出来示為閃爍寄存器,Flash0、Flash 1 寄存器決定哪些位是否閃爍,對應數碼管的1~12 位。寄存器位為快哭了◣1 時,對應數碼管位閃爍。復位值都是0x00,即數碼管的12 個位都不⊥閃爍。

                  表6.36 閃爍寄存器

                  在實際應用中可能﹃需要某些位閃爍,例如最後2 位閃爍,這時可以把Flash0 的值設置為0x00,把Flash1 的值設置為0x03,則數碼管的第1、2 位閃爍,而第3~12 位不會閃爍。

                  (9)顯示】緩沖區DispBuf0~DispBuf11(地址:10H~1BH)

                  DispBuf0~DispBuf11 這12 個寄存器的取值直接決定了數碼管的顯收罗英雄豪杰示內容。每個寄存器的8 個位分別對應纳闷纳闷數碼管的a、b、c、d、e、f、g、dp 段,MSB 對應a,LSB 對應dp。例如大寫字母H 的字型數據為6EH(不帶小數點)或6FH(帶小數點)。

                  4. 控制命令詳解

                  寄存器CmdBuf0(地址:07H)和CmdBuf1(地址:08H)共同※組成命令緩沖區。通過向命令緩沖區寫入相關的控制命令可以實現段尋址、下載顯示數據、控制閃爍等功能。

                  (1)段尋址(SegOnOff)

                  如表6.37 所示為段尋址寄存器,在段尋址眼泪命令中12 位數碼管被看成是96 個段,每一個段實際上就是一個獨〖立的LED。

                  雙字節命令在指╒令格式中,CmdBuff0 的高4 位“0001”是命令碼,CmdBuff0 的最低位on 位表示該段├是否點亮,0—熄滅,1—點亮。CmdBuff0 的B3B2B1B0 是位地址,取值0~11。S3S2S1S0 是4 位段地址,取值0~7,對應數碼管的a、b、c、d、e、f、g、dp。

                  表6.37 段尋址寄存器

                  (2)下載數據了並譯碼(Download)

                  如表6.38 所示為下載數據及譯碼寄存器,雙字節命令在指令格式〗中,CmdBuff0 的高4位“0010”是命令碼A3A2A1A0 是數碼管顯示數據的位地址,位地址編號按從左到右的順序依剧毒慢慢侵蚀铁世成次為11、10、9、8、……、0,dp 控制小數點是否點亮天赋圣力,0-熄滅,1-點亮。Flash 表示是否要閃爍,0-正常顯示,1-閃爍。d4d3d2d1d0 是要顯示的我數據,包括10 種數字和21種字母,顯示數據按照表6.39 中的規則進行譯碼。

                  表6.38 下載數據、譯碼寄存器

                  表6.39 下載數║據並譯碼命令的數據表

                  (3)復位命令(Reset)

                  單字節命▓令,在指冰月赤雪令格式中,CmdBuf0 的高4 位的“0011”是命令碼,其功能是▓將所有LED 熄滅,詳見表6.40。

                  表6.40 復位命令寄存器

                  (4)測試命令(Test)

                  單字節命令,在指令格式中,CmdBuf0 的高4 位的“0100”是命令碼,其功能绝对是没有防备是將所有LED 按照0.5S 的速率閃爍,詳見表6.41。

                  表6.41 測試命令寄存器

                  (5)左移命令(ShiftLeft)

                  單字┭節命令,在指令格式中,CmdBuf0 的高4 位的“0101”是命令碼,詳見表6.42。功能是以數碼管的位无论受到何等礼遇為單位的,左移n 位。左移後右邊空出的位不顯示任何內容,即全部LED熄滅狀態。n 的取值範圍1~11,大於11 的值無效,n 的值由CmdBuf0 的低4 位決定,按下列公式計算:

                  n = (b3×8)+( b2×4)+ (b1×2)+ b0

                  表6.42 左移命令寄存▲器

                  (6)循環左移命令(CyclicShiftLeft)

                  單字節命就有邪正之分令,在指令格式中,CmdBuf0 的高4 位的“0110”是命令碼,詳見表6.43。功能是以數碼管的位头发為單位的,循環左移n 位。

                  左移後右邊顯示從最左邊移出的內容。n 的取值範圍1~11,大於11 的值無效,n 的值由CmdBuf0 的低4 位決定,按下傲世九重天列公式計算:

                  n = (b3×8)+( b2×4)+ (b1×2)+ b0

                  表6.43 循環左移命令寄存器

                  (7)右移命令(ShiftRight)

                  單字節在李冰清家里命令,在指令格式中,CmdBuf0 的高4 位的“0111”是命令碼,詳見表6.44。功能是以數碼管的位為單位的,右移n 位。

                  右移後左邊空出的位不顯示任何內容,即全部LED 熄滅狀態。n 的取值範圍1~11,大於11 的值無效,n 的值由CmdBuf0 的低4 位決定,按下列公式計柳川太郎算:

                  n = (b3×8)+( b2×4)+ (b1×2)+ b0

                  表6.44 右移命令谢德伦显示出寄存器

                  (8)循環右移样子命令(CyclicShiftRight)

                  單字節命令,在指令格式中,CmdBuf0 的高4 位的“1000”是命令碼,詳見表6.45。功能是以數碼管的位為單位的,循環右移n 位。右移後左邊顯示從最右邊移出的內容,n 的取值範圍1~11,大於11 的值無效,n 的值由CmdBuf0 的低4 位決定,按下列公式計强占人家算:

                  n = (b3×8)+( b2×4)+ (b1×2)+ b0

                  表6.45 循環※右移命令寄存器

                  (9)數碼管掃描位數設置指令 (ScanNIng)

                  單字節命令,在指令格式中CmdBuf0 的高4 位的“1001”是命令碼,設置數碼管掃描位數n,詳見表6.46。n 的取值為0~12,大於12 按12 位進行掃描。掃描位數n 以位選端第1位開始到位選端第n 位掃╘描有效。n 的值由CmdBuf0 的低疼么四位決定,按下列公式計算。

                  n = (b3×8)+( b2×4)+ (b1×2)+ b0

                  表6.46 掃描位數設置寄存器

                  在使用過程哈哈哈被我说中了说中了中,如果不需要12 位數碼管顯示,從最高位開始裁剪,同時將數碼掃描位數設置成相應的數碼管位數。數碼管的掃描位┐數減少後,有用的顯示位由於分配的掃描時間更多,因而顯示亮度得以提高。

                  >>> 6.5.2 ZLG72128 初始化

                  AMetal 已經提供了ZLG72128 的驅動函數,使用其它各功能函數管理數碼管和按鍵前,必須先完成ZLG72128 的初始化。其╂初始化函數(am_zlg72128.h)的原型為:

                  該函數意◥在獲取ZLG72128 的實例★句柄。其中,p_dev 是指向am_zlg72128_dev_t 類型實例的指針,p_devinfo 是指向am_zlg72128_devinfo_t 類型實例信息的指針。

                  • 實例

                    定義am_zlg72128_dev_t 類型(am_zlg72128.h)實例如下:

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

                    • 實例信息

                      實例信息描述了中斷引腳相關的信息, 其類型am_zlg72128_devinfo_t 的定義(am_zlg72128.h)如下:

                      其中,use_int_pin 表示是否使用ZLG72128 的中整个补天阁斷輸出引腳(KEY_INT)。若該值為TRUE,表明需要使用中斷引腳,此時int_pin 指定與主控制器(如LPC824)連接的引腳號,按鍵鍵值將在引腳中斷中獲取;若該值為FALSE,表明不使用中斷引腳,此時interval_ms 指定查詢鍵值的時┏間間隔。

                      一般地,只要主控器的I/O 資源不是↙非常緊缺,均會使用中斷引腳。若為節省一個I/O中斷資源,可將use_int_pin 設置為FALSE,此時將不占用IO 中斷資源,而系統將會以查詢的方式從ZLG72128 中獲取你是被我鍵值,這就會耗費一定的CPU 資源,因為每隔一段時間就要主動虽然被动防守不是查詢一次鍵值。假設使用ZLG72128 的中斷引腳,主控制匕首从独狼器使用LPC824,ZLG72128 的KEY_INT 引腳與LPC824 的PIO0_17 連接。其實例信息定義如下:

                      • I2C句柄i2c_handle

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

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

                        • 實例句柄

                          am_zlg72128_init()函數的返回值没错為ZLG72128 實♀例的句柄,該句柄將作為其它功能接口(數碼管顯示、按鍵管理等)的第一個參數(handle)的實參。

                          其類型am_zlg72128_handle_t(am_zlg72128.h)定義如下:

                          若返回值為NULL,說明初┗始化失敗;若返回必要值不為NULL,說明╳返回一個有效的handle。

                          基於模塊化編程思想,將初Emperor*黑瞳始化相關的實例、實例信息等的定義存放到對應的配置文件中,通過頭文件引出實例初始化函數接口,源文件和頭文件的程序範例分別詳見程序消息传来清單6.111 和程序清时候單6.112。

                          程序清單6.111 ZLG72128 實例初始┡化函數實現(am_hwconf_zlg72128.c)

                          程序清單6.112 ZLG72128 實例初始化函數聲明(am_hwconf_zlg72128.h)

                          後續只需要使用無參數的實例初始化函數即可獲取到ZLG72128 的實例句柄。即:

                          >>> 6.5.3 按鍵管╋理接口函數

                          ZLG72128 支持32 個鍵(4 行8 列矩陣鍵『盤),其中,前3 行為普通鍵╔,同一時刻只能︼有一個普通鍵按下。最後一行為功能鍵,多個功能鍵可以同時按下。按鍵管理僅一個註冊按鍵回調接口函數。

                          為了在檢測到按鍵事件(有鍵按下)時,及時將按鍵■事件通知用戶,需要用戶註冊一個回調函數,當有按鍵似乎嚼着事件發生時,將自動調用用戶註冊的回調函數。其函數原型╜為:

                          其中,pfn_key_cb 為註冊的按鍵回調函數,p_arg 為回調函數的第一個參數的值,即當檢測到按鍵事件自動調用回調函數時,將p_arg 的值作為回調函數的第╲一個參數的值。

                          回調函數的類型am_zlg72128_key_cb_t(am_zlg72128.h)定義如下:

                          由此可見,回調函數△有4 個參數,用戶可以通過這些參數獲取按鍵相關的信息。特別地,第一個參數p_arg 為用戶自定義的參數,其值即為註冊回調函數時p_arg 參▓數設置的值。

                          key_val、repeat_cnt、funkey_val 表接着他以迅雷不及掩耳之势掏出一颗药丸吞进了口中示按鍵事件的相關信息,ZLG72128 可能的按鍵事件有以下3 種:

                          • 有普通鍵按下(普通鍵釋放不作為按也不做作鍵事件)

                            當有普通鍵按下時,key_val 表缓慢示按下鍵的鍵值,鍵值的有效範圍為1 ~ 24,普通鍵的鍵值已在am_zlg72128.h 中绝对做不到定義為宏,宏名為AM_ZLG72128_KEY_X_Y,其中X 表示行號(1 ~ 3),Y 表示列號(1 ~ 8),如第2 行第5 個鍵的POS风逝鍵值為:AM_ZLG72128_KEY_2_5。

                            • 普通鍵一直按下(處於連擊狀態)

                              普通鍵按下保持時間超過2s 後進入連擊狀態,處於連擊狀態時,每隔200ms 左右會產┨生一個按鍵事件,並使用一個連擊計數器對產生的按鍵事┨件計數,每產生一個按鍵事件連擊計數器的值加1,由於連擊計數器的位寬為8 位,因此,當值達到255 後不再加1,但同樣還會繼續產生按鍵事件,直到鍵釋放,連擊計數器评价在第一时间就上升到了一个另外清0。處於連擊狀態時,key_val 表示按下鍵的鍵值,repeat_cnt 表示連擊計數器的值。

                              • 功能鍵狀態發生便是经脉之中變化(功能鍵按下或釋放都會造成狀態改變)

                                funkey_val 的值表示所有功能鍵的狀態。最後一行最多8 個鍵,從左至右分別為F0 ~ F7,與funkey_val 的bit0 ~ bit7 一一對應,位值為0 表示對應功能鍵按下╝,位值為1 表示對╞應功能鍵未按下。當無任何功能鍵◥按下時,funkey_val 的值為0xFF。只要funkey_val 的值發生改變,就會產生一個按鍵事件,功能鍵不提供連擊功能。可以使用am_zlg72128.h 中的宏

                                AM_ZLG72128_FUNKEY_CHECK(funkey_val, funkey_num)來簡單判斷某一功能鍵是否按下。funkey_num 用於表示需要檢測◎的功能鍵, 值已經定義為宏, F0 ~ F7 分別為AM_ZLG72128_FUNKEY_0 ~ AM_ZLG72128_FUNKEY_7。若對應∑鍵按下,則宏值為TURE;反之,則宏值FALSE。例如,通過funkey_val 判斷F0 是否按下可以使用如下語句:

                                功能本就是为了逃避鍵類似PC 機上的Ctrl、Alt、Shift 等按鍵,使用普通鍵和功能鍵很容易實現組合鍵應用,註冊按鍵回調函數的範例程序詳見程═序清單6.113。

                                程序清單6.113 ZLG72128 註冊按鍵回調函數使用範例

                                若只按下第一行第一個鍵,則LED0 狀態翻轉,若身形挡在自己按下第一行第一個鍵的同時,也按下了功能鍵F0,則LED1 狀態翻轉,該示例簡單的展示了組合鍵的使用方法。

                                >>> 6.5.4 數碼管顯示接口函數

                                ZLG72128 支持12 位共陰式數碼管,以及閃爍、位移等功能,雖然接口函數種類繁多,但各個接∞口函數的功能較為簡單,下面將一一介紹各個接口函數的─使用方法。

                                1. 閃爍持續透过丧尸群他看到里面四人時間─

                                數碼管閃爍時,設置其點亮和熄滅持續時間的函數原型為:

                                上電時,數碼管點亮和熄滅的持續時間默認值為500ms。on_ms 和off_ms 有效的時間值為150、200、250、……、800、850、900,即150ms ~ 900ms,且時間間隔為50ms。若時間間隔不┯是這些值,應該選擇一個最接近的值。比如,設置數碼管以最快的今日不说遗憾頻率閃爍,即亮、滅時間最很冲短為150ms,其使┯用方法如下:

                                註:僅設置閃爍時剑魂間還不能立即看到閃爍現象,必須打開某位的閃爍開關後才能看到閃爍現象,詳見am_zlg72128_digitron_flash_ctrl()函數介紹。

                                2. 閃爍控制

                                控制數碼管是否閃爍的函數原型為:

                                其中,ctrl_val 為控制值,bit0 ~ bit11 為有效位,分別對應數碼管0 ~ 11,位值為0 時不閃爍,位值為1 時閃爍。上電默認┱值為0x0000,即所有數碼管均不閃爍。比如,控制所有數碼管閃爍,其使用方法如╉下:

                                註:由於初始時∞可能數碼管未顯示任何內容,這段代碼可能看不到閃爍現象,因此可以在設置前,使用後續相關API 使數碼管顯示一些實際有效的內容那么。

                                3. 顯示屬性(開或關)

                                顯对不对示屬性是指控制哪些數碼管顯示,哪些數碼管不顯示。在默認情況下╗,所有數碼管均處於打開顯示狀態,掃描12 位數碼管。而實際上,可能需要顯示的位數並不足却是必备12 位,此時可以使用該函數關閉某些位的顯示。其函大概是校园里數原型為已经得到了九劫剑:

                                其中,ctrl_val 為控制值,bit0 ~ bit11 為有效位,分別對應數碼管0 ~ 11,位值為0 時打開顯示,位值為1 時關閉顯示。上電的才抬起头来默認值為0x0000,即所有位均正常顯示。比如,只使用了數碼管0 ~ 7,基於此,可以關閉數碼管8 ~ 11,其使◆用方法如下:

                                註:使用該函數控制顯示屬性時,對應數碼管的段碼內容並不會改變。

                                4. 顯示字符

                                在指定位置顯示字符,ZLG72128 已經提供了0 ~ 9 這10 個數字和常見╬的21 種字母的自動譯碼顯示,無需應用再自〒行譯碼。其函數原型為:

                                顯示的字符必須是ZLG72128 已經支持的可以自動完成譯碼的字符,包括字符'0'~'9'與AbCdEFGHiJLopqrtUychT(區分大小寫)。註意,若要顯示能够不吝付出那一几分钱數字1,則ch 參數應為字符'1',而不儍X是數字1。

                                若指定的字符不支持,則返回-AM_ENOTSUP。只要成功顯示傲世今天第二次封推,則返回AM_OK。若需要顯示一些自定義的圖形,使用 am_zlg72128_digitron_dispbuf_set() 直接設置顯示┷的段碼。

                                比如,在數碼管0 顯示字符F,不顯示小數點,不閃爍,其使用方法如╬下:

                                5. 顯示字符串

                                指定字◣符串顯示的起始位置,開始顯示一個字符┎串。其函數原型為:

                                字符串顯示遇到字符結束標誌'