新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > CH451的使用總結

        CH451的使用總結

        作者: 時間:2016-11-17 來源:網絡 收藏
        最近單片機學習進度到數碼管顯示。我用的學習板,是用CH451芯片來驅動數碼管顯示的。剛看CH451技術資料時,被抽象的解釋和大量的信息難住了,并不能很好的理解CH451的工作過程。重新學習了CH451技術資料,花了半天時間才把它控制數碼管的原理摸透。以下是我的學習總結。

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

        本文引用地址:http://www.104case.com/article/201611/315468.htm

        它的功能特點有:

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

        必須先知道單片機是如何與CH451通訊的。請看下圖:

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

        1芯片初試化

        CH451默認選擇1線串行接口,需要在DCLK串行時鐘輸入之前,在P1^0口(假設P1^0接DIN;P1^1接DCLK; P1^2接LOAD)輸出一個低電平脈沖(由高電平變?yōu)榈碗娖皆倩謴蜑楦唠娖剑ㄗⅲ焊皆?strong>keil c實現該功能的代碼)通知CH451選擇4線串行接口。

        附:

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

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

        {

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

        }

        2 輸送串行數據

        芯片初始化后,開始輸送串行數據。CH451 的各個操作命令均為12 位,即每個操作命令對應12 位串行數據,數據輸入的順序是低位在前,高位在后,如B11B10~~~B0,最后一位B0先進入。串行數據輸入 ch451過程可總結如下:

        ① 輸出一位數據,即向DIN 輸出最低位數據B0,并向DCLK 輸出低電平脈沖(從高
        電平變?yōu)榈碗娖皆倩謴蜑楦唠娖剑渲邪ㄒ粋€上升沿使CH451 輸入位數據;
        ② 以同樣的方式,輸出位數據B1~B11;
        ③ 向LOAD 輸出低電平脈沖,其中包括一個上升沿使CH451 加載串行數據。

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

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

        注意:command>>=1為右移一位,其左邊高位補0;類似 command<<=1為左移一位,其右邊最高位補0。

        ch451_load=1; /*加載數據*/
        上述過程可以用電平的變化來描述(如下圖):

        3 操作命令

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

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

        開始輸送12位串行數據。

        首先送“設定系統參數”命令。設定系統參數命令用于設定CH451 的系統級參數:看門狗使能WDOG,鍵盤掃描使能KEYB,顯示驅動使能DISP。各個參數均通過1 位數據控制,將相應的數據位置為1 則啟用該功能,否則關閉該功能(默認值)。例如,命令數據010000000101B 表示啟用看門狗的功能、關閉鍵盤掃描的功能、啟用顯示掃描驅動的功能。

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

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

        完整的數碼管顯示程序如下所示:

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

        ch451_init();
        //系統參數設定,參照說明書
        ch451_write(0x401);
        //顯示參數設定,
        ch451_write(0x580);
        //第六位顯示6
        ch451_write(CH451_DIG5|6);
        //第8位顯示8
        ch451_write(CH451_DIG7|8);
        }



        關鍵詞: CH451使用總

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 云安县| 长宁区| 津市市| 观塘区| 普兰店市| 孝昌县| 永宁县| 南丰县| 宁陵县| 嘉峪关市| 青冈县| 台安县| 安阳市| 衡阳县| 台山市| 北流市| 中山市| 清丰县| 民丰县| 松桃| 西乌| 茂名市| 寿宁县| 吉林市| 札达县| 夏津县| 太谷县| 宽城| 桐庐县| 昭苏县| 茶陵县| 页游| 富锦市| 邻水| 体育| 石台县| 招远市| 肇庆市| 兴安县| 安塞县| 克什克腾旗|