Код: Выделить всё
// атмега8 8Мгц
#include <io.h>
#include <delay.h>
#include <alcd.h>
int t=0,t1=0,cur=0,vol;unsigned char tims=0,timm=0,timh=0,brk=0,err=0;unsigned long int cah=0;
#define zar PORTC.2 /// выход на ключ включения заряда
#define raz PORTC.3 /// выход на ключ включения разряда
#define led PORTC.4 /// выход на светодиод внимание
#define cul PORTB.5 /// вентиллятор
// Timer1 input capture interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1=8181; // установка таймера
t1++; // переменная для задержки
t++; // это для расчёта ассиметричного заряда и всё блядь-не проверяй
if (t1>=140)
{
tims++; // секунды плюс
t1=0;
if (PIND.3==0) brk++; else brk=0;
if (tims==60) // это точно минута
{
tims=0;
timm++;
cah=cah+cur*2; //расчёт емкости с=с+ток*120, раз в минуту
}
if (timm==60)
{
timm=0;
timh++;
}
}
}
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
unsigned char key (unsigned char i1) //++++++++++функция возврата кода нажатой кнопки++++
{ i1=0; //|++++++++ с ожиданием нажатия+++
while (i1==0)
{
if (PIND.2==0) i1=1; //левая кнопка "-"
if (PIND.3==0) i1=2; // средняя "выбор"
if (PIND.4==0) i1=3; // правая кнопка "+"
}
delay_ms(200); //пауза
return (i1); //возврат с передачей кода
}
lcdv (int x1, unsigned char v) //+++++++++функц. вывода 4-х значного числа на ЛСД с гашением первого нуля
{ // или выводом последних 2-х цифр в завис. от вх данных(v=4 или 2)
int x2=-1;
while (x1>=0)
{
x2=x2+1;
x1=x1-1000;
}
x2=x2+48;
if (x2>48) if (v==4) lcd_putchar(x2);
x1=x1+1000;
x2=-1;
while (x1>=0)
{
x2=x2+1;x1=x1-100;
}
x2=x2+48;
if (v==4) lcd_putchar(x2);
x1=x1+100;
x2=-1;
if (v==4) lcd_putchar(44);
while (x1>=0)
{
x2=x2+1;x1=x1-10;};
x2=x2+48;
lcd_putchar(x2);
x1=x1+10;
x2=-1;
while (x1>=0)
{
x2=x2+1;
x1=x1-1;
}
x2=x2+48;
lcd_putchar(x2);
}
lcdtime() //++++++++функция вывода времени на лсд в левый угол 3-й строки
{
lcd_gotoxy(0,2);
// lcd_putsf(" "); //стираем старое значение
lcd_gotoxy(0,2);
lcdv (timh,2); //выводим значение часов
lcd_putsf(":");
lcdv (timm,2); //выводим значение минут
lcd_putsf(":");
lcdv (tims,2); //выводим значение секунд
}
lcdzrzr () // ++++++++++функция вывода на лсд "c=,U=,I=" для резимов : заряд, разряд, разряд-заряд
{ lcd_gotoxy(9,2);
lcd_putsf("C=");
lcd_gotoxy(2,3);
lcd_putsf("U=");
lcd_gotoxy(11,3);
lcd_putsf("I="); }
unsigned char vibrej (unsigned char z2) //++++функция (выбор режима)возврата кода выбранного режима заряда++++
{ //
unsigned char i2=0;
lcd_clear();
lcd_putsf("Vibor rejima zarjada");
z2=1;
while (i2!=2)
{
lcd_gotoxy(0,1);lcd_putsf(" ");
lcd_gotoxy(0,1);
if (z2==1) lcd_putsf("Postojannii");
if (z2==2) lcd_putsf("Assimetrichnyi 1/9");
if (z2==3) lcd_putsf("Assimetrichnyi 2/8");
if (z2==4) lcd_putsf("Assimetrichnyi 3/7");
if (z2==5) lcd_putsf("Assimetrichnyi 4/6");
i2=key(i2);
if (i2==1) if (z2>1) z2=z2-1;
if (i2==3) if (z2<5) z2=z2+1;
}
lcd_clear();
return (z2);
}
int zardo (int uotkl1) //++++функция выбора U при котором отключится заряд АКБ+++
{
unsigned char i3=0; //вспомогательная переменная для получ. кодов клавиатуры
lcd_clear(); //чистим дисплей
lcd_putsf("Zarjad do "); // вывод надписи "заряд до"
while (i3!=2) //цикл до нажатия кнопки "ОК"
{
lcd_gotoxy(11,0);lcd_putsf(" ");
lcd_gotoxy(11,0);
lcdv (uotkl1,4); // вывод напряжеения отключения на лсд
lcd_putsf("V");
i3=key(i3); //вызов прцедуры получ. нажатой клавиши
if (i3==1) if (uotkl1>300) uotkl1=uotkl1-10; //убавл на 0,1 В
if (i3==3) if (uotkl1<2000) uotkl1=uotkl1+10; //прибавл на 0,1 В
}
return uotkl1; //возвращаем выбранное значение при нажатии кнопки "ОК"
}
lcdUI() //+++функция (ток и напряжение на лсд)ацп напряжения , тока и вывод их на дисплей в нижней строке
{
ADMUX = (0<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); //канал АЦП U
ADCSR |= 0x40; // запуск АЦП
delay_ms(50); // пауза
// while ( ADCSR |== 0x40){};
vol=ADCW;
vol=vol+vol;
// lcd_gotoxy(4,3);
// lcd_putsf(" "); //затираем старое значение U на
lcd_gotoxy(4,3);
lcdv (vol,4); // выводим реальное напряжение на акб
lcd_putsf("V ");
ADMUX = (0<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(1<<MUX0); //канал АЦП I
lcd_gotoxy(13,3);
ADCSR |= 0x40; //считываем значение тока
delay_ms(50);
cur=ADCW; //помещаем его в переменную cur
cur=cur+cur;
// lcdv (cur,4);
if (cur<=1000) cur=1000-cur;
if (cur>=1000)
{
lcd_putsf("-");
cur=cur-1000;
}
if (cur<=4) cur=0;
lcdv (cur,4);
lcd_putsf("A ");
}
peregr() //+++ функция (перегрузка) отключения зу или нагрузки при перегрузке по току
{
zar=0; //выключаем зарядное
raz=0; //выключаем нагрузку
cul=0;
led=1; //включаем светодиод "неисправность"
lcd_gotoxy(0,1);
lcd_putsf(" ");
lcd_gotoxy(0,2);
lcd_putsf(" ");
lcd_gotoxy(0,3);
lcd_putsf(" ");
lcd_gotoxy(0,1);
lcd_putsf("Peregruzka po toku");
lcd_gotoxy(0,2);
lcd_putsf("Imax=7,5A I=");
lcdv (cur,4);
lcd_putsf("A");
lcd_gotoxy(0,3);
lcd_putsf("Ustranite neispravn.");
key(1);
err=1;
}
int zarjd (int uotkl2,unsigned char z4,unsigned char v1) //+++фукц.заряда АКБ до заранее выбр напряжения+++
{
unsigned char i;
vol=uotkl2-10;
zar=1; // включаем зарядное
// PORTD.1=1; // включаем светодиод "зарядное вкл."
lcdzrzr(); // вывод с,i,U в две нижние строки
t=0;t1=0;tims=0,timm=0,timh=0;cah=0; //обнуляем таймеры и часы реальн. времени
lcd_gotoxy(0,1);
if (v1==1) lcd_putsf("Postojan");
if (v1==2) lcd_putsf("Assim 1/9");
if (v1==3) lcd_putsf("Assim 2/8");
if (v1==4) lcd_putsf("Assim 3/7");
if (v1==5) lcd_putsf("Assim 4/6");
while(vol<uotkl2) //пока напр на АКБ не достигло выбранного-заряжать..
{
if (brk>2) break; //если нажата средняя кнопка более 2 сек выход из цикла заряда
if (tims==5) if (cur<10) // если отсутствует зарядный ток то
{
lcd_gotoxy(0,2);
lcd_putsf(" ");
lcd_gotoxy(0,3);
lcd_putsf(" ");
lcd_gotoxy(0,2);
lcd_putsf("NEISPRAVNOST I=0,00A");
lcd_gotoxy(0,3);
lcd_putsf("Proverte podkluhenie");
zar=0; // отключаем заряд
// PORTC.3=0; //отключаем зарядное
led=1; //включаем светодиод "неисправность"
#asm("cli") //запрещаем прерывания (останавливаем время)
key(i); // ждём нажатия любой клавиши
#asm("sei") //разрешаем прерывания (запускаем время)
lcd_gotoxy(0,2);
lcd_putsf(" ");
lcd_gotoxy(0,3);
lcd_putsf(" "); PORTC.5=1; //выключаем светодиод "неисправность"
lcdzrzr(); // вывод с,i,U в две нижние строки
zar=1; // включаем заряд
led=0; //выключаем светодиод "неисправность"
}
lcdtime(); //Выводим время на лсд
lcd_gotoxy(11,2); // координаты
lcdv (cah/120,4); //вывода ёмкости, и её вывод
lcd_putsf("A*h ");
lcdUI() ; // выводим на лсд значение тока и напряжения
if (cur>180) cul=1; else cul=0; // если ток заряда превышает 1.8А включить вентиллятор иначе выключить
if (cur>750) peregr(); // если ток разряда более 7,5А процедура перегрузки
if (err==1) break;
if (v1>1) //если режим заряда не постоянный z>1 включаем алгоритм ассиметр заряда
{
if (t<(10-(v1-1))*150)zar=1,raz=0; else raz=1,zar=0;
if (t>=1500) t=0;
}
}
zar=0; //выключаем зарядное
cul=0; // выключаем охлаждение
}
int razrdo (int uvkl1) //+++функция выбора U откл. разряда (порог отключения)+++
{
unsigned char i3=0;
lcd_clear();
lcd_gotoxy(0,1);
lcd_putsf("Razrjd do ");
while (i3!=2)
{
lcd_gotoxy(11,1);lcd_putsf(" ");
lcd_gotoxy(11,1);
lcdv (uvkl1,4); // вывод напряжеения отключения на лсд
i3=key(i3);
if (i3==1) if (uvkl1>200) uvkl1=uvkl1-10;
if (i3==3) if (uvkl1<1600) uvkl1=uvkl1+10;
}
lcd_gotoxy(0,1);
lcd_putsf(" ");
return (uvkl1);
}
int razrjd (int uvkl2,unsigned char z4) //+++функция разряд+++++
{
lcdzrzr(); //печать U,I,C= в свои места
// lcdUI (); // вывод напруги и тока в стандартные места
vol=uvkl2+10;
raz=1; //включаем нагрузку
t=0;t1=0;tims=0,timm=0,timh=0,cah=0; // обнуляем время и ёмкость акб
delay_ms(120);
while (vol>uvkl2) // пока Uакб больше заданного выполнять цикл
{
if (brk>2) break; //если нажата средняя кнопка более 2 сек выход из цикла
lcdtime(); //вывод времени
lcd_gotoxy(11,2); // координаты
lcdv (cah/120,4); //вывода ёмкости, и её вывод
lcd_putsf("A*h");
lcdUI (); // вывод напруги и тока в стандартные места
if (cur>750) peregr(); // если ток разряда более 7,5А процедура перегрузки
if (err==1) break;
}
raz=0; //выключаем нагрузку
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(1<<DDC6) | (0<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 8,192 ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<TOIE0);
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ACME);
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 5
// RD - PORTC Bit 6
// EN - PORTD Bit 6
// D4 - PORTD Bit 7
// D5 - PORTB Bit 0
// D6 - PORTB Bit 1
// D7 - PORTB Bit 2
// Characters/line: 16
lcd_init(20);
// Globally enable interrupts
#asm("sei")
while (1)
{
int uotkl=1380,uvkli=1080; //первоначальные значения откл. заряда 14,8В и разр 10,8В
unsigned char z=1,ci=1,i,v; //вспом.переменные
cul=0; // выключаем охлаждение
zar=0; //отключаем заряд
raz=0; //отключаем разряд
led=0; //выключаем светодиод "внимание"
err=0; //переменная перегрузки по току 1-отключает заряд и разряд
lcd_clear();
lcd_gotoxy(0,0); //приветствуем чуваков
lcd_putsf("KONTROLLER ZARJDNOGO"); //
lcd_gotoxy(0,1); //
lcd_putsf("Dlj AUTO battary"); // OT Dlj AUTO battary
lcd_gotoxy(0,2);
lcd_putsf("I(zar,razr)max=3 A "); // I(zar,razr)max=7.5A
lcd_gotoxy(0,3);
lcd_putsf("ALEX_641 VER4.2 2020"); //ALEX_641 VER4.2 2020
delay_ms(3000); // ждём 3 сек
lcd_clear();// стираем приветствие
i=0; // обнуляем i для корректной работы выбора режима, при новом цикле( после отработавшего режима)
lcd_gotoxy(3,3);
lcd_putsf("U(AKB)=");
lcd_gotoxy(0,0);
lcd_putsf("Vibor rejima:"); //++выбор режима заряд,разряд,тренировка++
while (z<6)
{
lcd_gotoxy(0,1);
lcd_putsf(" ");
lcd_gotoxy(0,1);
if (z==1) lcd_putsf("Zarjad auto"); //выбираем
if (z==2) lcd_putsf("Zarjad ruchnoi"); //выбираем
if (z==3) lcd_putsf("Razrjad"); //режим
if (z==4) lcd_putsf("Trenirovka"); //работы
if (z==5) lcd_putsf("Zarjad-Razrjad izm C"); //работы
while (i==0)
{
if (PIND.2==0) i=1; //левая кнопка "-"
if (PIND.3==0) i=2; // средняя "выбор"
if (PIND.4==0) i=3; // правая кнопка "+"
lcd_gotoxy(10,3);
vol=read_adc(0)*2;
lcdv (vol,4);
lcd_putsf(" ");
}
delay_ms(300);
if (i==1) if (z>1) z=z-1; // и если нажата клавиша "выбор"
if (i==2) z=z+5; //выходим из цикла выбора увеличив z на 5
if (i==3) if (z<5) z=z+1;
i=0;
}
// ++++алгоритм заряда++++++
if (z==6)
{
v=vibrej(v); //выбор режима заряда в переменную v
uotkl=zardo (uotkl) ; //выбор Uоткл заряда в переменную uotkl
zarjd (uotkl,z,v); // заряд до uotkl с режимом v
lcd_gotoxy(11,3);
lcd_putsf("vypolneno");
led=1; //включаем светодиод "внимание"
i=key(i); //ожидание нажатия любой кнопки
}
if (z==7) // ручной заряд
{
lcd_gotoxy(0,0);
lcd_putsf(" "); //стираем старые надписи
zar=1; // включаем зарядное
lcd_gotoxy(0,2);
lcd_putsf(" ");
lcd_gotoxy(0,3);
lcd_putsf(" ");
lcdzrzr(); // вывод с,i,U в две нижние строки
t=0;t1=0;tims=0,timm=0,timh=0;cah=0; //обнуляем таймеры и часы реальн. времени
while(1)
{
if (brk>2) break; //если нажата средняя кнопка более 2 сек выход из цикла заряда
lcdtime(); //Выводим время на лсд
lcd_gotoxy(11,2); // координаты
lcdv (cah/120,4); //вывода ёмкости, и её вывод
lcd_putsf("A*h ");
lcdUI() ; // выводим на лсд значение тока и напряжения
if (cur>180)cul=1; else cul=0; // если ток заряда превышает 1.8А включить вентиллятор иначе выключить
if (cur>750)peregr(); // если ток разряда более 7,5А процедура перегрузки
if (err==1)
{
lcd_gotoxy(0,1);
lcd_putsf(" "); //стираем старые надписи
lcd_gotoxy(0,1);
lcd_putsf("Zarjad ruchnoi"); //выбираем
zar=1; // включаем зарядное
lcd_gotoxy(0,2);
lcd_putsf(" ");
lcd_gotoxy(0,3);
lcd_putsf(" ");
lcdzrzr(); // вывод с,i,U в две нижние строки
err=0;
cul=0; // выключаем охлаждение
led=0;
}
}
zar=0; //выключаем заряд
cul=0; // выключаем охлаждение
}
if (z==8) // ++++алгоритм разряда++++++
{
uvkli=razrdo (uvkli); //выбор напряжения отключения заряда в uvkli
lcd_gotoxy(2,0);
lcd_putsf("Razrjd do ");
lcdv (uvkli,4);
razrjd (uvkli,z); //разряд до uvkli
lcd_gotoxy(11,3);
lcd_putsf("vypolneno");
led=1; //включаем светодиод "ВНИМАНИЕ"
i=key(i);
}
if (z==9) // ++++алгоритм тренировки++++++
{
i=0; //вспомогательная переменная
while (i!=2) //пока не нажата клавиша "выбор" устанавливаем кол-во циклов
{
lcd_clear();
lcd_putsf("Kolih siklov-");
lcd_gotoxy(13,0);
lcdv (ci,2); // вывод количества циклов
i=key(i); // получаем код нажатой клавиши
if (i==1) if (ci>1) ci=ci-1; //если "-" убавляем до 1 с шагом 1
if (i==3) if (ci<99) ci=ci+1; //если "+" прибавляем с шагом 1 до 99
}
lcd_clear();
i=0;
uvkli=razrdo (uvkli); //выбор напряжения отключения заряда в uvkli
uotkl=zardo (uotkl) ; //выбор Uоткл заряда в переменную uotkl
v=vibrej(v); //выбор режима заряда в переменную v
lcdv (uvkli,4); //вывод на экран Uоткл разр
lcd_gotoxy(11,0);
lcdv (uotkl,4); //вывод на экран Uоткл зар
lcd_gotoxy(18,0);
lcdv (ci,2); //
lcd_gotoxy(10,1);lcd_putsf("C0=0,00");
while (ci!=0) //пока кол-во циклов >0 продолжаем
{
lcd_gotoxy(9,0);lcd_putsf(" ");
lcd_gotoxy(6,0);lcd_putsf("<");lcdv ( ci,2);
razrjd (uvkli,z); //разряд до uvkli
lcd_gotoxy(13,1); lcdv (cah/120,4); // вывод ёмкости прошлого законченного цикла
lcd_putsf(" ");
lcd_gotoxy(6,0);lcd_putsf(" ");
lcd_gotoxy(9,0);lcd_putsf(">");
zarjd (uotkl,z,v);
lcd_gotoxy(13,1); lcdv (cah/120,4); //вывод ёмкости прошлого законченного цикла
ci=ci-1;
}
lcd_gotoxy(11,3);
lcd_putsf("vypolneno");
led=1;; //включаем светодиод "неисправность"
i=key(i);
}
if (z==10) // ++++алгоритм заряд-разряд подсчёт ёмкости++++++
{
lcd_clear();
i=0;
uvkli=razrdo (uvkli); //выбор напряжения отключения заряда в uvkli
uotkl=zardo (uotkl) ; //выбор Uоткл заряда в переменную uotkl
v=vibrej(v); //выбор режима заряда в переменную v
lcd_putsf("C-metr");
lcd_gotoxy(7,0);
lcdv (uvkli,4); //вывод на экран Uоткл разр
lcd_gotoxy(15,0);
lcdv (uotkl,4); //вывод на экран Uоткл зар
lcd_gotoxy(13,0);
lcd_putsf(">");
lcd_gotoxy(10,1);lcd_putsf("C0=0,00");
zarjd (uotkl,z,v);
lcd_gotoxy(13,1); lcdv (cah/120,4);
lcd_gotoxy(13,0);
lcd_putsf("<");
razrjd (uvkli,z); //разряд до uvkli
lcd_gotoxy(11,3);
lcd_putsf("vypolneno");
led=1; //включаем светодиод "внимание"
i=key(i); // ждём нажатия любой кнопки и выход в меню выбора режимов
}
}
}