微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stc12c5a60s2使用片内AD转换

stc12c5a60s2使用片内AD转换

时间:11-30 来源:互联网 点击:
#include

#include
#define uint unsigned int
#define uchar unsigned char
sfr adc_contr=0xbc;//adc控制寄存器,不可位寻址,用或运算来设置
sfr adc_res=0xbd;//转换结果寄存器,高八位
sfr adc_low2=0xbe;//转换结果寄存器,低两位
sfr p1asf=0x9d;//设置p1的那一口为输入口,不可位寻址.
//以下都是控制寄存器的各位地址
#define adc_power 0x80;//adc电源,第7位
#define adc_flag 0x10;//转换结束标志位,第4位
#define adc_start 0x08;//转换开始,第3位
#define adc_speedll 0x00;//速度位,第5,6位
#define adc_speedl 0x20;
#define adc_speedh 0x40;
#define adc_speedhh 0x60;
#define adc_chs 0x00;//输入通道为第p1.0,1,2,3三位可设置p10-p17
//位定义完成

sbit duan=P2^6;
sbit wei=P2^7;
long unsigned int a,shu;
uint b,wan,qian,bai,shi,ge,adc_finished;//转换结束标志
uchar code Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void yanshi()
{
uchar i,j;
for(i=5;i>0;i--)
for(j=110;j>0;j--);
}
void adcinit()//adc初始化函数
{
p1asf=0x01;//设置p10 为ad转换输入口
adc_contr=0xe0;//打开电源,设最高速度
//adc_contr=adc_power|adc_speedh|adc_chs;//电源X0000000,速度0XX00000
//通道:00000XXX
yanshi();
adc_contr|=adc_chs;//设置频道
}

void fenshu()
{

shu=a;
wan=shu/10000;
shu=shu%10000;
qian=shu/1000;
shu=shu%1000;
bai=shu/100;
shu=shu%100;
shi=shu/10;
ge=shu%10;
}
void xianshi()
{
P0=Temp[ge];
duan=1;
duan=0;
P0=0xff;
P0=0x7f;
wei=1;
wei=0;
P0=0x00;

yanshi();
P0=Temp[shi];
duan=1;
duan=0;
P0=0xff;
P0=0xbf;
wei=1;
wei=0;

yanshi();
P0=Temp[bai];
duan=1;
duan=0;
P0=0xff;
P0=0xdf;
wei=1;
wei=0;
yanshi();
P0=Temp[qian];
duan=1;
duan=0;
P0=0xff;
P0=0xef;
wei=1;
wei=0;
}

void main()
{
adcinit();
adc_res=0;
adc_low2=0;
while(1)
{
adc_contr|=adc_start;//启动ad转换,置1为起动,转换结束后自动置0
yanshi();
adc_finished=0;
while(adc_finished==0)
{
adc_finished=adc_contr&adc_flag;//检测是否转换结束,没结束一直等
}

adc_contr=adc_contr&0xef;//转换结束标志清零
//也可写成

a=adc_res*4+adc_low2;

adc_contr|=adc_start;
yanshi();
fenshu();
xianshi();
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top