stc12c5a60s2使用片内AD转换
#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();
}
}
stc12c5a60s2片内AD转 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)