akprincehbd 发表于 2011-1-9 19:04:21

STC 12C5A60S2 AD怎么用啊?一直看手册也没看明白

rt想用 STC 12C5A60S2 把P1.0这个口的电压值采到变量中(uint a),想while(1)每次循环采集一次。

main()
{

while(1)
{
这里采样一次;

}


}

这个程序怎么写啊,谁能给写个最简单的程序我研究一下。 谢谢

gyz1990 发表于 2011-1-9 19:39:17

看手册

gyz1990 发表于 2011-1-9 19:41:43

示例程序 ADC演示(文件大小:48K) (原文件名:STC12C5A60S2.rar)

cqfeiyu 发表于 2011-1-9 20:22:06

官网上找吧

elecfun 发表于 2011-1-9 21:35:01

官网上就有其AD示范全程,PDF里也有

beyond870215 发表于 2011-1-9 21:39:29

#include<stc12c5a.h>
#define uchar unsigned char
#define uint unsigned int
uchar code taba[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5c,0x79,0x71};
void delay(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void init_ad()
{
P1M0=0x0f;//设P1口低四位为开漏
P1M1=0x0f;
ADC_CONTR=0Xe0;//11100000,打开AD电源,设置最高转换速度
AUXR1=0X00;
delay(100);
}
int gatad()
{
uchar ad_finished=0;
int result;
ADC_CONTR|=0x00;//AD I/O口选择
ADC_RES=0;//寄存器清0
ADC_RESL=0;
ADC_CONTR|=0x08;//打开AD
delay(1);
while(ad_finished==0)
{
ad_finished=(ADC_CONTR&0X10);
}
result=ADC_RES*4+ADC_RESL;//读取AD值
ADC_CONTR&=0xe7;
return(result);
}
float ad_av()
{
float val_av=0;
uint num;
for(num=0;num<100;num++)
{
val_av+=gatad();
}
val_av/=100.000;
val_av=val_av*5.0/1024;
return(val_av);
}
void display(uint flga)
{
uchar qian,bai,shi,ge;
qian=flga/1000;
bai=flga%1000/100;
shi=flga%100/10;
ge=flga%10;
P2=0xf8;//显示1
P0=taba|0x80;
delay(6);
P0=0x00;

P2=0xf9;//显示2
P0=taba;
delay(6);
P0=0x00;

P2=0xfa;//显示3
P0=taba;
delay(6);
P0=0x00;

P2=0xfb;//显示4
P0=taba;
delay(6);
P0=0x00;
}
void main()
{
float av1;
init_ad();
while(1)
{
av1=ad_av();
av1=av1*1000;
display(av1);
}
}
//细节还要修改下

akprincehbd 发表于 2011-1-10 09:17:49

谢谢大家懂了
页: [1]
查看完整版本: STC 12C5A60S2 AD怎么用啊?一直看手册也没看明白