/*?名稱:ADC0809?數模轉換與顯示?
說明:ADC0809?采樣通道?3?輸入的模擬量,轉換後的結果顯示在數碼管上。*/?
#include<reg51.h>?
#define?uchar?unsigned?char?
#define?uint?unsigned?int?
//各數字的數碼管段碼(***陰)?
uchar?code?DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};?
sbit?CLK=P1^3;?//時鐘信號?
sbit?ST=P1^2;?//啟動信號?
sbit?EOC=P1^1;?//轉換結束信號?
sbit?OE=P1^0;?//輸出使能?
//延時?
void?DelayMS(uint?ms)?
{?
uchar?i;? while(ms--)?for(i=0;i<120;i++);?}?
//顯示轉換結果?
void?Display_Result(uchar?d)?
{?
P2=0xf7;?//第4?個數碼管顯示個位數? P0=DSY_CODE[d%10];DelayMS(5);?
P2=0xfb;?//第3?個數碼管顯示十位數? P0=DSY_CODE[d%100/10];? DelayMS(5);? P2=0xfd;?//第2?個數碼管顯示百位數? P0=DSY_CODE[d/100];? DelayMS(5);?}?
//主程序?
void?main()?
{?
TMOD=0x02;?//T1?工作模式?2? TH0=0x14; TL0=0x00;? IE=0x82;? TR0=1;? P1=0x3f;?//選擇?ADC0809?的通道3(0111)(P1.4~P1.6)? while(1)? {? ST=0;ST=1;ST=0;?//啟動?A/D轉換? while(EOC==0);?//等待轉換完成? OE=1;? Display_Result(P3);? OE=0;? }?}?
//T0?定時器中斷給?ADC0809?提供時鐘信號?
void?Timer0_INT()?interrupt?1?
{?
CLK=~CLK;?}