📄 change.c
字号:
/****************************************************************/
/*Module: Hua Wei battery fixture
/*Creator: lianghaodang
/*Date: 01/28/2008
/*Description: test the battery voltage
/****************************************************************/
#include<AT892051.h>
#include<stdio.h>
#include<math.h>
#include<intrins.h>
sfr ADC_CONTR = 0xC5;
sfr ADC_DATA = 0xC6;
sfr ADC_LOW2 = 0xBE;
sfr P1M0 = 0x91;
sfr P1M1 = 0x92;
sbit CHANGE = P3^7;
sbit PASS = P1^7;
sbit FAIL = P1^6;
sbit KEY = P1^5;
unsigned int Counter,Battery_Voltage_Hex;
unsigned char ADC_Highdata,ADC_Lowdata;
float Battery_Voltage_Data,Battery_Temp_Voltage_Data;
void Send(unsigned char S_Number);
void Delayms(unsigned char ms);
void Read_Battery_Voltage(void);
//----------------------------------------
void main(void)
{
P1 = 0XFF;
P3 = 0XFF;
P1M0 = 0x01;
P1M1 = 0x01;
FAIL = 1;
PASS = 1;
CHANGE = 1;
Counter = 0;
ADC_Highdata = 0x00;
ADC_Lowdata = 0x00;
/*
ADC_Highdata = 0xB3;
ADC_Lowdata = 0x01;
Battery_Voltage_Hex = (ADC_Highdata<<2)|ADC_Lowdata;
Battery_Voltage_Data = (Battery_Voltage_Hex*5.180)/1024;
if(Battery_Voltage_Data<3.8)
{
PASS = 1;
}else PASS = 0;
*/
ES = 0;
TMOD = 0x21;
SCON = 0x50;
PCON = 0x00;
TH1 = 0xFD;
TL1 = 0xFD;
TH0 = 0xFC;
TL0 = 0x18;
IE = 0x82;
RI = 0;
TR1 = 1;
TR0 = 1;
while(1)
{
FAIL = 1;
CHANGE = 1;
PASS = 1;
while(~KEY)
{
PASS = 0;
do{}while(Counter<250);
Counter = 0;
Read_Battery_Voltage();
if((Battery_Voltage_Data<4.15)&&(Battery_Voltage_Data>2.5))
{
CHANGE = 0;
do{}while(Counter<250);
Counter = 0;
FAIL = ~FAIL;
}else CHANGE = 1;
Send(ADC_Highdata);
Send(ADC_Lowdata);
}
}
}
void Read_Battery_Voltage(void)
{
/************** AD ********************/
ADC_CONTR = (ADC_CONTR|0x80);
//open the AD power
ADC_CONTR = (ADC_CONTR&0xE0);
//CLR the ADC_FLAG,ADC_START,LOW 3 Bit,and select channel P1.0
Delayms(100);
ADC_DATA = 0x00;
ADC_LOW2 = 0x00;//CLR the data
ADC_CONTR = (ADC_CONTR|0x08); //Start the AD
while((ADC_CONTR&0x10)==0); //wait the AD finished
ADC_CONTR = (ADC_CONTR&0xE7); //CLR the ADC_FLAG
ADC_Highdata = ADC_DATA; //High 8 bit data
ADC_Lowdata = (ADC_LOW2&0x03); //Low 2 bit data
ADC_CONTR = (ADC_CONTR&0x7F);
Battery_Voltage_Hex = (ADC_Highdata<<2)|ADC_Lowdata;
Battery_Voltage_Data = (Battery_Voltage_Hex*5.180)/1024;
//closed the AD power
/***************** AD *****************/
}
/********** T0 interrupt ****************/
void time0(void) interrupt 1
{
Counter++;
TH0 = 0xFC;
TL0 = 0x18;
}
/*********** Send Number to PC Serial_PORT */
void Send(unsigned char S_Number)
{
SBUF = S_Number;
while(TI==0);
TI = 0;
}
/********************************************/
void Delayms(unsigned char ms)
// relay ms
{ unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -