在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計(jì)應(yīng)用 > MSP430與PCF8576驅(qū)動(dòng)程序(可以借鑒IIC的使用方法)

        MSP430與PCF8576驅(qū)動(dòng)程序(可以借鑒IIC的使用方法)

        作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
        #i nclude "msp430x14x.h"
        #define uint unsigned int
        #define uchar unsigned char
        #define Num_of_Results 8
        unsigned int results[Num_of_Results];
        uchar PCF8576=0x70;//器件地址
        //內(nèi)存數(shù)據(jù)定義
        uchar ByteCnt; //I2C 數(shù)據(jù)字節(jié)計(jì)數(shù)器
        uchar SlvAdr; //被控器地址
        uchar SubAdr; //被控器單元地址
        uchar XmtDat[5]; //發(fā)送數(shù)據(jù)緩沖區(qū)
        uchar MODE2=0xCD;
        uchar Bank_sel=0x78;
        uchar flag;
        uchar Digit[10];
        uint tmp_data;
        uchar n=0;
        uchar i;
        uint j;
        uchar k;
        uchar tmp[5];
        #define SDA BIT6 // P2.3 controls SDA line (pull-up used for logic 1)
        #define SCL BIT7 // P2.4 controls SCL line (pull-up used for logic 1)
        /******************************************************************************
        ; 子程序
        ;名稱:START
        ;描述:啟動(dòng)I2C 總線子程序--發(fā)送I2C 起始條件
        ;;*****************************************************************************/
        void START(void)
        {
        P2OUT |= SDA; //SDA=1
        _NOP();
        P2OUT |= SCL; //SCL=1
        _NOP();
        P2OUT &= ~SDA; //SDA=0
        _NOP();
        P2OUT &= ~SCL; //SCL=0
        }
        /*--------------------------------------------------------------------------
        ;名稱:STOP
        ;描述:停止I2C 總線子程序--發(fā)送I2C 總線停止條件
        ;-------------------------------------------------------------------------*/
        void STOP(void)
        {
        P2OUT &= ~SDA; //SDA=0
        _NOP();
        P2OUT |= SCL;
        _NOP();
        P2OUT |= SDA;
        _NOP();
        P2OUT &= ~SCL;
        }
        void cack(void) /* 應(yīng)答位檢查 */
        {
        P2OUT |= SDA;
        P2OUT |= SCL;
        P2DIR &= ~SDA;
        _NOP();
        P2OUT &= ~SCL;
        P2DIR |= SDA;
        }
        void delay(uchar time)
        {
        uchar i;
        do{
        for(i=100;i!=0;i--);
        } while(--time!=0);
        }
        /*----------------------------------------------------------------------
        ;名稱:SendByte
        ;描述:字節(jié)數(shù)據(jù)傳送子程序發(fā)送一個(gè)字節(jié)數(shù)據(jù)或地址給被控器PCF8576
        ;要發(fā)送的數(shù)據(jù)在ACC 中
        ;發(fā)送數(shù)據(jù)正常返回標(biāo)志F0=0 F0=1 表示被控器無應(yīng)答或損壞
        ;------------------------------------------------------------------------*/
        void SendByte(uchar Data)
        {
        uchar i=8;
        do
        {
        if((Data&0x80)==0x80)
        P2OUT |= SDA;
        else
        P2OUT &= ~SDA;

        P2OUT |= SCL;
        _NOP ();
        P2OUT &= ~SCL;
        Data=Data<<1;
        } while(--i!=0);
        cack();
        }
        /***********************************************************
        ;發(fā)送數(shù)據(jù)程序
        ;名稱:SendData
        ;描述:發(fā)送ByteCnt 個(gè)字節(jié)給被控器PCF8576
        ;被控器地址在SlvAdr 中單元地址在SubAdr 中
        ;所發(fā)送數(shù)據(jù)的字節(jié)數(shù)ByteCnt 在中發(fā)送的數(shù)據(jù)在XmtDat 緩沖區(qū)中
        ;發(fā)送數(shù)據(jù)正常返回標(biāo)志F0=0 F0=1 表示被控器無應(yīng)答或損壞
        ;**********************************************************/
        void Display_Data(void)
        {
        uchar i=0;
        uchar size=ByteCnt;
        START(); //發(fā)送I2C 總線起始條件
        SendByte(SlvAdr); //發(fā)送被控器總線地址
        SendByte(SubAdr); //發(fā)送單元地址
        // SendByte(0x73); //閃爍方式為正常,閃爍頻率為0.5Hz 的命令字送緩沖區(qū)首址,
        //如果不需要閃爍應(yīng)將數(shù)#70H 送入緩沖區(qū)首址
        SendByte(0x70); //不閃爍
        do
        {
        SendByte(XmtDat); //發(fā)送數(shù)據(jù)
        i++;
        } while(--size!=0);

        STOP();
        delay(100);
        }
        void ClearLcd(void)
        {
        uchar size=ByteCnt;
        START(); //啟動(dòng)I2C 總線
        SendByte(SlvAdr); //送器件地址
        SendByte(SubAdr); //發(fā)送單元地址
        SendByte(0x70);
        do
        {
        SendByte(0x00); //發(fā)送數(shù)據(jù)
        } while(--size!=0);
        STOP();
        delay(200);
        }
        void PCF8576SET(void)
        {
        START();
        SendByte(SlvAdr); //送器件地址
        SendByte(MODE2); //取方式命令字
        SendByte(Bank_sel);
        STOP();
        }
        /**********************************************************
        ;ad初始化
        *********************************************************/
        void AD_Init(void)
        {
        P6SEL |= 0X01; //設(shè)置P6.0為模擬輸入通道

        ADC12CTL0 &= ~(ENC); //設(shè)置ENC為0,從而修改ADC12寄存器的值
        ADC12CTL0=ADC12ON+SHT0_1+REF2_5V+REFON;
        //AD內(nèi)核打開+采樣保持時(shí)間系數(shù)(2)+選擇內(nèi)部參考電壓+打開內(nèi)部參考電壓發(fā)生器
        ADC12CTL1=SHP+CONSEQ_2+SHS_1;
        //采樣觸發(fā)源來自采樣定時(shí)器,由采樣輸入信號(hào)(ADC12CLK)的上升沿觸發(fā)采樣定時(shí)器
        //+單通道多次采樣+采樣觸發(fā)源Time_A的輸出單元out1輸出的信號(hào)(由ccr1定時(shí)器產(chǎn)生)
        ADC12MCTL0=INCH_0+SREF_1;
        // 選擇AD通道0+正參考電壓=Vref,負(fù)參考電壓源AVss;
        ADC12IE=0x0001; //開中斷允許-ADC12IFG.0;
        TACCR0=1500;
        TACCTL0|=CCIE; //TA 為比較模式(TA和CCRO比較),TA中斷允許

        TACTL=TASSEL_1|MC_1; //TACLK=ACLK,定時(shí)器A為增計(jì)數(shù)模
        _BIS_SR(LPM3_bits+GIE); //進(jìn)入LPM3模式,開中斷允許,等待延時(shí)時(shí)間結(jié)束

        TACCTL0&=~CCIE;

        P2SEL|=BIT3; //設(shè)P2.3為Time_A out1 輸出功能
        P2DIR|=0x08; // 設(shè)P2.3為輸出
        TACCR0=7; //初始化TACCR0,采樣時(shí)鐘源周期=CCR0J+1;

        TACCR1=4;// TACCR1, TimerA,out1 ADc12

        TACCTL1=OUTMOD_3;//CCR1 OUT1

        TACTL=TACLR|MC_1|TASSEL_1;// 定時(shí)器時(shí)鐘=ACLK,清除TA,增計(jì)數(shù)模式
        }
        /****************************************************************************
        ;Time_A0 CCR0中斷服務(wù)程序
        ***************************************************************************/
        #pragma vector=TIMERA0_VECTOR
        __interrupt void ta0_isr(void)
        {
        TACTL=0;
        LPM3_EXIT;
        }
        /*****************************************************************************
        ;ADC12中斷服務(wù)程序
        ***************************************************************************
        #pragma vector=ADC_VECTOR
        __interrupt void ADC12ISR(void)
        {
        static unsigned int index=0; //靜態(tài)變量 

        results[index]=ADC12MEM0; //移動(dòng)ADC結(jié)果去往results數(shù)組
        }
        */
        /***********************************************************
        主程序
        ***********************************************************/
        void main(void)
        {
        P2DIR |= SDA; //SDA輸出
        P2DIR |= SCL; //SCL輸出
        P2OUT &= ~SDA; //SDA=0
        P2OUT &= ~SCL; //SCL=0
        P2DIR |=BIT1;
        P2OUT |=BIT1;
        WDTCTL = WDTPW+WDTHOLD;
        Digit[0]=0xFC; //0
        Digit[1]=0x60; //1
        Digit[2]=0xDA; //2
        Digit[3]=0xF2; //3
        Digit[4]=0x66; //4
        Digit[5]=0xB6; //5
        Digit[6]=0xBE; //6
        Digit[7]=0xE0; //7
        Digit[8]=0xFE; //8
        Digit[9]=0xF6; //9
        SubAdr=0x80; //數(shù)據(jù)起始地址(總線地址)
        SlvAdr=PCF8576;//總線從地址
        ByteCnt=5; //位設(shè)置
        PCF8576SET();//設(shè)置方式
        AD_Init();
        ADC12CTL0|=ENC;//使能轉(zhuǎn)換
        //ADC12CTL0|=ADC12SC;
        ClearLcd(); //清空
        }
        //----------------------------------
        #pragma vector=ADC_VECTOR
        __interrupt void ADC12ISR(void)
        {
        static unsigned int index=0;
        results[index]=ADC12MEM0;

        tmp_data=results[index];
        for(i=0;i {
        k=tmp_data%10;
        tmp_data=tmp_data/10;

        XmtDat=Digit[k];
        tmp=k;
        }
        for(i=ByteCnt-1;i!=0;i--)
        {

        if(tmp==0)
        XmtDat=0x00;
        else
        break;
        }
        XmtDat[4] |=0x40;
        Display_Data();
        index=(index+1)%Num_of_Results;
        }
        /*ADC12CTL1 |= CSTARTADD_0; //轉(zhuǎn)換的起始地址為:ADCMEM0
        ADC12MCTL0 = INCH_0 + EOS; //設(shè)置參考電壓分別為AVSS和AVCC,輸入通道為A0

        ADC12CTL0 |= ADC12ON;
        ADC12CTL0 |= MSC;


        ADC12CTL1 |= CONSEQ_1; //轉(zhuǎn)換模式為:多通道、單次轉(zhuǎn)換

        ADC12CTL1 |= ADC12SSEL_1; //SMCLK
        ADC12CTL1 |= ADC12DIV_0; //時(shí)鐘分頻為1
        ADC12CTL1 |= (SHP); //采樣脈沖由采用定時(shí)器產(chǎn)生

        ADC12CTL0 |= ENC; //使能ADC轉(zhuǎn)換
        return;
        }
        void Init_TimerA(void)
        {
        TACTL = TASSEL1 + TACLR; // 選擇SMCLK,清除TAR
        TACTL += ID1;
        TACTL += ID0; // 1/8 SMCLK
        CCTL0 = CCIE; // CCR0 中斷允許
        CCR0 = 4000; // 時(shí)間間隔為 250Hz
        TACTL |= MC0; // 增記數(shù)模式

        return;
        }
        void main(void)
        {
        uint out_data;
        uint tmp_data;
        uchar i;
        uchar k;
        uchar tmp[5];
        P2DIR |= SDA; //SDA
        P2DIR |= SCL; //SCL
        P2OUT &= ~SDA;
        P2OUT &= ~SCL;
        WDTCTL = WDTPW+WDTHOLD;
        Digit[0]=0x7E; //0
        Digit[1]=0x18; //1
        Digit[2]=0xB6; //2
        Digit[3]=0xBC; //3
        Digit[4]=0xD8; //4
        Digit[5]=0xEC; //5
        Digit[6]=0xEE; //6
        Digit[7]=0x38; //7
        Digit[8]=0xFE; //8
        Digit[9]=0xFC; //9
        SubAdr=0x80;
        SlvAdr=PCF8576;
        ByteCnt=4;
        PCF8576SET();
        ClearLcd();
        AD_Init();
        TIME_Init();
        out_data=0;
        while(1)
        {
        tmp_data=out_data;
        for(i=0;i {
        k=tmp_data%10;
        tmp_data=tmp_data/10;

        XmtDat=Digit[k];
        tmp=k;
        }
        XmtDat[2] |= 0x01;
        for(i=ByteCnt-1;i!=0;i--)
        {
        if( tmp == 0 )
        XmtDat=0x00;
        else
        break;
        }
        Display_Data();
        out_data++;
        }
        }*/



        關(guān)鍵詞: MSP430PCF8576II

        評(píng)論


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

        關(guān)閉
        ×

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