機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
F149+AD+PCF8576CT顯示程序
F149+AD+PCF8576CT顯示程序
 更新時間:2009-12-3 16:36:08  點擊數(shù):0
【字體: 字體顏色
分享MSP430F149配合PCF8576CT做AD轉換液晶顯示--程序
這只是實驗程序,盡供參考!
//MSP430F149與液晶驅動芯片PCF8576CT的連接程序
#include  "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
unsigned int A[8];
uchar PCF8576=0x70;//器件地址
//內存數(shù)據(jù)定義
uchar ByteCnt;  //I2C 數(shù)據(jù)字節(jié)計數(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;
float d_data;
float v_data;
float vcc;
uchar n=0;
uchar i;
uint j;
uchar k;
uchar tmp[5];
#define SDA   BIT3      // P2.3 controls SDA line (pull-up used for logic 1)
#define SCL   BIT4      // P2.4 controls SCL line (pull-up used for logic 1)
/******************************************************************************
; 子程序
;名稱:START
;描述:啟動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;
}
/*----------------------------------------------------------------------
; 子程序
;名稱:cack
;描述:應答位檢查
;---------------------------------------------------------------------*/
void cack(void) /* 應答位檢查 */
{
P2OUT |= SDA;
P2OUT |= SCL;
P2DIR &= ~SDA;
_NOP();
P2OUT &= ~SCL;
P2DIR |= SDA;
}
/*----------------------------------------------------------------------
; 子程序
;名稱:delay
;描述:延遲
;---------------------------------------------------------------------*/
void delay(uchar time)
{
uchar i;
do{
for(i=100;i!=0;i--);
  } while(--time!=0);
}
/*----------------------------------------------------------------------
;名稱:SendByte
;描述:字節(jié)數(shù)據(jù)傳送子程序發(fā)送一個字節(jié)數(shù)據(jù)或地址給被控器PCF8576
;要發(fā)送的數(shù)據(jù)在ACC 中
;發(fā)送數(shù)據(jù)正常返回標志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();   //應答位檢查
}
/***********************************************************
;發(fā)送數(shù)據(jù)程序
;名稱:Display_Data
;描述:發(fā)送ByteCnt 個字節(jié)給被控器PCF8576
;被控器地址在SlvAdr 中單元地址在SubAdr 中
;所發(fā)送數(shù)據(jù)的字節(jié)數(shù)ByteCnt 在中發(fā)送的數(shù)據(jù)在XmtDat 緩沖區(qū)中
;發(fā)送數(shù)據(jù)正常返回標志F0=0 F0=1 表示被控器無應答或損壞
;**********************************************************/
void Display_Data(void)
{
uchar i=0;
uchar size=ByteCnt;
START(); //發(fā)送I2C 總線起始條件
SendByte(SlvAdr); //發(fā)送被控器總線地址(數(shù)據(jù)起始地址)
SendByte(SubAdr); //發(fā)送單元地址(從地址)
// SendByte(0x73); //閃爍方式為正常,閃爍頻率為0.5Hz 的命令字送緩沖區(qū)首址,
//如果不需要閃爍應將數(shù)#70H 送入緩沖區(qū)首址
SendByte(0x70); //不閃爍
do
  {
   SendByte(XmtDat); //發(fā)送數(shù)據(jù)
   i++;
  } while(--size!=0);
 
STOP();  //停止I2C 總線
delay(100);   //延遲
}
/***********************************************************
;清除
***********************************************************/
void ClearLcd(void)
{
uchar size=ByteCnt;
START();           //啟動I2C 總線
SendByte(SlvAdr);  //送器件地址
SendByte(SubAdr);  //發(fā)送單元地址
SendByte(0x70);
do
{
  SendByte(0x00); //發(fā)送數(shù)據(jù)
} while(--size!=0);
STOP();           //停止I2C 總線
delay(100);       //延遲
}
/***********************************************************
發(fā)送方式命令字
***********************************************************/
void PCF8576SET(void)
{
START();              //發(fā)送I2C 總線起始條件
SendByte(SlvAdr);     //送器件地址
SendByte(MODE2);      //取方式命令字
SendByte(Bank_sel);
STOP();               //停止I2C 總線
}
/***********************************************************
主程序
***********************************************************/
void main(void)
{
P2DIR |= SDA; //SDA輸出
P2DIR |= SCL; //SCL輸出
P2OUT &= ~SDA;  //SDA=0
P2OUT &= ~SCL;  //SCL=0
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;  //位設置
PCF8576SET();//設置方式
ClearLcd();  //清空
//**************AD轉換^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
P6SEL|=0x01;                    //使能A/D通道A0(P6.0)
ADC12CTL0=ADC12ON+SHT0_2+MSC+REFON+REF2_5V;   //打開ADC12、8倍ADC12CLK、多次轉換
ADC12CTL1=SHP+CONSEQ_2;         //多次采樣、單通道多次轉換模式
ADC12MCTL0=0x10;                //參考電壓Vref+、AVss
ADC12IE=0x01;                   //使能中斷ADC12IFG.0
ADC12CTL0|=ENC;                 //使能轉換
_EINT();                        //中斷允許                      
ADC12CTL0|=ADC12SC;             //開始轉換
_BIS_SR(LPM0_bits);             //進入低功耗LPM0模式
}
//----------------------------------
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)//ADC中斷處理程序
{
A[n]=ADC12MEM0;
n++;
if(n==8)
{
d_data=(A[0]+A[1]+A[2]+A[3]+A[4]+A[5]+A[6]+A[7])/8;
n=0;
vcc=2627;
v_data=vcc/4095;

tmp_data=v_data*d_data;
for(i=0;i<ByteCnt;i++)  //數(shù)據(jù)的每一位送到相應的緩存位
   {
   k=tmp_data%10;
   tmp_data=tmp_data/10;
XmtDat=Digit[k];
tmp=k;
   }
for(i=ByteCnt-1;i!=0;i--)  //數(shù)值為0時不顯示(減少功耗)
   {
   if( tmp == 0 )
   XmtDat=0x00;
   else
   break;
   }
XmtDat[4] |= 0x40;
Display_Data();
 }
}
  • 上一篇: 單片機的狀態(tài)遷移與復位操作
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

    網站經營許可證:浙B2-20080178-1