專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

ADC0832模數(shù)轉(zhuǎn)換MSP430單片機(jī)程序+電路圖

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年11月06日   【字體:

下面是電路圖:


 


                ADC0832封裝圖         


ADC0832與單片機(jī)連接圖



ADC0832時(shí)序圖

程序源碼下載: http://www.torrancerestoration.com/f/0832430.rar
#include<msp430f2121.h>
#define DO (P1IN&BIT7)
#define uchar unsigned  char
#define uint unsigned int
/***********************************************
sbit cs=P2^0;
sbit clk=P2^1;
sbit DI=P2^2;
sbit DO=P2^6;
*************************************************/
uint adval;
uchar temp;
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint ms)
{     
   uchar j;
   while(ms--)
   {
     for(j=0;j<120;j++);
   }

void ADC_start()
{
 P2OUT|=BIT0;//cs=1
 _NOP();
 P2OUT&=~BIT1;//clk=0
 _NOP();
 P2OUT&=~BIT0;//cs=0
 _NOP();
 P2OUT|=BIT2;//DI=1
 _NOP();
 P2OUT|=BIT1;//clk=1
 _NOP();
 P2OUT&=~BIT2;//DI=0;
 _NOP();
 P2OUT&=~BIT1;//clk=0;
 _NOP();
}
void ADC_read(uint CH)
{
  uchar i;
  ADC_start();
  if(CH==0)   //選擇通道0
        {
          P2OUT|=BIT2;// DI=1;
          P2OUT |=BIT1;//clk=1;       
          _NOP();
          _NOP();
          P2OUT &=~BIT1;//clk=0;//第一個下降沿來DI=1
          _NOP();
          _NOP();
           P2OUT |=BIT2;//DI=0;
           P2OUT |=BIT1;//clk=1;
          _NOP();
          _NOP();        
          P2OUT&=~BIT1;//clk=0;//第二個下降沿來DI=0,DI兩次為10,選ch0通道
          _NOP();
          _NOP();
        }
        else       //選擇通道1
         {
          P2OUT|=BIT2;// DI=1;
          P2OUT |=BIT1;//clk=1;       
          _NOP();
          _NOP();
          P2OUT &=~BIT1;//clk=0;//第一個下降沿來DI=1
          _NOP();
          _NOP();
           P2OUT |=BIT2;//DI=1;
           P2OUT |=BIT1;//clk=1;
          _NOP();
          _NOP();        
          P2OUT&=~BIT1;//clk=0;//第二個下降沿來DI=0,DI兩次為11,選ch1通道
          _NOP();
          _NOP();
          }
  /****************下降沿讀數(shù)據(jù)*******************/
          P2OUT|=BIT1;//clk=1;
          _NOP();
          P2OUT&=~BIT1;//clk=0;再來下降沿讀書
          for(i=0;i<8;i++)
          {
             P2OUT|=BIT2;// DI=1;
              if(DO)  // 判斷DO;
                {
                 temp |=0x01;
                }
             else
                {
                 temp &=0xfe;
                }
             P2OUT&=~BIT1;//clk=0;
             _NOP();
             _NOP();
              P2OUT|=BIT1;//clk=1;//上升沿來,左移1位
             temp=temp<<1;
           }
   adval=temp;
 }
/********顯示數(shù)據(jù)********************************/
void display(uint dat)
{   
   P2OUT &=~BIT3;//關(guān)閉個位顯示P2.3
   P2OUT &=~BIT4;//關(guān)閉十位顯示P2.4
   P2OUT |=BIT5;//開啟百位顯示P2.5
   P1OUT=tab[dat/100];
   delay(1);
   P1OUT=0xff;
   P2OUT &=~BIT3;//關(guān)閉個位顯示P2.3
   P2OUT |=BIT4;//開啟十位顯示P2.4
   P2OUT &=~BIT5;//關(guān)閉百位顯示P2.5
   P1OUT=tab[(dat%100)/10];
   delay(1);
   P1OUT=0xff;
   P2OUT |=BIT3;//開啟個位顯示P2.3
   P2OUT &=~BIT4;//關(guān)閉十位顯示P2.4
   P2OUT &=~BIT5;//關(guān)閉百位顯示P2.5
   P1OUT=tab[dat/10];
   delay(1);
   P1OUT=0xff;
}
void main()
{
 
  WDTCTL = WDTPW + WDTHOLD;
  P2DIR =0x3f; 
  P1DIR|=0x7f;
   while(1)
   {
         ADC_read(0);
         delay(1);
         display(adval);
   }
}
關(guān)閉窗口

相關(guān)文章