STC8G1K08单片机ADC的使用

使用STC8G1K08单片机的P3.0口对15V电池电压进行采样,在使用P3.0口进行采样时,需要加一个我之前发的分压滤波电路,实现功能为当采样到的电压小于10V时,LED灯进行闪烁,当采样到的电压小于8V时,LED灯闪烁频率变高。
#include “reg51.h”
#include “intrins.h”
//sfr ADC_CONTR = 0xb8;
//sfr ADC_RES = 0xbd;
//sfr ADC_RESL = 0xbe;
//sfr ADCCFG = 0xFE;
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr ADCCFG = 0xde;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P1M1=0x91;
sfr P1M0=0x92;
#define A P1
int X;
sbit beep=P1^1;
sbit led = P1^3;
typedef unsigned int u16;

void delay(u16 i)
{
while(i–);
}

void main()
{
P1M1 = 0x00;
P1M0 = 0x00;
A=0;

P3M0 = 0x00; // 设置 P3.0 为 ADC 口
P3M1 = 0x01;// 设置 P3.0 为 ADC 口
ADCCFG = 0x0F; // 设置 ADC 时钟为系统时钟 /2/16 ,结果左对齐
ADC_CONTR = 0x88; // 使能 ADC 模块	 
while (1)
{
	led=0;
	ADC_CONTR = 0xC8; // 启动 AD 转换
	_nop_();
	_nop_();
	while (!(ADC_CONTR & 0x20)); // 查询 ADC 完成标志

	ADC_CONTR &= ~0x20; // 清完成标志
	X = ADC_RES; // 读取 ADC 结果

// if(X>130)
// {
// led=1;
//
// }
if(X<130&&X>105)
{
led=1;
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
led=0;
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);

	}
	if(X<105)
	{
		led=1;
		delay(60000);
		delay(60000);
		
		led=0;
		delay(60000);
		delay(60000);
		
	}

}

}

你可能感兴趣的:(STC8G1K08单片机ADC的使用)