精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

面向AMetal框架與接口的編程原理和技巧

AGk5_ZLG_zhiyua ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:丁德輝 ? 2017-10-24 18:15 ? 次閱讀

面向AMetal框架與接口編程(上),對(duì)AMetal框架進(jìn)行了詳細(xì)介紹,通過(guò)閱讀這本書(shū),你可以學(xué)到高度復(fù)用的軟件設(shè)計(jì)原則和面向接口編程的開(kāi)發(fā)思想,聚焦自己的“核心域”,改變自己的編程思維,實(shí)現(xiàn)企業(yè)和個(gè)人的共同進(jìn)步。經(jīng)周立功教授授權(quán),即日起,致遠(yuǎn)電子公眾號(hào)將對(duì)該書(shū)內(nèi)容進(jìn)行連載,愿共勉之。

第四章為面向接口的編程,本文內(nèi)容包括:4.3 LED 數(shù)碼管

4.3 LED 數(shù)碼

>>> 4.3.1 靜態(tài)顯示

如圖4.10 所示是由2 個(gè)共陽(yáng)極的LN3161BS 組成的LED 數(shù)碼管電路,R1~R8 為限流電阻,c1 和c2在內(nèi)部并聯(lián)連接。如果將段選端a~dp 與位選端com0、com1 連接到AM824-Core 的PIO0_8~PIO0_15 與PIO0_17、PIO0_23,則通過(guò)程序即可控制筆段的亮滅。由于數(shù)碼管的8 個(gè)段選端全部都要經(jīng)過(guò)com 口才能得到供電,因此需要增加三極管提高com 口的驅(qū)動(dòng)電流,以彌補(bǔ)LPC824 GPIO 驅(qū)動(dòng)電流的不足。當(dāng)com 為低電平時(shí)三極管導(dǎo)通,則數(shù)碼管的c1、c2 為高電平,即選通數(shù)碼管。此時(shí)只要數(shù)碼管的任一段選端為低電平,則點(diǎn)亮數(shù)碼管相應(yīng)的筆段。

圖4.10 LED 顯示器電路

MiniPort-View 數(shù)碼管模塊通過(guò)MiniPort B(排母)與AM824-core 相連,同時(shí)將其余不使用的I/O 通過(guò)MiniPort A(排針)引出,實(shí)現(xiàn)模塊的橫向堆疊,其對(duì)應(yīng)AM824-Core 的MiniPort 接口J4的功能定義詳見(jiàn)圖4.11。

圖4.11 數(shù)碼管模塊實(shí)物與接口定義

“日”形數(shù)字顯示除了能夠顯示10 進(jìn)制數(shù)字0~9,有時(shí)也用于顯示16 進(jìn)制字母AbCdEF 或其它一些非常簡(jiǎn)單的符號(hào)。按照二進(jìn)制的計(jì)算方法,8 段顯示有256 種組合,去掉“點(diǎn)(dp)”的顯示,其筆段的組合為128 種(27),而數(shù)字0~9 只有10 個(gè)符號(hào),因此要想得到我們希望的顯示符就必須對(duì)顯示段進(jìn)行編碼。顯然,如果要想點(diǎn)亮數(shù)碼管的某一個(gè)筆段,則只需將對(duì)應(yīng)的筆段置0就可以了。即輸出低電平至com0 端,同時(shí)輸出低電平至b、c 段,點(diǎn)亮LED 得到字符“1”。由此可見(jiàn),按照數(shù)字的筆畫(huà)排列,則很容易得到10 個(gè)數(shù)字0~9 共10 個(gè)顯示字符,七段共陽(yáng)數(shù)碼管10 個(gè)數(shù)字段碼表詳見(jiàn)表4.2。

表4.2 七段共陽(yáng)極數(shù)碼管段碼表

如果以8 位數(shù)值表示段碼,當(dāng)其相應(yīng)位為0 時(shí),則表示對(duì)應(yīng)的段點(diǎn)亮。bit7~0 分別與dp~a 對(duì)應(yīng),假設(shè)bit0 為0,即點(diǎn)亮a。為了方便訪問(wèn),不妨將段碼存放到一個(gè)數(shù)組中。即:

AMetal 軟件包提供了熄滅所有數(shù)碼管的板級(jí)初始化函數(shù)、段碼傳送函數(shù)、位碼傳送函數(shù)和數(shù)字顯示掃描函數(shù),其函數(shù)接口詳見(jiàn)程序清單4.10。

程序清單4.10 digitron0.h 接口

