单片机ADC的使用"/>
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的使用
发布评论