#include <reg52.H>
#include "1602.h"
#include "adcchaxun.h"
#include "delay.h"
#include "stdio.h"
sbit key_chongdian = P2^0;//定义按键
sbit key_fangdian = P2^1;
sbit key_zidong = P2^2;
sbit cd = P3^0;
sbit fd1 = P3^1;
sbit fd2 = P3^2;
uchar a;
unsigned char KeyScan();
void chongdian();
void fangdian();
void zidong();
main()
{
key_chongdian = 1;
key_fangdian = 1;
key_zidong = 1; //按键输入端口电平置高
InitADC();
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
while(1)
{
KeyScan();
switch(a)
{
case 1:chongdian();break;
case 2:fangdian();break;
case 3:zidong();break;
default:return 0;break;
}
}
}
unsigned char KeyScan()
{
if(!key_chongdian) //如果检测到低电平,说明按键按下
{
a=1;
}
if(!key_fangdian) //如果检测到低电平,说明按键按下
{
a=2;
}
if(!key_zidong) //如果检测到低电平,说明按键按下
{
a=3;
}
}
void chongdian()
{
uchar i,num1, num2,num3;
unsigned char temp[7];//定义显示区域临时存储数组
float U1,U2,I,U4,U;
cd = 0;//充电 LM2596 5脚高电平不工作
fd1 = 0;//UCC 28019 4,6脚 均高电平工作
fd2 = 0;
/*************读电流**********/
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num1=GetADCResult(0); //采样电压计算电流,
U4=(float)num1*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
I = (float)U4/2.2;
sprintf(temp,"I1 %3.2fA",I);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(8,0,temp);
LCD_Write_String(0,0,"MOD1 CD");
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num2=GetADCResult(1);
U=(float)num2*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
U1=U*6.7;
sprintf(temp,"U1 %3.2f ",U1);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(0,1,temp);
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num3=GetADCResult(2);
U2=(float)num3*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
sprintf(temp,"U2 %3.2f ",U2);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(8,1,temp);
if(U>4)
cd = 1;//停止充电
}
void fangdian()
{
uchar i,num1, num2,num3;
unsigned char temp[7];//定义显示区域临时存储数组
float U1,U2,I,U,U3,U4;
cd = 1;//放电
fd1 = 1;fd2 = 1;//放电工作
/*************读电流**********/
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num1=GetADCResult(0); //采样电压计算电流,
U4=(float)num1*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
I = (float)U4/2.2;
sprintf(temp,"I1 %3.2fA",I);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(8,0,temp);
LCD_Write_String(0,0,"MOD2 FD");
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num2=GetADCResult(1);
U=(float)num2*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
U1=U*6.7;
sprintf(temp,"U1 %3.2f ",U1);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(0,1,temp);
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num3=GetADCResult(2);
U2=(float)num3*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
U3=U2*;
sprintf(temp,"U3 %3.2f ",U3);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(8,1,temp);
}
void zidong()
{
uchar i,num1, num2,num3;
unsigned char temp[7];//定义显示区域临时存储数组
float U1,U2,I,U,U4,U3;
/*************读电流**********/
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num1=GetADCResult(0); //采样电压计算电流,
U4=(float)num1*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
I = (float)U4/2.2;
sprintf(temp,"I1 %3.2fA",I);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(8,0,temp);
LCD_Write_String(0,0,"MOD3 ZD");
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num2=GetADCResult(1);
U=(float)num2*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
U1=U*6.7;
sprintf(temp,"U1 %3.2f ",U1);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(0,1,temp);
for(i=0;i<10;i++)//连续读5次,取最后一次,以便读取稳定值
num3=GetADCResult(2);
U2=(float)num3*5/256; //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
U3=U2*;
sprintf(temp,"U2 %3.2f ",U2);//格式输出电压值,%3.2f 表示浮点输出,共3位数,小数点后2位
LCD_Write_String(8,1,temp);
if(U3>30)
{
cd=0;//充电
fd1=0;
fd2=0;
}
else
{
cd=1;//放电
fd1=1;
fd2=1;
}
}