從ADC0809的通道IN0輸入0-5V之間的模擬量,通過ADC0809轉換成數字量在數碼管上以十進制形成顯示出來。ADC0809的VREF接+5V電壓。
電路原理圖如下:
AD.png (75.49 KB, 下載次數: 25)
下載附件
2018-12-12 16:29 上傳
程序如下:
#include <reg52.h> //頭文件定義
#include<intrins.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit EOC=P3^3;//EOC轉換結束信號,高電平說明轉換結束。如果只是作為P3.3口,查詢編程;如果是INT1,中斷編程方法。
sbit CS=P3^0;
sbit AD_WR=P3^6;//控制ST,WR=0,ST=1;WR=1,ST=0;上升沿(0—1)啟動A/D轉換,下降沿(1—0)進入A/D轉換。
sbit AD_RD=P3^7;//控制OE,RD=0,OE=1;RD=1,OE=0;OE=1,允許數據輸出給單片機。OE=0,停止數據輸出給單片機
uchar code table[ ]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,
0x39,0x5E,0x79,0x71};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge)//顯示子函數
{
P2=table[bai];//P2連接DATA 顯示數字
P1=0x04; //P1連接BIT 選擇哪一位數碼管
delayms(1);
P2=table[shi];
P1=0x02;
delayms(1);
P2=table[ge];
P1=0x01;
delayms(1);
}
void main()
{
uchar A1,A2,A3,ad_dat,a;
CS=0;//WR=1;RD=1;
while(1)
{
AD_WR=1;//st=1;
_nop_();
_nop_();
_nop_();
AD_WR=0; //上升沿啟動A/D轉換
_nop_();
_nop_();
_nop_();
AD_WR=1; //下降沿開始A/D轉換
while(!EOC);//等待A/D轉換結束,當EOC變為1時,A/D轉換結束。
for(a=5;a>0;a--);
AD_RD=0;//輸出轉換數據給單片機
_nop_();
ad_dat=P0;//段選顯示
AD_RD=0;//輸出數據線為高阻狀態 每改變一次電壓值,就需要按下仿真器復位按鈕,再點擊下載,才能顯示新的數字量
A1=ad_dat/100;
A2=ad_dat%100/10;
A3=ad_dat%10;
display(A1,A2,A3);
}
}
|