⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 measure.c

📁 实现了应急灯的控制
💻 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 + -