📄 process.c
字号:
#include <stcad.c>
#define Flash3() {flash_3=0;flash_0=flash_1=flash_2=1;}
#define Flash1(){flash_3=1;flash_0=flash_1=flash_2=0;}
#define FlashAll(){flash_0=flash_1=flash_2=flash_3=1;}
#define NoFlash(){flash_0=flash_1=flash_2=flash_3=0;}
void chgc_clear()
{
chg_1=chg_2=chg_4=chg_8=1;
}
void jd_change()
{
if (jd_bit)
{
jd_bit=0;
// if (jd_state==0) chgc_state=0;
// else chgc_state=1;
switch (jd_state)
{
case 0:
case 1: //4v
jd_2=jd_4=jd_8=1;
NOP();
break;
case 2: //6v
jd_4=jd_8=1;
NOP();
jd_2=0;
NOP();
break;
case 3: //8v
jd_2=jd_8=1;
NOP();
jd_4=0;
NOP();
break;
case 4: //10v
jd_8=1;
NOP();
jd_2=jd_4=0;
NOP();
break;
case 5: //12v
jd_2=jd_4=1;
NOP();
jd_8=0;
NOP();
break;
case 6: //14v
jd_4=1;
NOP();
jd_2=jd_8=0;
NOP();
break;
case 7: //16v
jd_2=1;
NOP();
jd_4=jd_8=0;
NOP();
break;
case 8: //18v
jd_2=jd_4=jd_8=0;
NOP();
break;
}
}
}
void chgc_change() //电流充电选择
{
switch (chgc_state)
{
case 0: //无充电电流
chg_1=chg_2=chg_4=chg_8=1;
NOP();
break;
case 1: //充电电流为100MA ,微充电。
chg_2=chg_4=chg_8=1;
NOP();
chg_1=0;
NOP();
break;
case 2: //充电电流为300MA
chg_4=chg_8=1;
NOP();
chg_1=chg_2=0;
NOP();
break;
case 3: //充电电流为600MA
chg_1=chg_8=1;
NOP();
chg_2=chg_4=0;
NOP();
break;
case 4: //充电电流为800MA
chg_1=chg_2=chg_4=1;
NOP();
chg_8=0;
NOP();
break;
case 5: //充电电流为1000MA
chg_1=chg_4=1;
NOP();
chg_2=chg_8=0;
NOP();
break;
case 6: //充电电流为1200MA
chg_1=chg_2=1;
NOP();
chg_4=chg_8=0;
NOP();
break;
case 7: //充电电流为1500MA
chg_1=chg_2=chg_4=chg_8=0;
NOP();
break;
}
}
void key_process() //键处理程序
{
switch (keyword)
{
case key_menu:
if (inmode<0x10) inmode=0x10;
else inmode=0;
break;
case key_fen: //设置分功能显示
if (inmode<0x10)
{
inmode++;
if (inmode>2)inmode=0;
}
break;
case key_add:
if (inmode==0) //设置状态下调整电压值
{
chgc_state=0;
battery_v_standard=battery_v_standard+12;
if (battery_v_standard>144) battery_v_standard=144;
}
else if (inmode==1)
{
chgc_state=0;
battery_i_standard++;
if (battery_i_standard>7) battery_i_standard=7;
}
else if (inmode==2)
{
jd_state++;
if (jd_state>8) jd_state=8;
}
break;
case key_dec:
if (inmode==0) //设置状态下调整电压值
{
chgc_state=0;
battery_v_standard=battery_v_standard-12;
if (battery_v_standard==0) battery_v_standard=12;
}
else if (inmode==1)
{
chgc_state=0;
battery_i_standard--;
if (battery_i_standard==0) battery_i_standard=1;
}
else if (inmode==2)
{
jd_state--;
if (jd_state>254) jd_state=0;
}
break;
}
keyword=0xff;
}
void inmode_process() //模式处理主程序
{
switch (inmode)
{
case 0:
chgc_state=0;
jd_state=0;
battery_err=1;
chgc_finish=0;
dis_hex_buffer=battery_v_standard;
htod_change();
Flash3();
disbuffer[3]=dismap1[battery_i_standard];
break;
case 1:
chgc_state=0;
jd_state=0;
battery_err=1;
chgc_finish=0;
dis_hex_buffer=battery_v_standard;
htod_change();
Flash1();
disbuffer[3]=dismap1[battery_i_standard];
break;
case 2:
if (jd_state==0) chgc_state=0;
else chgc_state=1;
ad_change();
NoFlash();
battery_err=1;
chgc_finish=0;
dis_hex_buffer=adc_result;
htod_change();
disbuffer[3]=dismap1[jd_state];
break;
case 0x10: //自动充电过程开始,
{
if (chgc_bit==1)
{
chgc_clear();
chgc_bit=0;
battery_full=bat_full[(battery_v_standard/12-1)]; //计算充满值、最低值和继电器开关状态
battery_low =battery_v_standard/battery_low_plus;
jd_state=bat_jds[(battery_v_standard/12)]; //继电器打在相应档位。
delay(200);
ad_change();
dis_hex_buffer=adc_result;
htod_change();
if (adc_result<battery_low||adc_result>(battery_full+10)) //先检测有无电池,小于低值或大于高值均视为无效。
{
battery_err=1;
chgc_count=jd_state=chgc_state=chgc_finish=0;
FlashAll();
disbuffer[3]=dismap1[0];
}
else //首次充电清各计数器。
{
switch(chgc_finish) //有电池时延时10判断
{
case 0:
if (battery_err)
{
chgc_count++;
if (chgc_count>50)
{
battery_err=0;
chgc_finish=1;
chgc_count=0;
chgc_state=battery_i_standard+2;
if (chgc_state>7) chgc_state=7;
jd_state=bat_jds[(battery_v_standard/12)];
Flash1();
disbuffer[3]=dismap1[chgc_state+8];
}
else
{
jd_state=chgc_state=chgc_finish=0;
FlashAll();
disbuffer[3]=dismap1[0];
}
}
break;
case 1:
if (adc_result>battery_full) //1秒不回落为半满
{
chgc_count++;
chgc_state=0;
if (chgc_count>2)
{
chgc_count=0;
chgc_state=(battery_i_standard+2)/2;
if (chgc_state==0) chgc_state=1;
chgc_finish=2;
Flash1();
}
}
else
{
chgc_count=0;
chgc_state=battery_i_standard+2;
if (chgc_state>7) chgc_state=7;
}
disbuffer[3]=dismap1[chgc_state+8];
break;
case 2:
if (adc_result>battery_full) ////10秒不回落为充满
{
chgc_count++;
chgc_state=0;
if (chgc_count>20)
{
chgc_count=0;
chgc_state=0;
chgc_finish=3;
NoFlash();
}
}
else
{
chgc_count=0;
chgc_state=(battery_i_standard+2)/2;
if (chgc_state==0) chgc_state=1;
}
disbuffer[3]=dismap1[chgc_state+8];
break;
case 3:
chgc_count=0;
if (adc_result>battery_full)chgc_state=0; ////充满状态下转为自动浮充
else chgc_state=1;
NoFlash();
disbuffer[3]=dismap1[chgc_state+8];
break;
}
}
}
break;
}
}
jd_change();
chgc_change();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -