📄 measure.c
字号:
//-----------------------------------------------------------------------------
//
//文件名: measure.c
//
//编写人:ywq
//
//编写时间:2008/01/14
//
//目标器件: C8051F310
//
//编译工具: keil c
//
//程序说明: 用于测量当前的状态。
//
//包括电池的电压、温度测量、外部电网的电压检测
//
//
//-----------------------------------------------------------------------------
// Includes
//
//------------------------------------------------------------------------------------
#include "measure.h"
#include "delay.h"
unsigned int time;
unsigned int sourceresulth;
unsigned int sourceresultl;
void battery()
{
// unsigned int grade;
AMX0P=0x04; /*设置AD正输入端口*/
AMX0N=0x1f; /*设置AD负输入端口*/
ADC0CN |=0xc0; /*ADC0使能,向AD0BUSY写1开始转换*/
//REF0CN |=0x04; /*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
ADC0CF |=0x50; /*转换周期和增益为1*/
//AMX0CF |=0x00; /*单端输入*/
//EIE2 |=0x02;
AD0BUSY=1; //启动AD转换
//delay(1000);
while(!AD0INT)
{
delay(100);
}
AD0INT=0;
adresultl=ADC0L; //读出转换结果
adresulth=ADC0H&03;
if(adresulth<0x01)
{
// grade=1;
vbattery=1; //电池电量处于过放状态
}
else if((adresulth>0x01)&&(adresulth<0x02))
{
// grade=2;
vbattery=2; //电池低电量
}
else if((adresulth>0x02)&&(adresulth<0x03))
{
// grade=3;
vbattery=3; //电池高电量
}
else
{
// grade=4;
vbattery=4; //电池过充
}
}
void charge()
{
switch (vbattery)
{
case 1: //快速充电
//PCA_Init();
PCA0CPL0=0x80;
PCA0CPH0=0x80;
PCA0CPM0=0xcb;
break;
case 2: //一般充电
//PCA_Init();
PCA0CPL0=0x00;
PCA0CPH0=0x80;
PCA0CPM0=0xcb;
break;
case 3: //一般充电
//PCA_Init();
PCA0CPL0=0x80;
PCA0CPH0=0x00;
PCA0CPM0=0xcb;
break;
case 4: //不充电
//PCA_Init();
//PCA0CPL1=0x00;
//PCA0CPH1=0x80;
//PCA0CPM1=0xcb;
//redlighton(); //显示过充状态
P2_0=0; //关断充电口
PCA0CPM0=0x00;
break;
default:
break;
}
}
void sourcemeasure()
{
unsigned int highvoltage;
unsigned int lowvoltage;
//unsigned int grade;
AMX0P=0xe7; /*设置AD正输入端口*/
AMX0N=0x1f; /*设置AD负输入端口*/
ADC0CN |=0xc0; /*ADC0使能,向AD0BUSY写1开始转换*/
//REF0CN |=0x04; /*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
ADC0CF |=0x50; /*转换周期和增益为1*/
//ADC0GTH =0x00;
//ADC0GTL =0xff;
//ADC0LTH =0x00;
//ADC0LTL =0x80;
//AMX0CF |=0x00; /*单端输入*/
//EIE1 |=0x04;
AD0BUSY=1;
while(!AD0INT)
{
delay(100);
}
AD0INT=0;
sourceresulth=ADC0L;
sourceresultl=ADC0H&03;
highvoltage=0x10;
lowvoltage=0x00;
if(highvoltage<sourceresulth)
{
vsource=1;
}
else if(highvoltage>sourceresulth)
{
vsource=0;
}
else
{
if(lowvoltage<sourceresultl)
{
vsource=1;
}
else
{
vsource=0;
}
}
}
void testtemperature(void) //温度检测
{
TH0=0x00;
TL0=0x00;
CPT1MX=0xEC;
CPT1MD=0x20;
CPT1CN |=0x80;
P1_1=1;
TR0=1;
}
void temp() interrupt 13 //比较中断
{
TR0=0;
CPT1CN |=0x80;
time=TH1*100+TH0;
}
void calculator() //温度计算
{
unsigned int R;
time=time/12;
R=time*1000000/470;
///////////////////////////////////////
//添加阻值与温度的关系代码
//
//
//
////////////////////////////////////////
}
void pca() interrupt 11
{
CF=0;
CCF0=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -