在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > msp430單片機+HD7279A控制數(shù)碼管(IAR環(huán)境)

        msp430單片機+HD7279A控制數(shù)碼管(IAR環(huán)境)

        作者: 時間:2016-11-29 來源:網(wǎng)絡 收藏

        /***************************************************************************
        IAR環(huán)境,HD7279A,P4.0~CS,P4.1~CLK,P4.2~DATA,P4,3~KAY,
        DATA為串口數(shù)據(jù)口,時序圖如下:
        CS: ---------_________________________--------
        CLK: ___________---___---___---___---__________
        DATA: ---------~~~---~~~---~~~~---~~~-----------
        430將顯示數(shù)據(jù)一次性送到7279,再由7279顯示
        通過定時器TimerA將數(shù)值不斷改變,當主函數(shù)發(fā)現(xiàn)數(shù)值改變后,再將新的數(shù)值寫到
        HD7279A中,這樣便起到了節(jié)約CPU資源的作用。數(shù)值由數(shù)碼管顯示,由于HD7279含有
        寄存器的原因,所以只單片機將要顯示的數(shù)字和位置的信息傳給HS7279A即可顯示,而
        無需單片機掃描。原創(chuàng)作品版權所有:http://www.51hei.com
        ***************************************************************************/

        本文引用地址:http://www.biyoush.com/article/201611/323507.htm

        #include "msp430x15x.h"

        #define DATADIR P4DIR // 定義端口方向
        #define DATAOUT P4OUT // 定義輸出端口

        #define CS_L DATAOUT &= ~BIT0; // 7279的片選輸出低電平
        #define CLK_L DATAOUT &= ~BIT1; // 7279的時鐘輸出低電平
        #define DATA_L DATAOUT &= ~BIT2; // 7279的數(shù)據(jù)輸出低電平

        #define CS_H DATAOUT |= BIT0; // 7279的片選輸出高電平
        #define CLK_H DATAOUT |= BIT1; // 7279的時鐘輸出高電平
        #define DATA_H DATAOUT |= BIT2; // 7279的數(shù)據(jù)輸出高電平

        #define DP 0X80 // 顯示小數(shù)點
        #define CMD_REST 0XA4 // 7279的復位命令
        #define CMD_LEFT 0XA1 // 7279的左移位命令
        #define CMD_RIGHT 0XA0 // 7279的讀緩沖命令

        #define CMD_MODE_1 0X80 // 按方式0譯碼
        #define CMD_MODE_2 0XC8 // 按方式1譯碼
        #define CMD_MODE_3 0X90 // 輸入數(shù)據(jù)不譯碼

        #define CMD_SHOW 0X88 // 閃爍

        typedef unsigned int uint16;

        char tab_num[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
        0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};

        uint16 tym,tym_delay;

        void delay_nop(uint16 u) // 延時多少個機器周期
        {
        for(;u>0;u--)
        _NOP();
        }

        void Send_1_byte(char send) // 發(fā)送一個字節(jié)
        {
        char temp,i;
        CS_L; // 置低片選信號
        for(i=0;i<8;i++)
        {
        temp = send & 0x80; // 發(fā)送高位
        if(temp!=0) {DATA_H;}
        else {DATA_L;}
        CLK_H; // 置高時鐘位
        send <<= 1; // 左移一位
        CLK_L; // 置低時鐘位
        }
        CS_H; // 置高片選信號
        }

        void Send_2_byte(char send1,char send2) // 發(fā)送兩個字節(jié)
        {
        char temp,i;
        CS_L;
        for(i=0;i<16;i++)
        {
        if(i<8) temp = send1 & 0x80; // 發(fā)送高位
        else temp = send2 & 0x80;
        if(temp!=0) {DATA_H;} // 如果不為0,輸出高電位
        else {DATA_L;} // 如果為0,則輸出低電位
        CLK_H; // 置高時鐘位
        if(i<8) send1 <<= 1; // 左移一位
        else send2 <<= 1;
        CLK_L; // 置低時鐘位
        if(i==7) _NOP();
        }
        CS_H; // 置高片選信號
        }

        void Write7279()
        {
        // char i;
        // Send_1_byte(0xbf); // 用于測試
        // Send_1_byte(0xa4); //復位指令
        Send_2_byte(CMD_MODE_2|0X03,tab_num[tym/1000]); // 取千位
        Send_2_byte(CMD_MODE_2|0X02,tab_num[tym/100%10]); // 取百位
        Send_2_byte(CMD_MODE_2|0X01,tab_num[tym/10%10]); // 取十位
        Send_2_byte(CMD_MODE_2|0X00,tab_num[tym%10]); // 取個位
        // Send_1_byte(0xa1); //左移指令

        }

        void main( void )
        {
        uint16 ram;
        // Stop watchdog timer to prevent time out reset
        WDTCTL = WDTPW + WDTHOLD;
        TACTL = TASSEL_1 + TACLR + MC_1; // + TAIE 時鐘源MCLK,增計模式,開總中斷,清除定時器
        CCTL0 |= CCIE; //允許中斷
        CCR0 = 2000; //設置寄存器的值
        // _EINT(); //溢出中斷
        _BIS_SR(GIE); //開總中斷

        DATADIR = 0X07;
        ram = tym; //使兩者的值相等
        Write7279(); //顯示初始化
        while(1)
        {
        if(ram!=tym) //當tym的值有變動時,調用7279
        {
        Write7279(); //顯示新數(shù)值
        ram = tym; //使ram和tym的值相同,以確定下一次tym的值的變動
        }
        delay_nop(1); //延時一個機器周期
        }
        }

        #pragma vector = TIMERA0_VECTOR
        __interrupt void Timer_A0(void)
        {
        tym_delay++; //進入中斷tym_delay的值加一
        if(tym_delay>=20) {tym++;tym_delay=0;} //當tym_delay為20時,tym加一
        if(tym>1000) tym = 0; //當tym為1000時清零
        }



        評論


        技術專區(qū)

        關閉
        ×

        “芯”朋友见面大会
        珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>