新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430單片機(jī)實(shí)踐篇-數(shù)碼管顯示-74HC595動(dòng)態(tài)掃描

        MSP430單片機(jī)實(shí)踐篇-數(shù)碼管顯示-74HC595動(dòng)態(tài)掃描

        作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
        一、學(xué)習(xí)要點(diǎn):
        利用74HC595進(jìn)行數(shù)碼管顯示,可以只占用3個(gè)單片機(jī)的I/O口就能完成數(shù)碼管顯示的功能。動(dòng)態(tài)掃描方式則進(jìn)一步節(jié)省了硬件資源,只使用2個(gè)74HC595就能顯示多達(dá)8位數(shù)碼管。
        二、程序執(zhí)行效果:
        本實(shí)驗(yàn)所需使用的硬件電路為2個(gè)試驗(yàn)板:MSP430F135核心實(shí)驗(yàn)板+8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊
        將MSP430F135核心實(shí)驗(yàn)板上的P5.4、P5.2、P5.0分別與8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊上的 LATCH、CLK、 DOUT連接,并將8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊上的GND、VCC連接好。如下圖
        P5.0—— DOUTP5.2——CLKP5.4—— LATCH

        如下圖所示:在8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊上的8個(gè)數(shù)碼管上顯示數(shù)字 4 3 2 1。本例中只使用了其中的4位數(shù)碼管,讀者可進(jìn)行簡單的更改使其顯示達(dá)到8位。

        三、原理講解:
        查看8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊的原理。如圖所示,2片74HC595分別用于段碼與位碼的輸出。實(shí)驗(yàn)板上數(shù)碼管為共陽,因此當(dāng)位碼為1、段碼為0時(shí)點(diǎn)亮。
        動(dòng)態(tài)掃描的原理:輸出第1位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第1位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。輸出第2位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第2位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。輸出第3位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第3位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。。。。輸出第8位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第8位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。如此循環(huán)往復(fù),實(shí)現(xiàn)8位數(shù)碼管顯示的效果。
        四、操作步驟:
        (1)按照IAR MSP430 項(xiàng)目建立與JTAG仿真設(shè)置所講方法建立名稱為 M13x LED 595 的項(xiàng)目。(2)將如下程序拷貝粘貼到main.c文件中。
        //*******************************************************************************//// 描述; 在TY-DIS1(8位數(shù)碼管顯示模塊)上動(dòng)態(tài)掃描顯示 4321// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k//// 硬件連接:如下圖// MSP430F13x// -----------------// /|| XIN|- // | | |// --|RST XOUT|-// | |// | P5.0|-->LED_DOUT// | P5.2|-->LED_CLK// | P5.4|-->LED_LATCH//// 時(shí)間:2007年10月// 硬件電路:MSP430F135核心實(shí)驗(yàn)板-I型 + TY-DIS1(8位數(shù)碼管顯示模塊)// 硬件連接: //// 調(diào)試器:MSP430FET全系列JTAG仿真器// 調(diào)試軟件: IAR Embedded Workbench Version: 3.41A 編譯//******************************************************************************
        #include <msp430x13x.h>
        //4位LED數(shù)碼管顯示子程序
        void LED_595(char SMG1,char SMG2,char SMG3,char SMG4);
        //74HC595串行輸出子程序
        void Led_out(unsigned char X);
        //LED數(shù)碼管段碼轉(zhuǎn)換表
        const unsigned char LED_0_F[];
        void main(void)
        {WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
        P5DIR =0; //P5口全部設(shè)為輸入口
        P5SEL =0; //將P5口所有的管腳設(shè)置為一般I/O口
        //將P5.0 P5.2 P5.4設(shè)置為輸出方向
        P5DIR |= BIT0;P5DIR |= BIT2;P5DIR |= BIT4;
        for (;;) {LED_595(4,3,2,1);//調(diào)用顯示子程序(改變參數(shù)表,改變顯示內(nèi)容)
        }
        }
        //------------------------------------------------------
        // 4位LED數(shù)碼管顯示子程序//
        // 人口參數(shù):SMG1,SMG2,SMG3,SMG4——待顯示的數(shù)據(jù)
        //void LED_595(char SMG1,char SMG2,char SMG3,char SMG4)
        {char z;//最高位(最左側(cè))LED數(shù)碼管顯示---------------------
        z = LED_0_F[SMG1];
        Led_out(z); //段碼輸出
        z = 0xFE; //位碼
        Led_out(z); //位碼輸出
        P5OUT &=~(BIT4); //顯示輸出
        P5OUT |=BIT4;
        //--------------------------------------------------
        _NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
        //次高位(左數(shù)第2個(gè))LED數(shù)碼管顯示---------------------
        z = LED_0_F[SMG2];
        Led_out(z); //段碼輸出
        z = 0xFD; //位碼
        Led_out(z); //位碼輸出
        P5OUT &=~(BIT4); //顯示輸出
        P5OUT |=BIT4;
        //--------------------------------------------------
        _NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
        //次低位(左數(shù)第3位)LED數(shù)碼管顯示--------------------
        z = LED_0_F[SMG3];Led_out(z); //段碼輸出
        z = 0xFB; //位碼
        Led_out(z); //位碼輸出
        P5OUT &=~(BIT4); //顯示輸出
        P5OUT |=BIT4;//--------------------------------------------------
        _NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
        //最低位(左數(shù)第4位)LED數(shù)碼管顯示---------------------
        z = LED_0_F[SMG4];Led_out(z); //段碼輸出
        z = 0xF7; //位碼
        Led_out(z); //位碼輸出
        P5OUT &=~(BIT4); //顯示輸出
        P5OUT |=BIT4;//--------------------------------------------------
        _NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
        }
        //------------------------------------------------------
        // 用于74HC595的LED串行移位子程序//
        // 人口參數(shù):X——待輸出的數(shù)據(jù)//
        void Led_out(unsigned char X)
        {unsigned char i;for(i=8;i>0;i--)
        {if (X&0x80) P5OUT |=BIT0;
        else P5OUT &=~(BIT0);X<<=1;
        P5OUT &= ~(BIT2); //P5.2管腳輸出低電平
        P5OUT |= BIT2; //P5.2管腳輸出高電平
        }
        }
        //------------------------------------------------------
        // LED段碼轉(zhuǎn)換表0——F
        //------------------------------------------------------
        const unsigned char LED_0_F[] =
        {// 0 1 2 3 4 5 6 7 8 9 A b c d E F 不顯示 - o(18)H(19)h(20)C(21)0(22)n(23)
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab
        };
        (3)按照IAR MSP430 項(xiàng)目編譯與JTAG仿真調(diào)試所講述方法進(jìn)行項(xiàng)目編譯與JTAG調(diào)試運(yùn)行,即可看到程序運(yùn)行效果。


        評論


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

        關(guān)閉
        主站蜘蛛池模板: 江陵县| 广饶县| 江北区| 平阴县| 綦江县| 武夷山市| 繁峙县| 凌源市| 平南县| 石狮市| 博客| 泌阳县| 武胜县| 绥江县| 班玛县| 睢宁县| 惠来县| 万山特区| 陕西省| 堆龙德庆县| 晋城| 石狮市| 岳西县| 行唐县| 锡林郭勒盟| 郯城县| 克东县| 珲春市| 怀仁县| 同德县| 利津县| 达拉特旗| 溧水县| 阿鲁科尔沁旗| 淮安市| 电白县| 富锦市| 卫辉市| 永善县| 鲜城| 南城县|