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

 我来答
945436110
2013-09-21 · 超过11用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:30.6万
展开全部
#include<STC12C5A60AD.h>
#include<intrins.h>
#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;

}
七终多E
2012-08-09 · TA获得超过1.4万个赞
知道大有可为答主
回答量:3756
采纳率:46%
帮助的人:3437万
展开全部
读取AD的输出uchar 假定是8位的AD 读出的是 10110111 那么转成10进制 是183 ,然后183/255 × 基准电压 就是你输入的模拟量的值
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式