<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > C8051F00x與HCMS 2964顯示屏的串行接口

          C8051F00x與HCMS 2964顯示屏的串行接口

          作者: 時間:2012-02-08 來源:網(wǎng)絡(luò) 收藏

          引言

          本文引用地址:http://www.ex-cimer.com/article/172158.htm

          2964是AGILENT TECHNOLOGIES公司生產(chǎn)的新一代點陣。該產(chǎn)品內(nèi)部自帶CMOS集成電路,可驅(qū)動LED,并可直接與處理器連接實現(xiàn)數(shù)據(jù)傳輸。由于其亮度調(diào)節(jié)方便快捷,故可廣泛地應(yīng)用在嵌入式系統(tǒng)和單片機(jī)控制的儀表、儀器和飛行模擬設(shè)備領(lǐng)域中,本文介紹了2964的顯示原理和的驅(qū)動方式、亮度調(diào)節(jié)以及基層軟件的設(shè)計方案。

          1 2964

          HCMS2964模塊為雙列直插封裝,每一個HCMS2964都有12個引腳以及內(nèi)部晶陣和寄存器。HCMS2964它通過CMOS刷新電路來驅(qū)動四個發(fā)光的字符塊,每個字符的尺寸是1.8 cm×1 cm,這些字符是由5column×8row共40 bit點寄存器首尾相連而成的,其中row0沒有用到,因而不會發(fā)光,所以,每個字符實際由35個點像素組成。

          HCMS2964有兩個獨(dú)立的控制寄存器,可通過改變寄存器的內(nèi)容來設(shè)置HCMS2964模塊的屬性。其中控制寄存器0用于PWM亮度脈寬調(diào)節(jié)、峰值電流強(qiáng)度設(shè)定(亮度調(diào)節(jié))以及睡眠模式控制等??刂萍拇嫫?則用于設(shè)置數(shù)據(jù)輸出方式和晶陣選擇模式(選擇為品陣頻率或晶陣頻率的1/8)。每個顯示模塊中的160bit點寄存器的內(nèi)容和驅(qū)動LED的關(guān)系是對應(yīng)且唯一對應(yīng)的,故可直接對點寄存器置1或0,并通過內(nèi)部IC電路來控制點陣上燈像素的亮或暗,從而形成相應(yīng)的字符。

          2 系統(tǒng)硬件設(shè)置

          HCMS2964的輸入引腳應(yīng)經(jīng)過上拉后與單片機(jī)的I/O口相連,其中主要的控制引腳有RS、CE、CLK,設(shè)計時可分別與的P1.0、P1.1、P1.2相對應(yīng),其中RS用于選擇點陣顯示寄存器(L)或命令寄存器(H),具體的時序是在寫顯示數(shù)據(jù)之前須將CE拉低,由RS選擇相應(yīng)的寄存器。輸入時鐘用于寫點陣寄存器或命令寄存器,可在上升沿觸發(fā)數(shù)據(jù)讀入。在數(shù)據(jù)傳人的整個過程中,CE要始終保持低電平,最后通過CLK時鐘為低電平、CE為高(點寄存器)或上升沿(命令寄存器)來鎖存數(shù)據(jù)顯示輸出。

          3 級聯(lián)

          級聯(lián)主要用于擴(kuò)展系統(tǒng)的顯示部分,以便把更多的顯示設(shè)備掛在擴(kuò)展線上。設(shè)計時可以通過單片機(jī)來控制片選信號輸入端,通常把多個片選信號接在一起統(tǒng)一控制。每個顯示模塊的輸出引腳連接下一個顯示屏的輸入引腳,便可實現(xiàn)多個顯示模塊的級聯(lián),一般地,在多模塊級聯(lián)顯示系統(tǒng)中,第一個顯示模塊用于控制最左端的四個字符,最后一個顯示模塊用于控制最右端的四個字符,數(shù)據(jù)轉(zhuǎn)換寄存器的長度是160位×N(N的個數(shù)為級聯(lián)的個數(shù)),每個模塊的位置0都是(N-1)×160位,依次順延。

          要注意的是,級聯(lián)中的多個顯示模塊的控制寄存器是相互獨(dú)立的,因此,在對顯示模塊進(jìn)行屬性的統(tǒng)一設(shè)置時,要對每個顯示模塊的控制寄存器寫入相同的控制字。

          CE、RS、BL、RST、CLK五根控制總線最終應(yīng)連接到C8051f00×的I/O線。從口線出來的DIN連接到最左端的模塊,DOUT線則連接下一個顯示模塊的DIN,最后一個模塊的DOUT空閑。每個模塊均可用內(nèi)部晶陣或外部晶陣。本系統(tǒng)最左端模塊的SEL高電平就是由IC內(nèi)部晶陣(MASTER)產(chǎn)生的,其它模塊的SEL低電平則接受來自左端模塊的晶陣(SLAVE),本系統(tǒng)可通過OCS總線完成晶陣傳輸。

          4 40級亮度調(diào)節(jié)

          點陣式HCMS2964系列IC提供有兩種改變亮度的方式,分別是16級和4級的亮度調(diào)解,它們都是通過改變控制寄存器0來實現(xiàn)的。其中PWM亮度控制是利用控制字0的DO~D3并通過實時脈寬調(diào)節(jié)來改變點陣的亮度。一般PWM都通過調(diào)節(jié)晶體振動的時鐘周期來調(diào)節(jié)脈寬大小,從而改變亮度。而峰值像素電流控制則是利用控制字0的D4和D5并通過改變四種峰值像素電流來改變點陣的亮度。

          以上這兩種改變亮度的方式適于分級調(diào)亮,但實際上常常會遇到通過采集電位計的模擬量來實現(xiàn)持續(xù)調(diào)亮的情況,而此時上述兩種方式由于亮度采集只有16級或4級,各級之間電路中通過點光源的電流跳變很大,亮度階梯變化也較為明顯,而這種亮度階梯在視覺上會形成過于明顯的亮度突變,因而視覺效果較差。要使亮度調(diào)節(jié)變得連續(xù)柔和并更容易被人眼接受,只有增加調(diào)亮的級數(shù),提高分辨率,才能模擬持續(xù)亮度調(diào)節(jié)所達(dá)到的效果。

          由于D4-D5位(峰值像素電流)與D0-D3(PWM調(diào)亮)共占了控制字0的低六位,因此設(shè)計時可以想到把所有控制亮度的因素考慮進(jìn)來,并按照亮度打亂排序,重新組成4×16=64級階(即64個亮度等級)來改善調(diào)亮效果。在這里要說明的是,由于從000000H~111111H采集出來的亮度不是遞增的,故不要采集模擬量直接送入控制字的低六位,也不能將脈寬值與像素電流峰值簡單的累加計算來進(jìn)行亮度的對比,實驗證明:MX=亮度這一公式只有當(dāng)M和X的其中一個作為常量,另一個為變量才成立,而不能應(yīng)用于兩個變量相乘。筆者已通過光學(xué)儀器的分析,把它們的光能從小到大排列起來,并篩選掉突變和相近的能量值,從而形成了一個40級軟件調(diào)光方案。

          5 系統(tǒng)軟件設(shè)計

          本系統(tǒng)軟件設(shè)計可分為顯示模塊、模擬量采集模塊、串口通信模塊三部分。其點陣系統(tǒng)控制字和顯示子程序如下:

          52.jpg

          53.jpg

          6 結(jié)束語

          本文給出的嵌入式處理器與點陣芯片進(jìn)行的數(shù)據(jù)傳輸顯示系統(tǒng)硬件結(jié)構(gòu)簡單,無需增加引腳,系統(tǒng)易于擴(kuò)展,但通過對該系統(tǒng)的實際應(yīng)用發(fā)現(xiàn):串行器件存在兩大問題:一是串行傳輸?shù)乃俣纫炔⑿懈?,二是串行傳輸要有一定的通訊協(xié)議,包括設(shè)備的迅通、數(shù)據(jù)的格式及數(shù)據(jù)傳輸?shù)膯优c停止等。



          關(guān)鍵詞: 接口 串行 顯示屏 HCMS C8051F00x

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();