自在自线亚洲а∨天堂在线-中文字幕一区视频播放-扒开双腿猛进入喷水高潮叫声-欧美日本亚洲一区二区-老熟妇高潮偷拍一区二区-国产精品高清一区二区不卡-午夜色福利视频一区二区三区-亚洲国产成人精品福利在线观看-亚洲欧美成人一区二区在线电影

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
MSP430與PCF8576驅(qū)動(dòng)程序(可以借鑒IIC的使用方法)
MSP430與PCF8576驅(qū)動(dòng)程序(可以借鑒IIC的使用方法)
 更新時(shí)間:2008-7-26 20:30:19  點(diǎn)擊數(shù):3
【字體: 字體顏色
#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 表示被控器無(wú)應(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 表示被控器無(wú)應(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)核打開(kāi)+采樣保持時(shí)間系數(shù)(2)+選擇內(nèi)部參考電壓+打開(kāi)內(nèi)部參考電壓發(fā)生器
    ADC12CTL1=SHP+CONSEQ_2+SHS_1;
    //采樣觸發(fā)源來(lái)自采樣定時(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;    //開(kāi)中斷允許-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模式,開(kāi)中斷允許,等待延時(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<ByteCnt;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<ByteCnt;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++;
}

}*/
  • 上一篇: MSP430F149實(shí)現(xiàn)讀單路單次A7然后進(jìn)行數(shù)值顯示轉(zhuǎn)
  • 下一篇: 一個(gè)adc例子for msp430
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1