#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<stdio.h>#include "1602.h"#include "delay.h"#include "sysdefine.h"sbit Relay=P1^0; //继电器控制接口sbit LedLuDeng=P1^1; //led灯控制接口sbit LighRes=P1^2; //光照采集接口sbit Led_25=P1^6; //容量指示sbit Led_50=P1^5;sbit Led_75=P1^4;sbit Led_100=P1^3;char displaytemp[16]; //打印数组初始化unsigned long
time_20ms=0; //定时器计数float Volt=0.0; //检测电压void Init_Timer0(void);void main (void){ unsigned char midvolt; Init_Timer0(); //定时器0初始化 LCD_Init(); //初始化液晶 DelayMs(20); //延时有助于稳定 LCD_Clear(); while (1) //主循环 { DelayMs(50); //延时有助于稳定 midvolt=ReadADC(0); //ad转换采集 Volt=(float)midvolt*5.0/255*5; //计算出电压 *5表示分压值 if(Volt>14.4) //判断电池容量 { Relay=0; sprintf(displaytemp,"OverCharge ! "); //打印灯状态 LCD_Write_String(0,1,displaytemp); //显示第一行 } else { Relay=1; sprintf(displaytemp,"Charging ! "); //打印灯状态 LCD_Write_String(0,1,displaytemp); //显示第一行 } if(Volt<10.6) //处于过放 指示灯全灭 {Led_25=1;Led_50=1;Led_75=1;Led_100=1;} else if((Volt>=10.6)&&(Volt<11.6)) //容量在25%左右 {Led_25=0;Led_50=1;Led_75=1;Led_100=1;} else if((Volt>=11.6)&&(Volt<12.6)) //容量在50%左右 {Led_25=0;Led_50=0;Led_75=1;Led_100=1;} else if((Volt>=12.6)&&(Volt<14.0)) //容量在75%左右 {Led_25=0;Led_50=0;Led_75=0;Led_100=1;} else if(Volt>=14.4) //容量在100%左右 {Led_25=0;Led_50=0;Led_75=0;Led_100=0;} if(Volt<10.6) { LedLuDeng=1; //灯关闭 } else { if(LighRes==1) { LedLuDeng=0; //灯打开 } else { LedLuDeng=1; //灯关闭 } } sprintf(displaytemp,"BattVol:%4.1fv",Volt); //打印电压值 LCD_Write_String(0,0,displaytemp); //显示第二行 DelayMs(100); //延时有助于稳定 }}void Init_Timer0(void){ TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=(65536-20000)/256; //重新赋值 20ms TL0=(65536-20000)%256; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开}void Timer0_isr(void) interrupt 1 { TH0=(65536-20000)/256; //重新赋值 20ms TL0=(65536-20000)%256; time_20ms++; if(time_20ms%10==0) { }}
等着吧。。。。。。
一周热门 更多>