大家可以帮我分析一下这个程序吗?

2019-07-15 10:34发布

#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)        {        }}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。