有单片机高手吗?我需要用STC12C4052AD进行双通道A/D转换,请给个程序,最好是程序模块,谢谢!

如题所述

#include<STC12C5616AD.H>
#include<intrins.h>

#define int16 unsigned int
#define int8 unsigned char
#define AD_SPEED 0x60 // 1010,0000 1 1 70 个时钟周期转换一次,
void delay_ad(int8 delay_time) // 延时函数
{
int16 n;
while(delay_time--)
{
n = 6000;
while(--n);
}
}
//////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
int8 get_AD_result(int8 channel)
{
int8 AD_finished=0; //存储 A/D 转换标志
//channel=channel; //0000,0111 清0高5位
P1|=channel;
ADC_CONTR|=0x80;
P1M0=0x0e;
P1M1=0x00;

ADC_CONTR&=0xe0;

ADC_CONTR|=channel;
delay_ad(1);
ADC_CONTR|=0x08;

AD_finished = 0; //检测ADC转换
while (AD_finished ==0 ) //等待A/D转换结束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000 测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,
return (ADC_DATA); //返回 A/D 高 8 位转换结果 ,最大255
}
这个是八位的,使用0-7八个通道 ,设计的产品中用过3路,没问题,你可以试试,当然这个是查询法,你可以用中断法做,具体的请看资料。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-21
咦,这个STC就有呀,你没问他们要吗?还有,这里一般很那要到程序,至少不会要到私有程序的。那些花了时间精力的相当于金钱呀。
相似回答