歡迎您光臨本站 登入註冊首頁

數模轉換ADC0804的應用實驗

admin @ 2014-03-25 , reply:0

概述

[實驗任務]  從ADC0804的通道IN+輸入0-5V之間的模擬量,通過ADC0804轉換成數字量在數碼管上以十進位形成顯示出來。[實驗原理]  ADC080……

[實驗任務]
   從ADC0804的通道IN+輸入0-5V之間的模擬量,通過ADC0804轉換成數字量在數碼管上以十進位形成顯示出來。

[實驗原理]
   ADC0804是8位全MOS 中速A/D轉換器、它是逐次逼近式A/D轉換器,片內有三態數據輸出鎖存器,可以和單片機直接介面。單通道輸入,轉換時間大約為100us。ADC0804轉換時序是:當CS=0許可進行A/D轉換。WR由低到高時,A/D開始轉換,一次轉換一共需要66-73個時鐘周期。CS與WR同時有效時啟動A/D轉換,轉換結束產生INTR信號(低電平有效),可供查詢或者中斷信號。在CS和RD的控制下可以讀取數據結果。

[C語言源程序]
/*注意:程序下載到DPY-1實驗板單片機后一定要使SW DIP1的開關脫離ON檔。或者直接將下載線從實驗板上拔下。因為下載線接在I/O口P1.5,P1.6,P1.7上,下載線的電平將會影響測量結果*/
#include
code unsigned char seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //顯示段碼
sbit int1=P3^3;  //定義管腳功能
sbit cs=P3^2; 
sbit wr=P3^6; 
sbit rd=P3^7; 
void Delay(unsigned int tc)     //顯示延時程序
{while( tc != 0 ) 
 {unsigned int i; 
  for(i=0; i<100; i++);
  tc--;}
}
unsigned char adc0804( void )     //讀AD0804子程序
{   unsigned char addata,i;
 rd=1;wr=1;int1=1; //讀ADC0804前準備
 P1=0xff;         //P1全部置一準備
 cs=0;wr=0;wr=1; //啟動ADC0804開始測電壓
 while(int1==1); //查詢等待A/D轉換完畢產生的INT(低電平有效)信號
 rd=0;     //開始讀轉換后數據
 i=i; i=i;    //無意義語句,用於延時等待ADC0804讀數完畢
 addata=P1;//讀出的數據賦與addate
 rd=1;cs=1;//讀數完畢
return(addata);//返回最後讀出的數據
}
unsigned int datpro(void)//ADC0804讀出的數據處理
{ unsigned char x;  
unsigned int dianyah,dianyal; //用於存儲讀出數據的高位元組和低位元組
unsigned int dianya=0;        //存儲最後處理完的結果 注意數據類型
for(x=0;x<10;x++)             //將10次測得的結果存儲在dianya中
{dianya=adc0804()+dianya; }
dianya=dianya/10; //求平均值
dianyah=dianya&0xf0; //屏蔽低四位
dianyah=dianyah>>4;  //右移四位 取出高四位
dianyal=dianya&0x0f; //屏蔽高四位 取出低四位
dianya=dianyal*20+dianyah*320; //最後的結果是一個四位數,便於顯示
return(dianya);//返回最後處理結果
}
void Led()
{  unsigned int date;
   date=datpro();  //調用數據處理最後結果
   P2=P2&0xef;
   P0=seg7code[date/1000]|0x80; //輸出個位數和小數點
   Delay(8); P2=P2|0xf0; P2=P2&0xdf; 
   P0=seg7code[date%1000/100]; //輸出小數點后第一位
Delay(8); P2=P2|0xf0; P2=P2&0xbf;
   P0=seg7code[date%100/10];   //輸出小數點后第二位
 Delay(8); P2=P2|0xf0; P2=P2&0x7f;
   P0=seg7code[date%10];       //輸出小數點后第三位
   Delay(8); P2=P2|0xf0;
}
main()
{
  while(1)
  {
      Led( ); //只需調用顯示函數
  }
}

硬體電路圖
 


[admin via 研發互助社區 ] 數模轉換ADC0804的應用實驗已經有5240次圍觀

http://cocdig.com/docs/show-post-42066.html