其中,code 為待顯示數(shù)字0~9 所對(duì)應(yīng)的段碼,pos 為com0 或com1 對(duì)應(yīng)的數(shù)字下標(biāo)(0~1),num 為待顯示的數(shù)字0~9。當(dāng)后續(xù)調(diào)用這些函數(shù)時(shí),則只需要“#include "digitron0.h"”就可以了。比如,在com0 數(shù)碼管上顯示數(shù)字1,詳見(jiàn)程序清單4.11。

程序清單4.11 靜態(tài)顯示數(shù)字1 范例程序

如果讓單個(gè)數(shù)碼管循環(huán)顯示0~9,且循環(huán)的時(shí)間為1s,顯然顯示時(shí)間也是1s,那么這就是一個(gè)簡(jiǎn)單的秒計(jì)數(shù)器,詳見(jiàn)程序清單4.12。

程序清單4.12 秒計(jì)數(shù)器范例程序

當(dāng)你看到程序清單4.12(9)中的“i = (i + 1) % 10;”代碼時(shí),是否有一種似曾相識(shí)的感覺(jué)呢?這行代碼是從LED 流水燈實(shí)驗(yàn)中提煉出來(lái)的。如果需要倒計(jì)時(shí)呢?則將其修改為“i= ((i – 1) + 10) % 10;”。如果要從9 開(kāi)始倒計(jì)數(shù)呢?那就將i 的初始值修改為9。至此已經(jīng)實(shí)現(xiàn)了0~9 的循環(huán)顯示,能否循環(huán)顯示0~99 呢?這就是下面將要介紹的數(shù)碼管動(dòng)態(tài)掃描顯示。

>>> 4.3.2 動(dòng)態(tài)顯示

如果要顯示多位數(shù)字,則需將多個(gè)數(shù)碼管并接在一起使用。此時(shí)將會(huì)出現(xiàn)一大堆段選端的問(wèn)題,比如,兩位數(shù)碼管需要2×8=16 個(gè)段選信號(hào),而LPC824 一共才16 個(gè)I/O,無(wú)法滿(mǎn)足需求,同時(shí)管腳使用越多,連線也會(huì)變得越復(fù)雜。所以為避免使用過(guò)多的管腳而造成資源浪費(fèi)和連線復(fù)雜,人們發(fā)明了一種動(dòng)態(tài)掃描方式來(lái)實(shí)現(xiàn)多個(gè)數(shù)碼管的顯示。

由于數(shù)碼管的段碼是連接在一起的,那么同一時(shí)刻兩個(gè)數(shù)碼管的段碼必然是相同的,如果簡(jiǎn)單地使2 個(gè)公共端(com)均有效來(lái)實(shí)現(xiàn)2 個(gè)數(shù)碼管的顯示,那么必然都會(huì)顯示相同的內(nèi)容。怎么辦?分時(shí)顯示,即一段時(shí)間數(shù)碼管0 正常顯示(com0 有效,com1 無(wú)效,段碼為數(shù)碼管0 需要顯示的圖形),另外一段時(shí)間數(shù)碼管1 正常顯示(com1 有效,com0 無(wú)效,段碼為數(shù)碼管1 需要顯示的圖形)。如要顯示一個(gè)數(shù)值12?即在com0 顯示1,在com1 管顯示2,詳見(jiàn)程序清單4.13。

程序清單4.13 顯示數(shù)值12 范例程序

雖然在實(shí)際的操作過(guò)程中數(shù)字是輪流顯示的,但只要輪流操作的速度達(dá)到一定的范圍,那么在人眼看起來(lái)就能達(dá)到和整體顯示的效果一樣,就像我們經(jīng)常看的電影技術(shù)一樣。

再細(xì)心觀察一下實(shí)驗(yàn)現(xiàn)象可以發(fā)現(xiàn),雖然顯示的數(shù)字是12,但是數(shù)碼管顯示的1 和2 都會(huì)有另外一個(gè)數(shù)字的影子。com0 顯示的是1,但也能看到2 的影子。

digitron_disp_num()就是digitron_com_sel ()和digitron_segcode_set()的一個(gè)簡(jiǎn)單組合。其顯示過(guò)程是先傳送位碼、后傳送段碼,于是在傳送位碼和傳送段碼之間就產(chǎn)生了時(shí)間間隙。當(dāng)新的com 端有效時(shí),仍然還在使用此前的段碼,所以出現(xiàn)了短暫的錯(cuò)誤現(xiàn)象。怎么辦?可以在這段時(shí)間內(nèi)熄滅所有的數(shù)碼管,避免錯(cuò)誤顯示。即:

那如何循環(huán)顯示0 ~ 59 呢?即將要顯示的數(shù)值加1,詳見(jiàn)程序清單4.14。

