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

          新聞中心

          CH451的使用總結(jié)

          作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
          最近單片機(jī)學(xué)習(xí)進(jìn)度到數(shù)碼管顯示。我用的學(xué)習(xí)板,是用CH451芯片來(lái)驅(qū)動(dòng)數(shù)碼管顯示的。剛看CH451技術(shù)資料時(shí),被抽象的解釋和大量的信息難住了,并不能很好的理解CH451的工作過(guò)程。重新學(xué)習(xí)了CH451技術(shù)資料,花了半天時(shí)間才把它控制數(shù)碼管的原理摸透。以下是我的學(xué)習(xí)總結(jié)。

          一 CH451是何物?(來(lái)自說(shuō)明書(shū))
          CH451 是一個(gè)整合了數(shù)碼管顯示驅(qū)動(dòng)和鍵盤(pán)掃描控制以及μP 監(jiān)控的多功能外圍芯片。CH451 內(nèi)置RC 振蕩電路,可以動(dòng)態(tài)驅(qū)動(dòng)8 位數(shù)碼管或者64 位LED,具有BCD 譯碼、閃爍、移位等功能;同時(shí)還可以進(jìn)行64 鍵的鍵盤(pán)掃描;CH451 通過(guò)1 線(xiàn)或者可以級(jí)聯(lián)的4 線(xiàn)串行接口單片機(jī)等交換數(shù)據(jù);并且提供上電復(fù)位和看門(mén)狗等監(jiān)控功能。

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

          它的功能特點(diǎn)有:

          1. 顯示驅(qū)動(dòng)
          ● 內(nèi)置大電流驅(qū)動(dòng)級(jí),段電流不小于30mA,字電流不小于160mA。
          ● 動(dòng)態(tài)顯示掃描控制,直接驅(qū)動(dòng)8 位數(shù)碼管或者64 位發(fā)光管LED。
          ● 可選數(shù)碼管的段與數(shù)據(jù)位相對(duì)應(yīng)的不譯碼方式或者BCD 譯碼方式。
          ● 字?jǐn)?shù)據(jù)左移、右移、左循環(huán)、右循環(huán)。
          ● 各數(shù)字獨(dú)立閃爍控制。
          ● 通過(guò)占空比設(shè)定提供16 級(jí)亮度控制。
          ● 支持段電流上限調(diào)整,可以省去所有限流電阻。
          ● 掃描極限控制,支持1 到8 個(gè)數(shù)碼管,只為有效數(shù)碼管分配掃描時(shí)間。
          2. 鍵盤(pán)控制
          ● 內(nèi)置64 鍵鍵盤(pán)控制器,基于8×8 矩陣鍵盤(pán)掃描。
          ● 內(nèi)置去抖動(dòng)電路。
          ● 鍵盤(pán)中斷,低電平有效輸出。
          ● 提供按鍵釋放標(biāo)志位。
          3. 外部接口
          ● 可選高速的4 線(xiàn)串行接口,支持芯片級(jí)聯(lián),時(shí)鐘速度從0 到10MHz。
          ● 可選簡(jiǎn)潔的1 線(xiàn)串行接口。
          ● 內(nèi)置RC 阻容振蕩電路,同時(shí)支持外接阻容振蕩。
          ● 內(nèi)置上電復(fù)位,提供高電平有效復(fù)位輸出和低電平有效復(fù)位輸出。
          ● 內(nèi)置看門(mén)狗電路Watch-Dog。
          4. 其它雜項(xiàng)
          ● 可選多種封裝:DIP28、SOP28、DIP24S、CHIP。
          ● 經(jīng)過(guò)授權(quán)采用了2 項(xiàng)專(zhuān)利技術(shù),低成本,簡(jiǎn)便易用。
          二 數(shù)碼管驅(qū)動(dòng)

          必須先知道單片機(jī)是如何與CH451通訊的。請(qǐng)看下圖:

          CH451本身的引腳很多,但是與單片機(jī)有關(guān)的,就七個(gè)引腳(如圖)。CH451 具有硬件實(shí)現(xiàn)的高速4 線(xiàn)串行接口,包括4 根信號(hào)線(xiàn):串行數(shù)據(jù)輸入線(xiàn)DIN、串行數(shù)據(jù)時(shí)鐘線(xiàn)DCLK、串行數(shù)據(jù)加載線(xiàn)LOAD、串行數(shù)據(jù)輸出線(xiàn)DOUT。其中,DIN、DCLK、LOAD 是帶上拉的輸入信號(hào)線(xiàn),默認(rèn)是高電平;DOUT 在未啟用鍵盤(pán)掃描功能時(shí)作為串行數(shù)據(jù)輸出線(xiàn),在啟用鍵盤(pán)掃描功能后作為鍵盤(pán)中斷和數(shù)據(jù)輸出線(xiàn),默認(rèn)是高電平。因此與數(shù)碼管顯示有關(guān)的只有DIN、DCLK、LOAD 。

          1芯片初試化

          CH451默認(rèn)選擇1線(xiàn)串行接口,需要在DCLK串行時(shí)鐘輸入之前,在P1^0口(假設(shè)P1^0接DIN;P1^1接DCLK; P1^2接LOAD)輸出一個(gè)低電平脈沖(由高電平變?yōu)榈碗娖皆倩謴?fù)為高電平)(注:附在keil c實(shí)現(xiàn)該功能的代碼)通知CH451選擇4線(xiàn)串行接口。

          附:

          sbit ch451_din = P1^0;
          sbit ch451_clk = P1^1;
          sbit ch451_load = P1^2;

          void ch451_init(void) //對(duì)芯片初始化

          {

          ch451_din = 0;
          ch451_din = 1;
          ch451_load = 1;
          ch451_clk = 1;

          }

          2 輸送串行數(shù)據(jù)

          芯片初始化后,開(kāi)始輸送串行數(shù)據(jù)。CH451 的各個(gè)操作命令均為12 位,即每個(gè)操作命令對(duì)應(yīng)12 位串行數(shù)據(jù),數(shù)據(jù)輸入的順序是低位在前,高位在后,如B11B10~~~B0,最后一位B0先進(jìn)入。串行數(shù)據(jù)輸入 ch451過(guò)程可總結(jié)如下:

          ① 輸出一位數(shù)據(jù),即向DIN 輸出最低位數(shù)據(jù)B0,并向DCLK 輸出低電平脈沖(從高
          電平變?yōu)榈碗娖皆倩謴?fù)為高電平),其中包括一個(gè)上升沿使CH451 輸入位數(shù)據(jù);
          ② 以同樣的方式,輸出位數(shù)據(jù)B1~B11;
          ③ 向LOAD 輸出低電平脈沖,其中包括一個(gè)上升沿使CH451 加載串行數(shù)據(jù)。

          需要注意地,數(shù)據(jù)是一位一位的往DIN輸送,把12位數(shù)據(jù)全輸完,剛好要12次。(附:代碼)

          ch451_load=0; /*命令開(kāi)始*/
          for(i=0;i<12;i++)
          { /*送入12位數(shù)據(jù),低位在前*,&表按位與,如5&7=5,即:0101^0111=5*/
          ch451_din=command&1;
          ch451_clk=0;
          ch451_clk=1;
          command>>=1; /*上升沿有效*/
          }

          注意:command>>=1為右移一位,其左邊高位補(bǔ)0;類(lèi)似 command<<=1為左移一位,其右邊最高位補(bǔ)0。

          ch451_load=1; /*加載數(shù)據(jù)*/
          上述過(guò)程可以用電平的變化來(lái)描述(如下圖):

          3 操作命令

          每次往串行接口輸送數(shù)據(jù)前,需要了解操作命令的含義,該輸送什么命令,這是本小節(jié)討論的。下表列出了CH451 的各個(gè)操作命令所對(duì)應(yīng)的12 位串行數(shù)據(jù)。其中,標(biāo)注為x 的位表示該位可以是任意值;標(biāo)有名稱(chēng)的位表示該位在CH451芯片內(nèi)部具有相應(yīng)的寄存器,其數(shù)據(jù)根據(jù)操作命令的不同而變化。

          注意:在送數(shù)據(jù)前前先為被顯示的數(shù)碼管定義(位選).找到上表"加載字?jǐn)?shù)據(jù)0"欄,可以這樣定義#define CH451_DIG0 0x0800,該語(yǔ)句表示數(shù)碼管位0顯示;數(shù)碼管位1顯示,可定義#define CH451_DIG1 0x0900,其它類(lèi)推``````

          開(kāi)始輸送12位串行數(shù)據(jù)。

          首先送“設(shè)定系統(tǒng)參數(shù)”命令。設(shè)定系統(tǒng)參數(shù)命令用于設(shè)定CH451 的系統(tǒng)級(jí)參數(shù):看門(mén)狗使能WDOG,鍵盤(pán)掃描使能KEYB,顯示驅(qū)動(dòng)使能DISP。各個(gè)參數(shù)均通過(guò)1 位數(shù)據(jù)控制,將相應(yīng)的數(shù)據(jù)位置為1 則啟用該功能,否則關(guān)閉該功能(默認(rèn)值)。例如,命令數(shù)據(jù)010000000101B 表示啟用看門(mén)狗的功能、關(guān)閉鍵盤(pán)掃描的功能、啟用顯示掃描驅(qū)動(dòng)的功能。

          其次送“設(shè)定顯示參數(shù)”。設(shè)定顯示參數(shù)命令用于設(shè)定CH451 的顯示參數(shù):譯碼方式MODE,掃描極限LIMIT,顯示亮度INTENSITY。譯碼方式MODE 通過(guò)1 位數(shù)據(jù)控制,置1 時(shí)選擇BCD 譯碼方式,置0 時(shí)選擇不譯碼方式(默認(rèn)值)。掃描極限LIMIT 通過(guò)3 位數(shù)據(jù)控制,數(shù)據(jù)001B~111B和000B 分別設(shè)定掃描極限為1~7 和8(默認(rèn)值)。顯示亮度INTENSITY 通過(guò)4 位數(shù)據(jù)控制,數(shù)據(jù)0001B~1111B 和0000B 分別設(shè)定顯示驅(qū)動(dòng)占空比為1/16~15/16 和16/16(默認(rèn)值)。例如,命令數(shù)據(jù)010101110000B 表示選擇不譯碼方式、掃描極限為7、顯示驅(qū)動(dòng)占空比16/16;命令數(shù)據(jù)010110001010B表示選擇BCD 譯碼方式、掃描極限為8、顯示驅(qū)動(dòng)占空比為10/16。
          然后送數(shù)碼管顯示的命令。如果是BCD 譯碼方式,發(fā)送“CH451_DIG7|8”,表示數(shù)碼管7顯示,且顯示的數(shù)值是8;要讓數(shù)碼管5顯示“A”數(shù)值,就發(fā)送命令“CH451_DIG5|10”。

          數(shù)碼管顯示的過(guò)程,可以簡(jiǎn)單記為:初始化芯片(DIN、DCLK、LOAD ),定義操作命令(系統(tǒng)參數(shù)、顯示參數(shù)等),發(fā)送操作命令。

          完整的數(shù)碼管顯示程序如下所示:

          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          #define CH451_DIG0 0x0800 /*數(shù)碼管位0顯示*/
          #define CH451_DIG1 0x0900 /*數(shù)碼管位1顯示*/
          #define CH451_DIG2 0x0a00 /*數(shù)碼管位2顯示*/
          #define CH451_DIG3 0x0b00 /*數(shù)碼管位3顯示*/
          #define CH451_DIG4 0x0c00 /*數(shù)碼管位4顯示*/
          #define CH451_DIG5 0x0d00 /*數(shù)碼管位5顯示*/
          #define CH451_DIG6 0x0e00 /*數(shù)碼管位6顯示*/
          #define CH451_DIG7 0x0f00 /*數(shù)碼管位7顯示*/
          sbit ch451_din = P1^0;
          sbit ch451_clk = P1^1;
          sbit ch451_load = P1^2;
          /********************************************************************
          函 數(shù) 名:ch451_init()
          功 能:對(duì)ch451芯片進(jìn)行初始化
          ***********************************************************************/
          void ch451_init(void)
          {
          ch451_din = 0; /*先低后高,選擇4線(xiàn)輸入*/
          ch451_din = 1;
          ch451_load = 1;
          ch451_clk = 1;
          }
          /********************************************************************
          函 數(shù) 名:ch451_write()
          功 能:把12位的指令或數(shù)據(jù)寫(xiě)入ch451
          說(shuō) 明:12位數(shù)據(jù)或指令的寫(xiě)入順序是低位
          入口參數(shù):command
          ***********************************************************************/
          void ch451_write(unsigned int command)
          {
          unsigned char i;
          ch451_load=0; /*命令開(kāi)始*/
          for(i=0;i<12;i++)
          { /*送入12位數(shù)據(jù),低位在前*,&表按位與,如5&7=5,即:0101^0111=5*/
          ch451_din=command&1;
          ch451_clk=0;
          ch451_clk=1;
          command>>=1; /*上升沿有效*/
          }
          ch451_load=1; /*加載數(shù)據(jù)*/
          }
          void main()
          {

          ch451_init();
          //系統(tǒng)參數(shù)設(shè)定,參照說(shuō)明書(shū)
          ch451_write(0x401);
          //顯示參數(shù)設(shè)定,
          ch451_write(0x580);
          //第六位顯示6
          ch451_write(CH451_DIG5|6);
          //第8位顯示8
          ch451_write(CH451_DIG7|8);
          }



          關(guān)鍵詞: CH451使用總

          評(píng)論


          技術(shù)專(zhuān)區(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); })();