男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
MSP430與PCF8576驅動程序(可以借鑒IIC的使用方法)
MSP430與PCF8576驅動程序(可以借鑒IIC的使用方法)
 更新時間:2008-7-26 20:30:19  點擊數: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;//器件地址
//內存數據定義
uchar ByteCnt;  //I2C 數據字節計數器
uchar SlvAdr; //被控器地址
uchar SubAdr; //被控器單元地址
uchar XmtDat[5]; //發送數據緩沖區
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
;描述:啟動I2C 總線子程序--發送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 總線子程序--發送I2C 總線停止條件
;-------------------------------------------------------------------------*/
void STOP(void)
{
P2OUT &= ~SDA; //SDA=0
_NOP();
P2OUT |= SCL;
_NOP();
P2OUT |= SDA;
_NOP();
P2OUT &= ~SCL;
}

void cack(void) /* 應答位檢查 */
{
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
;描述:字節數據傳送子程序發送一個字節數據或地址給被控器PCF8576
;要發送的數據在ACC 中
;發送數據正常返回標志F0=0 F0=1 表示被控器無應答或損壞
;------------------------------------------------------------------------*/
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();

}

/***********************************************************
;發送數據程序
;名稱:SendData
;描述:發送ByteCnt 個字節給被控器PCF8576
;被控器地址在SlvAdr 中單元地址在SubAdr 中
;所發送數據的字節數ByteCnt 在中發送的數據在XmtDat 緩沖區中
;發送數據正常返回標志F0=0 F0=1 表示被控器無應答或損壞
;**********************************************************/
void Display_Data(void)
{
uchar i=0;
uchar size=ByteCnt;

START(); //發送I2C 總線起始條件

SendByte(SlvAdr); //發送被控器總線地址

SendByte(SubAdr); //發送單元地址

// SendByte(0x73); //閃爍方式為正常,閃爍頻率為0.5Hz 的命令字送緩沖區首址,
//如果不需要閃爍應將數#70H 送入緩沖區首址
SendByte(0x70); //不閃爍


do
  {
  SendByte(XmtDat); //發送數據
  i++;
  } while(--size!=0);
 
STOP();

delay(100);
}

void ClearLcd(void)
{
uchar size=ByteCnt;

START(); //啟動I2C 總線

SendByte(SlvAdr); //送器件地址

SendByte(SubAdr); //發送單元地址

SendByte(0x70);

do
{
  SendByte(0x00); //發送數據
} 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;                //設置P6.0為模擬輸入通道
   
    ADC12CTL0 &= ~(ENC);          //設置ENC為0,從而修改ADC12寄存器的值
    ADC12CTL0=ADC12ON+SHT0_1+REF2_5V+REFON;
    //AD內核打開+采樣保持時間系數(2)+選擇內部參考電壓+打開內部參考電壓發生器
    ADC12CTL1=SHP+CONSEQ_2+SHS_1;
    //采樣觸發源來自采樣定時器,由采樣輸入信號(ADC12CLK)的上升沿觸發采樣定時器
    //+單通道多次采樣+采樣觸發源Time_A的輸出單元out1輸出的信號(由ccr1定時器產生)
    ADC12MCTL0=INCH_0+SREF_1;
    // 選擇AD通道0+正參考電壓=Vref,負參考電壓源AVss;
    ADC12IE=0x0001;    //開中斷允許-ADC12IFG.0;
    TACCR0=1500;
    TACCTL0|=CCIE; //TA 為比較模式(TA和CCRO比較),TA中斷允許
   
    TACTL=TASSEL_1|MC_1;  //TACLK=ACLK,定時器A為增計數模式
    _BIS_SR(LPM3_bits+GIE); //進入LPM3模式,開中斷允許,等待延時時間結束
   
    TACCTL0&=~CCIE;
   
    P2SEL|=BIT3; //設P2.3為Time_A out1 輸出功能
    P2DIR|=0x08; // 設P2.3為輸出
    TACCR0=7;  //初始化TACCR0,采樣時鐘源周期=CCR0J+1;
   
    TACCR1=4;// TACCR1, TimerA,out1 ADc12
   
    TACCTL1=OUTMOD_3;//CCR1 OUT1
   
    TACTL=TACLR|MC_1|TASSEL_1;//  定時器時鐘=ACLK,清除TA,增計數模式
}

/****************************************************************************
;Time_A0 CCR0中斷服務程序
***************************************************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
  TACTL=0;
  LPM3_EXIT;
}

/*****************************************************************************
;ADC12中斷服務程序
***************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  static unsigned int index=0; //靜態變量 
 
results[index]=ADC12MEM0; //移動ADC結果去往results數組


}
  */

  /***********************************************************
主程序
***********************************************************/

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;  //數據起始地址(總線地址)
SlvAdr=PCF8576;//總線從地址
ByteCnt=5;  //位設置
PCF8576SET();//設置方式
AD_Init();
ADC12CTL0|=ENC;//使能轉換
//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;        //轉換的起始地址為:ADCMEM0
    ADC12MCTL0 = INCH_0 + EOS;    //設置參考電壓分別為AVSS和AVCC,輸入通道為A0
           
    ADC12CTL0 |= ADC12ON;
    ADC12CTL0 |= MSC;
   
   
    ADC12CTL1 |= CONSEQ_1;        //轉換模式為:多通道、單次轉換
   
    ADC12CTL1 |= ADC12SSEL_1;        //SMCLK
    ADC12CTL1 |= ADC12DIV_0;        //時鐘分頻為1
    ADC12CTL1 |= (SHP);              //采樣脈沖由采用定時器產生
               
    ADC12CTL0 |= ENC;              //使能ADC轉換
    return;
}
void Init_TimerA(void)
{
    TACTL = TASSEL1 + TACLR;      // 選擇SMCLK,清除TAR
    TACTL += ID1;                 
    TACTL += ID0;                // 1/8 SMCLK
    CCTL0 = CCIE;                // CCR0 中斷允許
    CCR0 = 4000;              // 時間間隔為 250Hz
    TACTL |= MC0;              // 增記數模式
   
    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實現讀單路單次A7然后進行數值顯示轉
  • 下一篇: 一個adc例子for msp430
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 兴义市| 陇西县| 临沭县| 安阳市| 宁陕县| 江北区| 磐安县| 吴桥县| 兴城市| 五指山市| 阜新| 唐海县| 阿巴嘎旗| 津市市| 随州市| 湖北省| 武穴市| 溧水县| 长宁区| 榆中县| 西峡县| 霍州市| 靖西县| 井研县| 永安市| 都江堰市| 双峰县| 陈巴尔虎旗| 新丰县| 乐业县| 洛浦县| 南通市| 东港市| 天全县| 琼结县| 云梦县| 萨迦县| 色达县| 洛川县| 库尔勒市| 平武县|