程序清單4.14 0~59 秒計(jì)數(shù)器范例程序(1)

程序還可以繼續(xù)優(yōu)化嗎?現(xiàn)在的問(wèn)題是,為了顯示一個(gè)數(shù)據(jù),即便數(shù)據(jù)沒(méi)有改變,也必須動(dòng)態(tài)掃描數(shù)碼管,否則無(wú)法顯示。首先將待顯示的數(shù)據(jù)存放到緩沖區(qū)(存儲(chǔ)單元),然后每隔一段時(shí)間從緩沖區(qū)讀取待顯示的數(shù)據(jù)。即:

讀緩沖區(qū)的數(shù)據(jù)實(shí)現(xiàn)動(dòng)態(tài)掃描的函數(shù)詳見(jiàn)程序清單4.15。

程序清單4.15 動(dòng)態(tài)掃描顯示函數(shù)

由此可見(jiàn),緩沖區(qū)的段碼就是當(dāng)前要顯示的數(shù)據(jù),當(dāng)再次切換時(shí),則繼續(xù)調(diào)用該函數(shù),則在下一個(gè)位顯示數(shù)據(jù),以此類(lèi)推。由于位選變量pos 每次都是在上一次顯示的位的基礎(chǔ)上變化的,因此必須將其聲明為靜態(tài)變量。顯然,只要將顯示的內(nèi)容存放到緩沖區(qū)中,同時(shí)保證以一定的時(shí)間間隔(各個(gè)數(shù)碼管顯示后的延時(shí))調(diào)用該函數(shù),即可實(shí)現(xiàn)動(dòng)態(tài)掃描。

為了便于復(fù)用數(shù)碼管程序,則將上述代碼全部存放到digitron1.c 文件,函數(shù)聲明放到digitron1.h 文件。其接口如下:

(1) digitron_init():初始化相關(guān)引腳;

(2) digitron_disp_scan():動(dòng)態(tài)掃描函數(shù)。

由于要將待顯示內(nèi)容存放到緩沖區(qū),同時(shí)還可能訪問(wèn)段碼表,因此不允許調(diào)用者直接操作其中的變量、數(shù)組等,基于此增加3 個(gè)接口函數(shù),其分別為傳送段碼到顯示緩沖區(qū),傳送數(shù)字0~9 到顯示緩沖區(qū)與獲取待顯示數(shù)字的段碼,其相應(yīng)的代碼詳見(jiàn)程序清單4.16。

程序清單4.16 操作緩沖區(qū)和段碼表接口函數(shù)

如果要在com0 顯示“3.”,則可以直接這樣使用:

最后將這些接口全部聲明在程序清單4.17 所示的digitron1.h 文件中,相關(guān)的實(shí)現(xiàn)代碼詳見(jiàn)“深入淺出AMetal——?jiǎng)討B(tài)顯示”介紹的digitron1.c 文件。

程序清單4.17 digitron1.h 文件內(nèi)容

注意,在digitron1.h 接口中,已經(jīng)使用digitron_disp_num_set ()和digitron_disp_code_set()替代digitron_disp_num()和digitron_disp_code(),程序清單4.18 就是通過(guò)迭代后的循環(huán)顯示0~59 秒計(jì)數(shù)器范例程序。

程序清單4.18 0~59 秒計(jì)數(shù)器范例程序(2)

>>> 4.3.3 閃爍處理

在顯示過(guò)程中,有時(shí)為了修改某位數(shù)碼管的值,需要對(duì)數(shù)碼管進(jìn)行閃爍處理。在溫度采集場(chǎng)合,當(dāng)溫度超過(guò)一定的值后,可以將顯示的溫度值做全閃處理,以引起觀察者注意。

實(shí)際上,只要讓數(shù)碼管顯示一段時(shí)間,熄滅一段時(shí)間,就產(chǎn)生了閃爍的效果,顯然只要直接操作緩沖區(qū)就可以了。假設(shè)每秒閃爍2 次,在個(gè)位不斷閃爍,詳見(jiàn)程序清單4.19。

程序清單4.19 實(shí)現(xiàn)秒計(jì)數(shù)器個(gè)位閃爍(1)

