×
嵌入式 > 技术百科 > 详情

使用片内AD转换

发布时间:2020-10-20 发布时间:
|
#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();
 }
}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展