- #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;
-
- }
-
- }