在程序中,1s 閃爍2 次,每次閃爍占用500ms,即顯示250ms,熄滅250ms。每秒結(jié)束后,秒計(jì)數(shù)器加1,顯然用同樣的方法也可以使秒計(jì)數(shù)器的十位閃爍,由此可見(jiàn),實(shí)現(xiàn)閃爍僅需交替?zhèn)魉驼o@示的段碼和熄滅顯示的段碼即可。由于熄滅顯示的段碼非常特殊,固定為0xFF。因此,只要在合適的時(shí)間傳送相應(yīng)段碼即可,段碼傳送函數(shù)digitron_segcode_set()是在digitron_disp_scan()函數(shù)中調(diào)用的。通過(guò)修改該函數(shù),使其在一段時(shí)間內(nèi)傳送緩沖區(qū)中正常顯示的段碼,一段時(shí)間內(nèi)傳送熄滅顯示的段碼0xFF,也能實(shí)現(xiàn)閃爍,詳見(jiàn)程序清單4.20。

程序清單4.20 帶閃爍功能的digitron_disp_scan()函數(shù)(1)

程序?qū)r(shí)間分隔為500ms 的時(shí)間片,當(dāng)需要閃爍時(shí),顯示250ms,熄滅250ms,每隔5ms 調(diào)用一次digitron_disp_scan(),cnt 循環(huán)計(jì)數(shù)+1。如何讓秒計(jì)數(shù)器十位閃爍呢?直接將if(pos == 1)修改為if(pos == 0)。

顯然,數(shù)碼管的閃爍狀態(tài)和顯示狀態(tài)可以用一個(gè)標(biāo)志位來(lái)表示,即0 表示顯示,1 表示閃爍,bit0 和bit1 分別表示com0 和com1 的狀態(tài)。定義一個(gè)全局變量如下:

如果bit1 閃爍,則將bit1 的初始值設(shè)置為1。即:

這樣一來(lái),即可需要根據(jù)該變量的值來(lái)獲取需要閃爍的位,詳見(jiàn)程序清單4.21。顯然,只要將g_blink_flag 對(duì)應(yīng)的位置1 就能實(shí)現(xiàn)閃爍,否則將其對(duì)應(yīng)位清0。

程序清單4.21 帶閃爍功能的digitron_disp_scan()函數(shù)(2)

為了提高程序的可閱讀性,則進(jìn)一步優(yōu)化兩個(gè)if-else 語(yǔ)句,詳見(jiàn)程序清單4.22。

程序清單4.22 帶閃爍功能的digitron_disp_scan()函數(shù)(3)

由于g_blink_flag 變量定義在實(shí)現(xiàn)代碼中,不能直接將該變量提供給用戶(hù)修改,因此必須提供一個(gè)接口函數(shù)用于設(shè)定閃爍位,其相應(yīng)的代碼詳見(jiàn)程序清單4.23。

程序清單4.23 digitron_disp_blink_set()函數(shù)

digitron_disp_blink_set()的pos 用于指定設(shè)置閃爍屬性的數(shù)碼管位置,isblink 設(shè)置閃爍屬性,值為AM_TRUE 表示閃爍,AM_FALSE 表示不需要閃爍。am_bool_t 是AMetal 在am_types.h 文件中自定義的類(lèi)型,該類(lèi)型數(shù)據(jù)的值只可能為AM_TRUE(真)或AM_FALSE(假),設(shè)定com0 閃爍的方法如下:

設(shè)定com0 停止閃爍的方法如下:

添加digitron_disp_blink_set()的接口函數(shù),詳見(jiàn)程序清單4.24 所示的digitron1.h。

程序清單4.24 digitron1.h 文件內(nèi)容

有了該接口函數(shù)后,實(shí)現(xiàn)閃爍就很容易了,程序清單4.25 實(shí)現(xiàn)了秒計(jì)數(shù)器個(gè)位閃爍。

程序清單4.25 實(shí)現(xiàn)秒計(jì)數(shù)器個(gè)位閃爍(2)

由此可見(jiàn),與程序清單4.18 相比,僅增加了一行代碼就實(shí)現(xiàn)了閃爍功能,顯然接口的設(shè)計(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)投訴
  • AMetal框架
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    1479

