#include <intrins.h>
#include <STC12C5620AD.h>
/*
sfr P1M0 = 0x91;
sfr P1M1 = 0x92;
sfr ADC_CONTR = 0xC5;
sfr ADC_DATA = 0xC6;
sfr ADC_LOW2 = 0x0BE;
*/
#define uint unsigned int
sbit p1 = P1^0;
sbit p2 = P1^1;
sbit p3 = P1^2;
sbit p4 = P1^3;
sbit p5 = P1^4;
#define p0 P1
sbit adc_power = 0xB7;
sbit adc_flag = 0xB4;
sbit adc_start = 0xB3;
sbit chs2 = 0xB2;
sbit chs1 = 0xB1;
sbit chs0 = 0xB0;
sbit speed1 = 0xB6;
sbit speed = 0xB5;
void channel1();
void channel2();
void channel3();
void channel4();
void channel5();
void error();
void delay();
uint voltage;
void Initad()
{
P1M0 = 0x80;
P1M1 = 0x80;
ADC_CONTR |= 0x80; //ad上电
_nop_();_nop_;_nop_;_nop_;_nop_();_nop_();_nop_();_nop_();
ADC_CONTR |= 0x07; //选择模拟量输入通道
_nop_();_nop_;_nop_;_nop_;_nop_();_nop_();_nop_();_nop_();
ADC_DATA = 0x00;
ADC_LOW2 = 0x00;
}
uint getdata ()
{
uint temp,dat;
ADC_CONTR |= 0x08;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
while (!(ADC_CONTR & 0x10));
ADC_CONTR &= 0x0EF;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
temp = ADC_DATA;
temp = (temp << 2 ) + ADC_LOW2;
dat = temp/1024.0*5;
/*
temp = ADC_DATA;
temp <<= 2;
temp |= ADC_LOW2;
cache[0] = temp/1000000000*512.0;
cache[1] = temp/100000000*256.0;
cache[2] = temp/10000000*128.0;
cache[3] = temp/1000000*64.0;
cache[4] = temp/100000*32.0;
cache[5] = temp/10000*16.0;
cache[6] = temp/1000*8.0;
cache[7] = temp/100*4.0;
cache[8] = temp/10*2.0;
cache[9] = temp%10*1.0;
for(a=0;a<10;a++)
{
dat += cache[a];
}
dat = dat/1024*5.0;
*/
return (dat);
}
void main ()
{
Initad();
p0 = 0xff;
while ( 1)
{
voltage = getdata ();
if ( (voltage >=0)&&(voltage<1))
{
channel1();
}
else if ((voltage >=1)&&(voltage<2))
{
channel2();
}
else if ((voltage >=2)&&(voltage<3))
{
channel3();
}
else if ((voltage >=3)&&(voltage<4))
{
channel4();
}
else
{
channel5();
}
}
}
void channel1()
{
p1 = 1;p2 = 0; p3 = 0; p4 = 0; p5 = 0;
}
void channel2()
{
p1 = 0;p2 = 1; p3 = 0; p4 = 0; p5 = 0;
}
void channel3()
{
p1 = 0;p2 = 0; p3 = 1; p4 = 0; p5 = 0;
}
void channel4()
{
p1 = 0;p2 = 0; p3 = 0; p4 = 1; p5 = 0;
}
void channel5()
{
p1 = 0;p2 = 0; p3 = 0; p4 = 0; p5 = 1;
}
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
ad.zip_stc ad
版权申诉
6 浏览量
2022-09-24
03:35:33
上传
评论
收藏 24KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/d600a32f29294db1a3be82ec9708491a_weixin_42651887.jpg!1)
weixin_42651887
- 粉丝: 82
- 资源: 1万+
评论0