STC12C5A60S2中的AD转换怎么用,有没有可用的程序?

2024-11-11 08:37:52
推荐回答(2个)
回答1:

#include
#include
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
int ch=0,cl=0,flag=0,V;
void adc();
void delay_2ms(void) //误差 0us
{
unsigned char a,b;
for(b=4;b>0;b--)
for(a=248;a>0;a--);
_nop_; //if Keil,require use intrins.h
}
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_; //if Keil,require use intrins.h
}
void main()
{
ADC_CONTR = 0xe8; //设置AD转换
delay_2ms();
P1ASF = 0x01; //P1.0
AUXR1 = 0; //ADC_RES为高八位
EA = 1; //开总中断
EADC = 1; //开AD转换中断
/**********
init_LCD();
***********/

while(1)
{
// adc();
if(flag)
{
EADC=0;//关闭AD转换中断
flag=0;
V=ch*5/256; //数据转换 只取低位
// time[0]=V%10;
// time[1]=V/10;
// if(V==0)
EADC=1;
P0=0x01; //标记LED
}

// display();
P2=table[(uchar)V] ; //数码管显示

delay();
P0=0;

}

}
void adc() interrupt 5
{
ADC_CONTR&=0xef; //flag清0
flag=1;
ch=ADC_RES;
cl=ADC_RESL;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=0xe8;
delay_2ms;

}

回答2:

读取AD的输出uchar 假定是8位的AD 读出的是 10110111 那么转成10进制 是183 ,然后183/255 × 基准电压 就是你输入的模拟量的值