原文標(biāo)題:周立功:面向接口的編程——LED 數(shù)碼管

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    周立功教你學(xué)C語(yǔ)言編程與程序設(shè)計(jì):這樣寫(xiě)函數(shù)指針數(shù)組最好用

    周立功教授數(shù)年之心血之作《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)》以及《面向AMetal框架接口編程(上)》,電子版已無(wú)償性分享到電子工程師與高校群體,在公
    的頭像 發(fā)表于 08-31 14:06 ?6860次閱讀
    周立功教你學(xué)C語(yǔ)言<b class='flag-5'>編程</b>與程序設(shè)計(jì):這樣寫(xiě)函數(shù)指針數(shù)組最好用

    面向ametal框架接口編程ametal uart總線

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 11-06 06:55 ?6300次閱讀
    <b class='flag-5'>面向</b><b class='flag-5'>ametal</b><b class='flag-5'>框架</b>與<b class='flag-5'>接口</b>的<b class='flag-5'>編程</b><b class='flag-5'>ametal</b> uart總線

    學(xué)習(xí)數(shù)碼管,面向通用接口編程的基礎(chǔ)

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 11-17 07:05 ?6263次閱讀
    學(xué)習(xí)數(shù)碼管,<b class='flag-5'>面向</b>通用<b class='flag-5'>接口</b><b class='flag-5'>編程</b>的基礎(chǔ)

    一文讀懂ametal_hc595接口的學(xué)習(xí)要點(diǎn)

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 11-28 07:27 ?3827次閱讀
    一文讀懂<b class='flag-5'>ametal</b>_hc595<b class='flag-5'>接口</b>的學(xué)習(xí)要點(diǎn)

    看完這篇文章終于學(xué)懂了ametal_spi和iic總線知識(shí)

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 12-05 07:53 ?8338次閱讀
    看完這篇文章終于學(xué)懂了<b class='flag-5'>ametal</b>_spi和iic總線知識(shí)

    應(yīng)用面向對(duì)象編程SoC原則的典型示例

    周立功教授新書(shū)《面向AMetal框架接口編程(上)》對(duì)AMetal
    的頭像 發(fā)表于 02-05 09:36 ?1.1w次閱讀
    應(yīng)用<b class='flag-5'>面向</b>對(duì)象<b class='flag-5'>編程</b>SoC原則的典型示例

    新書(shū)速遞:周立功教授心血新力作《面向AMetal框架接口編程(上)》

    簡(jiǎn)介《面向AMetal框架接口編程(上)》是《嵌入式軟件工程方法與實(shí)踐叢書(shū)》中的第一套第二本書(shū),叢書(shū)共含四套:第一套《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 08-21 14:58

    面向AMetal框架接口編程(上)》——第1章 AM824-Core 開(kāi)發(fā)套件

    發(fā)表于 08-22 16:04

    【下載】新書(shū)速遞:周立功教授心血新力作《面向AMetal框架接口編程(上)》

    平臺(tái)”。基于此,進(jìn)一步擴(kuò)大了 AWorks 使用范圍,又發(fā)展出了代碼更小的 AMetal,AWorks 能給你帶來(lái)的最大價(jià)值就是不需要重新發(fā)明輪子。5、叢書(shū)簡(jiǎn)介《面向AMetal框架
    發(fā)表于 08-22 17:56

    面向AMetal框架接口編程(上)》周立功最新力作

    面向Ametal框架接口編程
    發(fā)表于 08-21 13:49 ?52次下載
    《<b class='flag-5'>面向</b><b class='flag-5'>AMetal</b><b class='flag-5'>框架</b>與<b class='flag-5'>接口</b>的<b class='flag-5'>編程</b>(上)》周立功最新力作

    新書(shū)速遞:周立功教授心血新力作《面向AMetal框架接口編程(上)》

    概要:產(chǎn)品的BOM成本很低,而毛利又很高,為何很多上市公司的年利潤(rùn)卻買(mǎi)不起一套房?房子到底是被誰(shuí)買(mǎi)走了,這個(gè)問(wèn)題值得我們反思!經(jīng)過(guò)近二十年持之以恒的研究與分析,周立功教授對(duì)如何實(shí)現(xiàn)軟件代碼的復(fù)用和跨平臺(tái)、實(shí)現(xiàn)開(kāi)發(fā)者夢(mèng)寐以求的奮斗目標(biāo),進(jìn)行了大膽的推測(cè),提出了核心域與非核心域的概念,而對(duì)于人與人之間思維差異為企業(yè)與個(gè)人發(fā)展帶來(lái)的影響,給出了終極解決之道!
    發(fā)表于 08-21 15:18 ?2329次閱讀

    面向接口編程——平臺(tái)技術(shù)、開(kāi)關(guān)量信號(hào)

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 10-20 14:55 ?4449次閱讀

    深入淺出AMetal接口與實(shí)現(xiàn)

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 10-27 15:21 ?6491次閱讀
    深入淺出<b class='flag-5'>AMetal</b>之<b class='flag-5'>接口</b>與實(shí)現(xiàn)

    ametal中如何使用flash存儲(chǔ)器?

    面向AMetal框架接口編程(上)》一書(shū)對(duì)AMetal
    的頭像 發(fā)表于 11-07 14:33 ?5376次閱讀
    <b class='flag-5'>ametal</b>中如何使用flash存儲(chǔ)器?

    面向AMetal框架接口編程

    面向AMetal框架接口編程
    發(fā)表于 11-23 15:22 ?8次下載