#include #include //////////////////////////////////////////////////////////////////////////////////////////// // ATmega8: кварц - 4 МHz; фьюзы: Low EF; Higt C9. // RC - 4 МHz; фьюзы: Low E3; Higt D9. // таймер 2 - ШИМ - 15.625 Hz //////////////////////////////////////////////////////////////////////////////////////////// // EEPROM // 00 - контрастность OLED 128x64 - SH1106. // 01,02 - коррекция часы ATmega8: кварц - 4 МHz. // 03 - частота nRF24L01+: 2.400GHz до 2.525GHz. 00000000(0)...01111101(125). // 04 - мощность nRF24L01+: 11 10 01 00 // 05 - частота кадров LCD 4/8/16/32 - OLED 128x64 - SH1106. // 06 - обдув 40/50/60/70/80 // 07 - защита аккум от переразряда модель 1 // 08 - флаг защита аккум от переразряда модель 1 // 09 - защита аккум от переразряда модель 2 // 10 - флаг защита аккум от переразряда модель 2 // 11 - флаг зуммер // 12 - буфер круиз-контроль // 13 - адрес пульт // 14 - флаг Вкл свет // 15 - флаг Вкл потоп //////////////////////////////////////////////////////////////////////////////////////////// // nRF24L01+ : преамбула - 1, адрес - 5, Data - 8, CRC16 - 2 // скорость: 250kbps; 0,000.512с. // 32 пак/c. цикл 0,031.25c. //////////////////////////////////////////////////////////////////////////////////////////// // пульт // Data: АЦП - ШИМ - кнопки - АЦП2 - частота - номер пакета пульт - CRC16 - CRC16. // u - АЦП: 0...255. // q/w - ШИМ: 0...255. // k - кнопки: // pw - мощность: 11 10 01 00 // (......11) 11 10 01 00 // (........) 0- Вкл(Выкл) меню // (........) 1- Выбор меню / Вкл(Выкл) LCD // (.....1..) 2- обдув 40/50/60/70/80; // (....1...) 3- Вкл(Выкл) фары // (........) 4- скорость 80/90/100 // (..1.....) 5- Вкл(Выкл) резервный аккумулятор // (.1......) 6- Вкл выгрузка // (1.......) 7- флаг свет // u2 - АЦП2: 0...255. // ch - частота: 2.400GHz до 2.525GHz. 00000000(0)...01111101(125) // n - номер пакета пульт: 0...255. //////////////////////////////////////////////////////////////////////////////////////////// // модель // Data: аккум - температура - вода - аккум2 - датчик тока - номер пакета модель - CRC16 - CRC16. // g - аккум модель: 0...255. // t - температура модель: ds18b20: 0 C^ (00000000)... 128 C^ (10000000) (начальное 85 C^ - 01010101) // v - датчик вода: // (.......1) 1 - вкл. вода модель // (......1.) 1 - вкл. выгрузка модель (геркон 2 база) // (.....1..) 1 - вкл. выгрузка модель (геркон 1 выгрузка) // (....1...) 1 - вкл. выгрузка модель (реле 6.2 база) // (...1....) 1 - вкл. выгрузка модель (реле 6.1 выгрузка) // g2 - аккум2: 0...255. // tok - датчик тока: 0...255. / температура 2 // m - номер пакета модель: 0...255. (n (запрос) = m (ответ)). //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// char x; // x - счёт char z; // z - счёт char zn; // zn - счёт знаки int a; // a - счёт int b; // b - счёт /////////////////////////////////////////////// контроль связь пульт char c; // с - цикл char fc; // fc - флаг связи char zvuk_c; // zvuk_c - счёт звук нет связи /////////////////////////////////////////////// Data пульт char u; // u - АЦП int ub; // ub - буфер АЦП char q; // q - ШИМ int qb; // qb - буфер ШИМ //char RH=100; // RH - скорость 80/90/100. //char bRH; // bRH - буфер скорость 80/90/100. char w; // w - ШИМ коробка передач char wb; // wb - буфер ШИМ коробка передач char k; // k - кнопки char obduv = 40; // obduv - обдув 40/50/60/70/80 char u2; // u2 - АЦП2 int ub2; // ub2 - буфер АЦП2 char ch=125; // ch - частота запроса char chb=125; // chb - частота буфер // 2.525GHz. - 01111101(125) - вызывной канал int chi; // chi - частота индикатор char n; // n - номер пакета пульт char p; // p - аккум пульт int pb; // pb - буфер аккум пульт char pw; // pw - мощность 11 10 01 00 char pwb; // pwb -буфер мощность /////////////////////////////////////////////// Data модель char g; // g - аккум модель char t; // t - датчик температура модель char v; // v - датчик вода модель char g2; // g2 - аккум модель 2 char tok; // tok - датчик тока / температура 2 char m; // m - номер пакета модель /////////////////////////////////////////////// crc TX/RX int crc; // crc - crc int bcrc; // bcrc - crc буфер /////////////////////////////////////////////// счётчик пакетов char s; // s - счётчик пакетов s = sT - sR char sT; // sT - счётчик пакетов пульт char sR; // sR - счётчик пакетов модель ////////////////////////////////////////////// контроль пакетов Tx (n) > Rx (m): //char kp; // kp - контроль пакетов /////////////////////////////////////////////// кнопки пульт /////////////////////////////////////////////// 0- Вкл(Выкл) меню char k0; // k0 - счётчик кнопки 0 //char kb0; // kb0 - буфер кнопки 0 char flag_k0; // флаг кнопки 0 /////////////////////////////////////////////// 1- Выбор меню / Вкл(Выкл) LCD char k1; // k1 - счётчик кнопки 1 char kb1; // kb1 - буфер кнопки 1 char flag_k1; // флаг кнопки 1 /////////////////////////////////////////////// (.....1..) 2- Вкл(Выкл)обдув 40/50/60/70/80; //char k2; // k2 - счётчик кнопки 2 //char kb2; // kb2 - буфер кнопки 2 //char flag_k2; // флаг кнопки 2 /////////////////////////////////////////////// (....1...) 3- Вкл(Выкл) фары char k3; // k3 - счётчик кнопки 3 //char kb3; // kb3 - буфер кнопки 3 char flag_k3; // флаг кнопки 3 /////////////////////////////////////////////// 4- скорость 80/90/100 //char k4; // k4 - счётчик кнопки 4 //char kb4; // kb4 - буфер кнопки 4 //char flag_k4; // флаг кнопки 4 /////////////////////////////////////////////// (..1.....) 5- Вкл(Выкл) резервный аккумулятор char k5; // k5 - счётчик кнопки 5 //char kb5; // kb5 - буфер кнопки 5 char flag_k5; // флаг кнопки 5 /////////////////////////////////////////////// (.1......) 6- Вкл выгрузка char k6; // k6 - счётчик кнопки 6 //char kb6; // kb6 - буфер кнопки 6 char flag_k6; // флаг кнопки 6 /////////////////////////////////////////////// 7- круиз-контроль char k7; // k7 - счётчик кнопки 7 //char kb7; // kb7 - буфер кнопки 7 char flag_k7; // флаг кнопки 7 /////////////////////////////////////////////// часы //char hr; // hr - счётчик //char dni; // dni - дни 00 //char hour; // hour - час 00 //char min; // min - минуты 00 //char sec; // sec - секунды 00 int kor=15625; // kor - коррекция часы /////////////////////////////////////////////// индикатор вода модель v //char in_v; // счёт индикатор v модель /////////////////////////////////////////////// индикатор температура модель t char in_t; // счёт индикатор t модель /////////////////////////////////////////////// индикатор LCD char LCD_ON; // LCD_ON char menu; // menu - счёт меню LCD char kontr=150; // kontr - контрастность индикатор char h; // h - шкала char hp; // hp - шкала аккум пульт char hg; // hg - шкала аккум модель char hg2; // hg2 - шкала аккум модель 2 char kadry = 4; // kadry - частота кадров LCD 4/8/16/32 /////////////////////////////////////////////// бузер char buzer=0xFF; // бузер /////////////////////////////////////////////// защита аккумов от переразряда char zasita_1=50; // 07 - защита аккум от переразряда модель 1 char f_zasita_1; // 08 - флаг защита аккум от переразряда модель 1 char ff_zasita_1; // флаг зуммер char zasita_2=50; // 09 - защита аккум от переразряда модель 2 char f_zasita_2; // 10 - флаг защита аккум от переразряда модель 2 char ff_zasita_2; // флаг зуммер //////////////////////////////////////////////// ГОТОВ char gotov; // флаг готов //////////////////////////////////////////////// контроль пакетов int kontrol_TX; // контрольTX int kontrol_TX_b; // буфер контроль TX int kontrol_RX; // контроль RX int kontrol_RX_b; // буфер контроль RX //int kontrol_CRC; // контроль CRC //int kontrol_CRC_b; // буфер контроль CRC //////////////////////////////////////////////// EEPROM char flag_TX_EEPROM;// флаг запись EEPROM char flag_AU_EEPROM = 0xFF;// флаг АВТО сохр EEPROM //////////////////////////////////////////////// буфер char bufer[18]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //////////////////////////////////////////////// круиз-контроль char flag_ON_kruiz; // флаг вкл. круиз-контроль char flag_kruiz; // флаг круиз-контроль char f_flag_kruiz = 0xFF; // флаг круиз-контроль char b_bufer_kruiz; // буфер круиз-контроль char bb_bufer_kruiz;// буфер круиз-контроль char bufer_kruiz; // буфер круиз-контроль //////////////////////////////////////////////// Вкл свет char flag_svet = 0xFF; // флаг Вкл свет //////////////////////////////////////////////// Вкл потоп char flag_potop = 0xFF;// флаг Вкл потоп //////////////////////////////////////////////// адрес nRF24L01+ char Address_Pult = 1; // адрес nRF24L01+ начальное 1. char flag_Address_Pult;// флаг запись nRF24L01+ ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// LCD char znaki[50][5]={ 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x21, 0x41, 0x49, 0x4D, 0x33, // 3 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 0x27, 0x45, 0x45, 0x45, 0x39, // 5 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 0x41, 0x21, 0x11, 0x09, 0x07, // 7 0x36, 0x49, 0x49, 0x49, 0x36, // 8 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 0x7E, 0x11, 0x11, 0x11, 0x7E, //A 10 0x7F, 0x49, 0x49, 0x49, 0x30, //Б 11 0x7F, 0x49, 0x49, 0x49, 0x36, //B 12 0x7F, 0x01, 0x01, 0x01, 0x01, //Г 13 0x60, 0x3E, 0x21, 0x3F, 0x60, //Д 14 0x7F, 0x49, 0x49, 0x49, 0x41, //Е 15 0x67, 0x18, 0x7F, 0x18, 0x67, //Ж 16 0x22, 0x41, 0x49, 0x49, 0x36, //3 17 0x7F, 0x10, 0x08, 0x04, 0x7F, //И 18 0x7F, 0x10, 0x09, 0x04, 0x7F, //Й 19 0x7F, 0x08, 0x14, 0x22, 0x41, //K 20 0x40, 0x3E, 0x01, 0x01, 0x7E, //Л 21 0x7F, 0x02, 0x04, 0x02, 0x7F, //M 22 0x7F, 0x08, 0x08, 0x08, 0x7F, //H 23 0x3E, 0x41, 0x41, 0x41, 0x3E, //O 24 0x7F, 0x01, 0x01, 0x01, 0x7F, //П 25 0x7F, 0x09, 0x09, 0x09, 0x06, //P 26 0x3E, 0x41, 0x41, 0x41, 0x22, //C 27 0x01, 0x01, 0x7F, 0x01, 0x01, //T 28 0x27, 0x48, 0x48, 0x48, 0x3F, //У 29 0x1E, 0x21, 0x7F, 0x21, 0x1E, //Ф 30 0x63, 0x14, 0x08, 0x14, 0x63, //X 31 0x3F, 0x20, 0x20, 0x3F, 0x40, //Ц 32 0x1F, 0x10, 0x10, 0x10, 0x7F, //Ч 33 0x7F, 0x40, 0x7F, 0x40, 0x7F, //Ш 34 0x3F, 0x20, 0x3F, 0x20, 0x7F, //Щ 35 0x01, 0x7F, 0x44, 0x44, 0x38, //Ъ 36 0x7F, 0x44, 0x7C, 0x00, 0x7F, //Ы 37 0x7F, 0x44, 0x44, 0x44, 0x38, //Ь 38 0x22, 0x41, 0x49, 0x49, 0x3E, //Э 39 0x7F, 0x08, 0x7F, 0x41, 0x7F, //Ю 40 0x46, 0x29, 0x19, 0x09, 0x7F, //Я 41 0x1F, 0x20, 0x40, 0x20, 0x1F, //V 42 0x7F, 0x09, 0x19, 0x29, 0x46, //R 43 0x44, 0x64, 0x54, 0x4C, 0x44, //z 44 0x00, 0x08, 0x14, 0x22, 0x41, //< 45 0x08, 0x08, 0x3E, 0x08, 0x08, //+ 46 0x08, 0x08, 0x08, 0x08, 0x08, //- 47 0x00, 0x36, 0x36, 0x00, 0x00, //: 48 0x41, 0x22, 0x14, 0x08, 0x00 //> 49 }; char antenka[9]={ 0b00000011, 0b00000101, 0b00001001, 0b00010001, 0b01111111, 0b00010001, 0b00001001, 0b00000101, 0b00000011 }; char S_metr[8]={ 0b01000000, 0b01100000, 0b01110000, 0b01111000, 0b01111100, 0b01111110, 0b01111111, 0b01111111 }; char pw_metr[3]={ 0b01110000, 0b01111000, 0b01111100 }; /////////////////////////////////////////////////////////////////////////////// interrupt [TIM0_OVF] void timer0_ovf_isr(void) // 4.000.000/8=500.000/256= цикл 1.953 ,125 { if (PIND.5==0) flag_k0 = 1; // флаг кнопки 0 // (........) 0- Вкл(Выкл)меню if (PIND.6==0) flag_k1 = 1; // флаг кнопки 1 // (........) 1- Выбор меню / Вкл(Выкл) LCD if (PINB.0==0) flag_k3 = 1; // флаг кнопки 3 // (....1...) 3- Вкл(Выкл) фары //if (PINC.4==0) flag_k4 = 1; // флаг кнопки 4 // скорость if (PIND.7==0) flag_k5 = 1; // флаг кнопки 5 // (..1.....) 5- Вкл(Выкл) резервный аккумулятор if (PINC.3==0) flag_k6 = 1; // флаг кнопки 6 // (.1......) 6- Вкл выгрузка if (PINC.5==0) flag_k7 = 1; // флаг кнопки 7 // 7- круиз-контроль } //////////////////////////////////////////////////////////////////// АЦП: //-0,000.070c void adc(char adc_input) { ADMUX = 0b01000000 | adc_input; // опорное AVCC // канал ADC0...ADC7 delay_us(10); // стабилизация входа. ADCSRA|=0b01000000; // Старт. При завершении преобразования сбрасывается аппаратно. while (ADCSRA & 0b01000000); // Ждём окончания преобразования. } /////////////////////////////////////////////////////////////////// fcrc: TX/RX void fcrc(void) { crc ^= bcrc; // CRC-16-CCITT // 0x1021 x^16 + x^12 + x^5 + 1 // 1. 0001.0000 0010.0001 for( a = 0; a < 16; a++ ){ if (crc & 0x8000) crc = ( crc << 1 ) ^ 0x1021; else crc = crc << 1; }; } ////////////////////////////////////////////////////////////////////// LCD OLED 128x64 - SH1106: /////////////////////////////////////////////// курсор: void kursor(char Page) //Set Page Address { PORTD.1=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0b10110000|Page; while(!(SPSR & (1<<7))); // Y - адрес 1011xxxx SPDR=0b00010000; while(!(SPSR & (1<<7))); // X - адрес 0001xxxx Hig SPDR=0b00000010; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 2). // для SH1106 //SPDR=0b00000000; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 0).// для HDG12864F-1 PORTD.1=1; // D/C. 0 – Function, 1 – data. OLED 128x64 } /////////////////////////////////////////////// знаки: void LCD(char zy) { for (zn=0; zn<5; zn++) { SPDR=znaki[zy][zn]; while(!(SPSR & (1<<7))); }; SPDR=0b00000000; while(!(SPSR & (1<<7))); // " " } /////////////////////////////////////////////// счётчик 0...9: void st_10(char bi) // bi - буфер индикатор { z=0; while (bi) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// часы 0...99: void st_100(char bi) // bi - буфер индикатор { z=0; while (bi>99){z++; bi=bi-100;}; z=0; while (bi>9) {z++; bi=bi-10;}; LCD(z); z=0; while (bi) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// счётчик 0...999: void st_1000(char bi) // bi - буфер индикатор { z=0; while (bi>99){z++; bi=bi-100;}; LCD(z); z=0; while (bi>9) {z++; bi=bi-10;}; LCD(z); z=0; while (bi) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// счётчик 0...9999: void st_10000(int bi) // bi - буфер индикатор { z=0; while (bi>999){z++; bi=bi-1000;}; LCD(z); z=0; while (bi>99) {z++; bi=bi-100;}; LCD(z); z=0; while (bi>9) {z++; bi=bi-10;}; LCD(z); z=0; while (bi) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// счётчик 0...99999: void st_100000(int bi) // bi - буфер индикатор { z=0; while (bi>9999){z++; bi=bi-10000;}; LCD(z); z=0; while (bi>999) {z++; bi=bi-1000;}; LCD(z); z=0; while (bi>99) {z++; bi=bi-100;}; LCD(z); z=0; while (bi>9) {z++; bi=bi-10;}; LCD(z); z=0; while (bi) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// pp - пауза: void fpp(char bi) // bi - буфер индикатор { for (x=0; x 99) bi = 99; //////////////////////////////////// z=0; while (bi>9) {z++; bi=bi-10;}; LCD(z); SPDR=0b01000000; // "." while(!(SPSR & (1<<7))); SPDR=0b00000000; // " " while(!(SPSR & (1<<7))); z=0; while (bi>0) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// аккум модель: void ak_model(char bi) { // опорное 5V; + 7...13,2 V; Делитель 1/5,12. (1/2,56). //////////////////////////////////// z=0; while (bi>99) {z++; bi=bi-100;}; LCD(z); z=0; while (bi>9) {z++; bi=bi-10;}; LCD(z); SPDR=0b01000000; // "." while(!(SPSR & (1<<7))); SPDR=0b00000000; // " " while(!(SPSR & (1<<7))); z=0; while (bi>0) {z++; bi=bi-1;}; LCD(z); } /////////////////////////////////////////////// шкала 0 аккум: void skala_0_ak(char bi) { SPDR=0b11111110; // | while(!(SPSR & (1<<7))); for (x=0;x<31;x++) { if (x<(bi/2)) h=0b11111110; // |_ _ _ else h=0b00000010; SPDR=h; while(!(SPSR & (1<<7))); }; SPDR=0b11111110; // |_ _ _| while(!(SPSR & (1<<7))); SPDR=0b11100000; // |_ _ _|| while(!(SPSR & (1<<7))); SPDR=0b11100000; // |_ _ _||| while(!(SPSR & (1<<7))); } /////////////////////////////////////////////// шкала 1 аккум: void skala_1_ak(char bi) { SPDR=0b01111111; // | while(!(SPSR & (1<<7))); for (x=0;x<31;x++) { if (x<(bi/2)) h=0b01111111; // |_ _ _ else h=0b01000000; SPDR=h; while(!(SPSR & (1<<7))); }; SPDR=0b01111111; // |_ _ _||| while(!(SPSR & (1<<7))); SPDR=0b00000111; // |_ _ _|| while(!(SPSR & (1<<7))); SPDR=0b00000111; // |_ _ _| while(!(SPSR & (1<<7))); } /////////////////////////////////////////////// EEPROM_TX: // -3,1mc void EEPROM_TX(int Address, char Data) { EEAR = Address; // адрес EEPROM EEDR = Data; // Data EEPROM EECR |= 0b00000100; // Главное разрешение записи в EEPROM EECR |= 0b00000010; // Запуск записи в EEPROM while(EECR & 0b00000010); // Ожидаем окончание предыдущей записи } /////////////////////////////////////////////// EEPROM_RX: //void EEPROM_RX(int Address) //{ //while(EECR & 0b00000010); // Ожидаем окончание предыдущей записи //EEDR; // Data EEPROM //EEAR = Address; // адрес EEPROM //EECR |= 0b00000001; // чтение из EEPROM //} /////////////////////////////////////////////// EEPROM_RX: // -1,9mc void EEPROM_RX(void) { /////////////////////////////////////////////////////////////////////////////// читаем EEPROM // -0,12mc for (x=0;x<18;x++) { EEAR = x; // адрес EEPROM EECR |= 0b00000001; // чтение из EEPROM bufer[x]=EEDR; // Data EEPROM }; /////////////////////////////////////////////////////////////////////////////// crc буфер // -1,5mc crc=0; bcrc=0xFFFF; fcrc(); // сброс // начальное for (b=0;b<18;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); // буфер }; ////////////////////// проверка crc: // -0,02mc if (crc==0) { kontr=bufer[0]; // 00 - контрастность OLED 128x64 - SH1106. kor=bufer[1]; // 01,02 - коррекция часы: кварц - 4 МHz. kor=(kor<<8)|bufer[2]; ch=bufer[3]; // 03 - частота nRF24L01+: 2.400GHz до 2.525GHz. 00000000(0)...01111101(125). pw=bufer[4]; // 04 - мощность nRF24L01+: 11 10 01 00 kadry=bufer[5]; // 05 - частота кадров LCD 4/8/16/32 obduv=bufer[6]; // 06 - обдув 40/50/60/70/80 zasita_1=bufer[7]; // 07 - защита аккум от переразряда модель 1 f_zasita_1=bufer[8]; // 08 - флаг защита аккум от переразряда модель 1 zasita_2=bufer[9]; // 09 - защита аккум от переразряда модель 2 f_zasita_2=bufer[10];// 10 - флаг защита аккум от переразряда модель 2 buzer=bufer[11]; // 11 - флаг зуммер bufer_kruiz=bufer[12];// 12 - буфер круиз-контроль Address_Pult=bufer[13];// 13 - адрес пульт flag_svet=bufer[14]; // 14 - флаг Вкл свет flag_potop=bufer[15]; // 15 - флаг Вкл потоп } ////////////////////// ошибка crc: else { menu = 50; // > ошибка EEPROM }; } /////////////////////////////////////////////// Адрес nRF24L01+: void Address_TX_RX(void) { PORTB.2=0; // SS SPDR=0b00110000; while(!(SPSR & (1<<7))); // 0x10 TX_ADDR_P0: Адрес передатчика SPDR=Address_Pult; while(!(SPSR & (1<<7))); // адрес пульт начальное 1. //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x........C7 SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x......C7.. SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x....C7.... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x..C7...... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0xC7........ PORTB.2=1; // SS //0xE7E7E7E7E7 (11100111 11100111 11100111 11100111 11100111) - По умолчанию PORTB.2=0; // SS SPDR=0b00101010; while(!(SPSR & (1<<7))); // 0x0A RX_ADDR_P0: Адрес приёмника SPDR=Address_Pult; while(!(SPSR & (1<<7))); // адрес пульт начальное 1. //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x........C7 SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x......C7.. SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x....C7.... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x..C7...... SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0xC7........ PORTB.2=1; // SS //0xE7E7E7E7E7 (11100111 11100111 11100111 11100111 11100111) - По умолчанию } //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// void main(void) { ////////////////////////////////////////////// контроль //DDRC.2=1; // контроль //PORTC.2=0; // контроль ////////////////////////////////////////////// SPI аппаратный DDRB.5=1; // SCK PORTB.5=0; // SCK DDRB.4=0; // MISO PORTB.4=0; // MISO DDRB.3=1; // MOSI PORTB.3=0; // MOSI DDRB.2=1; // SS (вход CSN) nRF24L01+ PORTB.2=1; // SS (вход CSN +) nRF24L01+ ////////////////////////////////////////////// nRF24L01+ DDRC.0=1; // CE nRF24L01+ PORTC.0=0; // CE nRF24L01+ //////////////////////////////////////////// OLED 128x64 - SH1106 DDRD.0=1; // SS (вход SE) OLED 128x64 PORTD.0=1; // SS (вход SE +) OLED 128x64 DDRD.1=1; // D/C 1 – data, 0 – Function. OLED 128x64 PORTD.1=1; // D/C 1 – data, 0 – Function. OLED 128x64 DDRD.2=1; // RESET OLED 128x64 PORTD.2=1; // RESET + OLED 128x64 ////////////////////////////////////////////// кнопки DDRD.5=0; // (........) 0- Вкл(Выкл) меню PORTD.5=1; // (........) 0- Вкл(Выкл) меню DDRD.6=0; // (........) 1- Выбор меню / Вкл(Выкл) LCD PORTD.6=1; // (........) 1- Выбор меню / Вкл(Выкл) LCD //DDRD.7=0; // (........) 2- Вкл(Выкл) обдув 40/50/60/70/80; //PORTD.7=1; // (........) 2- Вкл(Выкл) обдув 40/50/60/70/80; DDRB.0=0; // (....1...) 3- Вкл(Выкл) фары PORTB.0=1; // (....1...) 3- Вкл(Выкл) фары DDRC.4=0; // (........) 4- скорость 80/90/100 PORTC.4=1; // (........) 4- скорость 80/90/100 DDRD.7=0; // (..1.....) 5- Вкл(Выкл) резервный аккумулятор PORTD.7=1; // (..1.....) 5- Вкл(Выкл) резервный аккумулятор DDRC.3=0; // (.1......) 6- Вкл выгрузка PORTC.3=1; // (.1......) 6- Вкл выгрузка DDRC.5=0; // круиз-контроль PORTC.5=1; // круиз-контроль //////////////////////////////////////////// индикатор авария DDRD.4=1; // (.......1) 1 - вкл. вода модель /температура 40-50-60-70 /защита аккумов PORTD.4=0; // (.......1) 1 - вкл. вода модель /температура 40-50-60-70 /защита аккумов //DDRD.3=1; // вкл. температура 40-50-60-70 //PORTD.3=0; // вкл. температура 40-50-60-70 //DDRC.5=1; // вкл. защита аккумов от переразряда //PORTC.5=0; // вкл. защита аккумов от переразряда //DDRD=0b11111111; // контроль //PORTD=0b00000000;// контроль ////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// читаем EEPROM // -1,8mc EEPROM_RX(); // RX EEPROM /////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// SPI SPCR=0x50; // вкл SPI. // мастер // 4 МГц/4 = 1.000.000 Hz ////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// инициализация OLED 128x64 - SH1106: // 128x64 pixels = 1024 байт: цифра 5 + пробел 1 = 6 байт. 128/6=21 цифры/строка // 6x21=126 +2. /////////////////////////////////////////////////////////////////// RESET: delay_ms(100); // Power on reset 100ms PORTD.2=0; // RESET > 100 nс или более delay_ms(1); // PORTD.2=1; // RESET > 100 mс delay_ms(1); // /////////////////////////////////////////////////////////////////// Режим: PORTD.0=0; // SS OLED 128x64 PORTD.1=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0xA8; while(!(SPSR & (1<<7))); // сколько строк будет использовано. SPDR=0x3F; while(!(SPSR & (1<<7))); // (128x64) 64 - строки. SPDR=0x81; while(!(SPSR & (1<<7))); // контрастность. SPDR=kontr; while(!(SPSR & (1<<7)));// контрастность kontr 0...255. SPDR=0xA1; while(!(SPSR & (1<<7))); // развёртка слева направо (>>). /////////////////////////////////////////////////////////////////////////////// SPDR=0xC8; while(!(SPSR & (1<<7))); // развертка сверху вниз. // для SH1106 //SPDR=0xC0; while(!(SPSR & (1<<7)));// развертка снизу вверх. // для HDG12864F-1 /////////////////////////////////////////////////////////////////////////////// SPDR=0xDA; while(!(SPSR & (1<<7))); // развертка. SPDR=0x12; while(!(SPSR & (1<<7))); // прогрессивная развертка. SPDR=0xD3; while(!(SPSR & (1<<7))); // смещение. SPDR=0x00; while(!(SPSR & (1<<7))); // смещение 0. SPDR=0x40; while(!(SPSR & (1<<7))); // 01xx xxxx - начальное строка 0. SPDR=0xAF; while(!(SPSR & (1<<7))); // Display 0xAF - ON. //SPDR=0xAE; while(!(SPSR & (1<<7))); // Display 0xAE - OFF. PORTD.1=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTD.0=1; // SS OLED 128x64 //////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// инициализация nRF24L01+ : //delay_ms(100); // Power on reset 100ms PORTB.2=0; // SS SPDR=0b00100001; while(!(SPSR & (1<<7))); // 0x01 EN_AA: (Enhanced ShockBurst ™) - отключить. SPDR=0b00000000; while(!(SPSR & (1<<7))); // EN_AA = 0x00. PORTB.2=1; // SS PORTB.2=0; // SS SPDR=0b00100100; while(!(SPSR & (1<<7))); // 0x04 SETUP_RETR: (Enhanced ShockBurst ™) - отключить. SPDR=0b00000000; while(!(SPSR & (1<<7))); // SETUP_RETR = 0x00. PORTB.2=1; // SS //PORTB.2=0; // SS //SPDR=0b00100101; while(!(SPSR & (1<<7))); // 0x05 RF_CH: Частота //SPDR=0b01111101; while(!(SPSR & (1<<7))); // начальное - 2.525GHz. - 01111101(125) - вызывной канал //PORTB.2=1; // SS //PORTB.2=0; // SS //SPDR=0b00100110; while(!(SPSR & (1<<7))); // 0x06 RF_SETUP: Скорость и мощность //SPDR=0b00100110; while(!(SPSR & (1<<7))); // 250kbps; 0dBm. //PORTB.2=1; // SS Address_TX_RX(); //PORTB.2=0; // SS //SPDR=0b00110000; while(!(SPSR & (1<<7))); // 0x10 TX_ADDR_P0: Адрес передатчика //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x........C7 //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x......C7.. //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x....C7.... //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x..C7...... //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0xC7........ //PORTB.2=1; // SS //0xE7E7E7E7E7 (11100111 11100111 11100111 11100111 11100111) - По умолчанию //PORTB.2=0; // SS //SPDR=0b00101010; while(!(SPSR & (1<<7))); // 0x0A RX_ADDR_P0: Адрес приёмника //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x........C7 //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x......C7.. //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x....C7.... //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0x..C7...... //SPDR=0b11000111; while(!(SPSR & (1<<7))); // 0xC7........ //PORTB.2=1; // SS //0xE7E7E7E7E7 (11100111 11100111 11100111 11100111 11100111) - По умолчанию PORTB.2=0; // SS SPDR=0b00110001; while(!(SPSR & (1<<7))); // 0x11 RX_PW_P0: Длина полезной нагрузки для приёмника SPDR=0b00001000; while(!(SPSR & (1<<7))); //(LSB)...(MSB)-8 PORTB.2=1; // SS //////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// звук бузер if (buzer) DDRB.1=1; // звук бузер ВКЛ else DDRB.1=0; // звук бузер ВЫКЛ PORTB.1=0; // звук бузер ////////////////////////////////////////////// АЦП ADCSRA=0x84; // вкл ADC. // 4 МГц/16=250.000 Hz ////////////////////////////////////////////// таймер № 0 TCCR0=0x02; // 4.000.000/8=500.000/256= цикл 1.953 ,125 ////////////////////////////////////////////// Маска прерывание TIMSK=0x01; // Маска прерывание Таймер 0 ////////////////////////////////////////////// таймер № 1 ICR1=kor; // 500.000/15.625/32 Hz = 0,031.25c. TCCR1A=0x02; // режим - быстрая ШИМ // выкл.PB1(OC1A); выкл.PB2(OC1B) TCCR1B=0x1A; // режим - быстрая ШИМ // 4.000.000/8=500.000 Hz ////////////////////////////////////////////// Ст таймер WDTCR=0x1F; // Разрешение изменения ст таймера WDTCR=0x0F; // Вкл. ст таймер // время переполнения: 2,0c ////////////////////////////////////////////// Global interrupts: #asm("sei") //#asm("cli") /////////////////////////////////////////////////////////// _1: #asm("wdr") // Сброс ст таймер 1,0 c //////////////////////////////////////////// 32 пак/c. цикл 0,031.25c. while (!(TIFR & 0b00100000)); // флаг ICF1 - верхний предел счета ICR1. TIFR|=0b00100000; // сброс флага ICF1 //////////////////////////////////////////// контроль //PORTC.2=1; // контроль //delay_us(500); //PORTC.2=0; // контроль //////////////////////////////////////////////////////////////////////////////////////////////// часы: //hr++; // счётчик часы // 32 пак/c. цикл 0,031.25c. //if (hr>31) {hr=0; sec++;}; // секунды 00 //if (sec>59) {sec=0; min++;}; // минуты 00 //if (min>59) {min=0; hour++;} // часы 00 //if (hour>23){hour=0; dni++; };// дни 00 //if (dni>99) {dni=0;}; // дни //////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// запись nRF24L01+ if (flag_Address_Pult) { // флаг запись nRF24L01+ Address_TX_RX(); // запись nRF24L01+ flag_Address_Pult = 0; // сброс флаг запись nRF24L01+ }; ///////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// запись EEPROM if (flag_TX_EEPROM) { // флаг запись EEPROM ////////////////////////////////////////////////////////////////////////// пульт > буфер // -0,03mc bufer[0]=kontr; // 00 - контрастность OLED 128x64 - SH1106. bufer[1]=(kor>>8); // 01,02 - коррекция часы: кварц - 4 МHz. bufer[2]=kor; bufer[3]=ch; // 03 - частота nRF24L01+: 2.400GHz до 2.525GHz. 00000000(0)...01111101(125). bufer[4]=pw; // 04 - мощность nRF24L01+: 11 10 01 00 bufer[5]=kadry; // 05 - частота кадров LCD 4/8/16/32 bufer[6]=obduv; // 06 - обдув 40/50/60/70/80 bufer[7]=zasita_1; // 07 - защита аккум от переразряда модель 1 bufer[8]=f_zasita_1; // 08 - флаг защита аккум от переразряда модель 1 bufer[9]=zasita_2; // 09 - защита аккум от переразряда модель 2 bufer[10]=f_zasita_2;// 10 - флаг защита аккум от переразряда модель 2 bufer[11]=buzer; // 11 - флаг зуммер bufer[12]=bufer_kruiz;// 12 - буфер круиз-контроль bufer[13]=Address_Pult;// 13 - адрес пульт bufer[14]=flag_svet; // 14 - флаг Вкл свет bufer[15]=flag_potop; // 15 - флаг Вкл потоп ////////////////////////////////////////////////////////////////////////////// crc буфер // -1,5mc crc=0; bcrc=0xFFFF; fcrc(); // сброс // начальное for (b=0;b<16;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); // буфер }; bufer[16]=(crc>>8); // 16 - crc bufer[17]=crc; // 17 - crc /////////////////////////////////////////////////////////////////////////////// буфер > EEPROM // -26mc for (x=0;x<8;x++) { EEPROM_TX(x,bufer[x]); // адрес EEPROM // Data EEPROM }; //////////////////////////////////////////////////////////////////////////////// 32 пак/c. цикл 0,031.25c. while (!(TIFR & 0b00100000)); // флаг ICF1 - верхний предел счета ICR1. TIFR|=0b00100000; // сброс флага ICF1 /////////////////////////////////////////////////////////////////////////////// буфер > EEPROM // -26mc for (x=8;x<16;x++) { EEPROM_TX(x,bufer[x]); // адрес EEPROM // Data EEPROM }; //////////////////////////////////////////////////////////////////////////////// 32 пак/c. цикл 0,031.25c. while (!(TIFR & 0b00100000)); // флаг ICF1 - верхний предел счета ICR1. TIFR|=0b00100000; // сброс флага ICF1 /////////////////////////////////////////////////////////////////////////////// буфер > EEPROM // -7mc for (x=16;x<18;x++) { EEPROM_TX(x,bufer[x]); // адрес EEPROM // Data EEPROM }; /////////////////////////////////////////////////////////////////////////////// верификация EEPROM /////////////////////////////////////////////////////////////////////////////// читаем EEPROM // -1,8mc EEPROM_RX(); // RX EEPROM /////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// flag_TX_EEPROM = 0; // сброс флаг запись EEPROM goto _1; // > сброс }; ///////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ГОТОВ: gotov = 1; // проверка систем: if (fc) gotov = 0; // связь if (t > obduv) gotov = 0; // температура if (v & 0b00000001) gotov = 0; // v (.......1) 1 - вкл. вода модель if ((v & 0b00000010)!=2) gotov = 0; // v (......1.) 1 - вкл. выгрузка модель (геркон 2 база) if (g < zasita_1) gotov = 0; // защита аккум от переразряда модель 1 if (g2 < zasita_2) gotov = 0; // защита аккум от переразряда модель ///////////////////////////////////////////////////////////////////////////////////////////////////// //c=0; ////////////////////////////////////////////////////////////////////// контроль связи: (нет ответа > 1c) if ( (c==0) && (fc==1) ) { fc=0; // fc - сброс флаг - нет связи PORTB.1=0; // звук зуммер - нет связи - выкл. }; ///////////////////// нет связи: c++; if (c==32) { // > 1c // 32 пак/c. цикл 0,031.25c. c=31; // сброс цикл fc=1; // fc - флаг цикл //PORTB.1=1; // звук зуммер - нет связи - вкл. g=0; // сброс аккум модель v=0; // сброс вода модель t=0; // сброс температура модель g2=0; // сброс аккум модель 2 tok=0; // сброс датчик тока chb=0b01111101; // сброс частота буфер > начальное - 2.525GHz. - 01111101(125) -вызывной канал PORTD.4=0; // выкл. индикатор }; /////////////////////////////////// звук нет связи: if (fc) {zvuk_c++;}; // zvuk_c - счёт if (zvuk_c==1) {PORTB.1=1;}; // вкл. 0c if (zvuk_c==8) {PORTB.1=0;}; // выкл. 0,25c if (zvuk_c==32) {zvuk_c=0;}; // zvuk_c - сброс ///////////////////////////////////////////////////////////////////////////////////////////////////// //t=50; //g=60; //v |= 0b00000001; //////////////////////////////////////////////////////////////////////////////////// индикатор авария: ////////////////////////////////////////// индикатор температура модель t: in_t++; // in_t - счёт if (in_t==32) {in_t=0;}; // in_t - сброс if ( (in_t==0) && (t>39) ) {PORTD.4=1;}; // индикатор t if ( (in_t==8) && (t<50) ) {PORTD.4=0;}; // индикатор t if ( (in_t==16) && (t<60) ) {PORTD.4=0;}; // индикатор t if ( (in_t==24) && (t<70) ) {PORTD.4=0;}; // индикатор t ///////////////////////////////////////// защита аккумов от переразряда: if (c==1) { if ( (g < zasita_1) && (f_zasita_1) ) { ff_zasita_1 = 1; PORTB.1=1; // звук зуммер - вкл. PORTD.4=1; // вкл. индикатор - переразряд }; //////////////////////////////////////// if ( (g > zasita_1) && (ff_zasita_1) ) { ff_zasita_1 = 0; PORTB.1=0; // звук зуммер - выкл. PORTD.4=0; // выкл. индикатор - переразряд }; ////////////////////////////////////////////////////////////////////// if ( (g2 < zasita_2) && (f_zasita_2) ) { ff_zasita_2 = 1; PORTB.1=1; // звук зуммер - вкл. PORTD.4=1; // вкл. индикатор - переразряд }; //////////////////////////////////////// if ( (g2 > zasita_2) && (ff_zasita_2) ) { ff_zasita_2 = 0; PORTB.1=0; // звук зуммер - выкл. PORTD.4=0; // выкл. индикатор - переразряд }; }; ///////////////////////////////////////// индикатор вода модель v: //if (v & 0b00000001) { if ( (v & 0b00000001) && flag_potop ) { // флаг Вкл потоп PORTB.1=1; // зуммер вода модель - вкл. PORTD.4=1; // индикатор вода модель - вкл. }; /////////////////////////////////////////////////////////////////////////////////////////////////////// /* /////////////////////////////////////////////////////////////////////////////// индикатор вода модель v: if (v & 0b00000001) in_v++; // счёт else in_v = 0; // сброс ///////////////// if ( in_v == 16 ) { PORTD.4=1; // индикатор вода модель - вкл. 0,5c PORTB.1=1; // зуммер вода модель - вкл. 0,5c }; ///////////////// if ( in_v == 32 ) { PORTD.4=0; // индикатор вода модель - выкл. 0,5c PORTB.1=0; // зуммер вода модель - выкл. 0,5c in_v = 0; // сброс }; ////////////////////////////////////////////////////////////////////// защита аккумов от переразряда: if ( (g < zasita_1) && (f_zasita_1) ) { ff_zasita_1 = 1; PORTB.1=1; // звук зуммер - вкл. PORTC.5=1; // вкл. индикатор - переразряд }; //////////////////////////////////////// if ( (g > zasita_1) && (ff_zasita_1) ) { ff_zasita_1 = 0; PORTB.1=0; // звук зуммер - выкл. PORTC.5=0; // выкл. индикатор - переразряд }; ////////////////////////////////////////////////////////////////////// if ( (g2 < zasita_2) && (f_zasita_2)) { ff_zasita_2 = 1; PORTB.1=1; // звук зуммер - вкл. PORTC.5=1; // вкл. индикатор - переразряд }; //////////////////////////////////////// if ( (g2 > zasita_2) && (ff_zasita_2) ) { ff_zasita_2 = 0; PORTB.1=0; // звук зуммер - выкл. PORTC.5=0; // выкл. индикатор - переразряд }; //////////////////////////////////////////////////////////////////////// индикатор температура модель t: in_t++; // in_t - счёт if (in_t==32) {in_t=0;}; // in_t - сброс if ( (in_t==0) && (t>39) ) {PORTD.3=1;}; // индикатор t if ( (in_t==8) && (t<50) ) {PORTD.3=0;}; // индикатор t if ( (in_t==16) && (t<60) ) {PORTD.3=0;}; // индикатор t if ( (in_t==24) && (t<70) ) {PORTD.3=0;}; // индикатор t /////////////////////////////////////////////////////////////////////////////////////////////////////// */ // пульт // Data: АЦП - ШИМ - кнопки - АЦП2 - частота - номер пакета пульт - CRC16 - CRC16. ////////////////////////////////////////////// АЦП: adc(7); a=ADCW/2; if (a>ub+1) {u=a/2; ub=a;}; if (aqb+1) {q=a/2; qb=a;}; if (a 127) { // 1000 0000 = 128 w=(wb-128); }; if (wb < 128) { // 1000 0000 = 128 w=(127-wb); }; ////////////////////////////////////// коробка передач: скорость 80/90/100. // // 100 % выход //bRH = w/10; //if (RH == 90) {w = bRH * 9; }; // 90 % выход //if (RH == 80) {w = bRH * 8; }; // 80 % выход //if (PINC.4==0) {w=w/2;}; // 50 % выход //if (PINC.5==0) {w=(w/2)+(w/4);}; // 75 % выход ///////////////////////////////////// вкл. реверс: if (wb < 119) { // 1000 0000 = 128 w |= 0b10000000; // вкл. реверс }; //////////////////////////////////////////////////////////////////////// кнопки: ///////////////////////////////////// (........) 0- меню //if ( (PIND.5==0) && (k0==0) ) { // цикл 31,25 ms if ( (flag_k0) && (k0==0) ) { // цикл 31,25 ms k0++; // счёт // kb0 = ~kb0; // kb0 - буфер PORTB.1=1; // звук зуммер - вкл. if (LCD_ON == 0) { menu++; // счёт меню }; }; if ( (8>k0) && (k0) ) {k0++;}; // счёт if (k0 == 8) { PORTB.1=0; // звук зуммер - выкл. k0++; }; /////////////////////////////// if ( (PIND.5==1) && (k0 == 9) ) {k0++;}; if (k0 > 9) {k0++;}; // счёт if (k0 == 17) { k0=0; // сброс flag_k0=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// (........) 1- Выбор меню / Вкл(Выкл) LCD //if ( (PIND.6==0) && (k1==0) ) { // цикл 31,25 ms if ( (flag_k1) && (k1==0) ) { // цикл 31,25 ms k1++; // счёт // kb1 = ~kb1; // kb1 - буфер kb1 = 1; // Выбор меню if (menu == 0) { // (........) 2- Вкл(Выкл) LCD LCD_ON = ~LCD_ON; // LCD_ON PORTD.0=0; // SS OLED 128x64 PORTD.1=0; // D/C. 0 – Function, 1 – data. OLED 128x64 if (LCD_ON) {SPDR=0xAE; while(!(SPSR & (1<<7))); } // Display OFF - 0xAE else {SPDR=0xAF; while(!(SPSR & (1<<7))); }; // Display ON - 0xAF PORTD.1=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTD.0=1; // SS OLED 128x64 kb1 = 0; }; PORTB.1=1; // звук зуммер - вкл. }; if ( (8>k1) && (k1) ) {k1++;}; // счёт if (k1 == 8) { PORTB.1=0; // звук зуммер - выкл. k1++; }; /////////////////////////////// if ( (PIND.6==1) && (k1 == 9) ) {k1++;}; if (k1 > 9) {k1++;}; // счёт if (k1 == 17) { k1=0; // сброс flag_k1=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// // (.....1..) 2- Вкл(Выкл) LCD //if ( (PIND.7==0) && (k2==0) ) { // цикл 31,25 ms //if ( (flag_k2) && (k2==0) ) { // цикл 31,25 ms // k2++; // счёт // kb2 = ~kb2; // kb2 - буфер // PORTB.1=1; // звук зуммер - вкл. // PORTD.0=0; // SS OLED 128x64 // PORTD.1=0; // D/C. 0 – Function, 1 – data. OLED 128x64 // if (kb2) {SPDR=0xAE; while(!(SPSR & (1<<7))); } // Display OFF - 0xAE // else {SPDR=0xAF; while(!(SPSR & (1<<7))); }; // Display ON - 0xAF // PORTD.1=1; // D/C. 0 – Function, 1 – data. OLED 128x64 // PORTD.0=1; // SS OLED 128x64 //}; //if ( (8>k2) && (k2) ) {k2++;}; // счёт //if (k2 == 8) { // PORTB.1=0; // звук зуммер - выкл. // k2++; //}; /////////////////////////////// //if ( (PIND.7==1) && (k2 == 9) ) {k2++;}; //if (k2 > 9) {k2++;}; // счёт //if (k2 == 17) { // k2=0; // сброс // flag_k2=0; // сброс //}; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// (....1...) 3- Вкл(Выкл) фары //if ( (PINB.0==0) && (k3==0) ) { // цикл 31,25 ms if ( (flag_k3) && (k3==0) ) { // цикл 31,25 ms k3++; // счёт // kb3 = ~kb3; // kb3 - буфер PORTB.1=1; // звук зуммер - вкл. k = k ^ 0b00001000; // (....1...) 3- Вкл(Выкл) фары }; if ( (8>k3) && (k3) ) {k3++;}; // счёт if (k3 == 8) { PORTB.1=0; // звук зуммер - выкл. k3++; }; /////////////////////////////// if ( (PINB.0==1) && (k3 == 9) ) {k3++;}; if (k3 > 9) {k3++;}; // счёт if (k3 == 17) { k3=0; // сброс flag_k3=0; // сброс }; ///////////////////////////////////////////////////////////////////////// /* ///////////////////////////////////// (........) 4- коробка передач //if ( (PINC.4==0) && (k4==0) ) { // цикл 31,25 ms if ( (flag_k4) && (k4==0) ) { // цикл 31,25 ms k4++; // счёт // kb4 = ~kb4; // kb4 - буфер PORTB.1=1; // звук зуммер - вкл. // RH = RH + 20; // RH - скорость 80/90/100. // if (RH > 100) RH = 80; // 80/90/100. }; if ( (8>k4) && (k4) ) {k4++;}; // счёт if (k4 == 8) { PORTB.1=0; // звук зуммер - выкл. k4++; }; /////////////////////////////// if ( (PINC.4==1) && (k4 == 9) ) {k4++;}; if (k4 > 9) {k4++;}; // счёт if (k4 == 17) { k4=0; // сброс flag_k4=0; // сброс }; */ ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// (..1.....) 5- Вкл(Выкл) резервный аккумулятор //if ( (PIND.7==0) && (k5==0) ) { // цикл 31,25 ms if ( (flag_k5) && (k5==0) ) { // цикл 31,25 ms k5++; // счёт // kb5 = ~kb5; // kb5 - буфер PORTB.1=1; // звук зуммер - вкл. k = k ^ 0b00100000; // (..1.....) 5- Вкл(Выкл) резервный аккумулятор }; if ( (8>k5) && (k5) ) {k5++;}; // счёт if (k5 == 8) { PORTB.1=0; // звук зуммер - выкл. k5++; }; /////////////////////////////// if ( (PIND.7==1) && (k5 == 9) ) {k5++;}; if (k5 > 9) {k5++;}; // счёт if (k5 == 17) { k5=0; // сброс flag_k5=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// (.1......) 6- Вкл выгрузка //if ( (PINC.3==0) && (k6==0) ) { // цикл 31,25 ms if ( (flag_k6) && (k6==0) ) { // цикл 31,25 ms k6++; // счёт // kb6 = ~kb6; // kb6 - буфер // kb6 = 1; // kb6 - буфер PORTB.1=1; // звук зуммер - вкл. }; if ( (8>k6) && (k6) ) {k6++;}; // счёт if (k6 == 8) { PORTB.1=0; // звук зуммер - выкл. k6++; }; /////////////////////////////// if ( (PINC.3==1) && (k6 == 9) ) {k6++;}; if (k6 > 9) {k6++;}; // счёт if (k6 == 17) { k6=0; // сброс flag_k6=0; // сброс }; ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////// (........) 7- круиз-контроль //if ( (PINC.5==0) && (k6==0) ) { // цикл 31,25 ms if ( (flag_k7) && (k7==0) ) { // цикл 31,25 ms k7++; // счёт // kb7 = ~kb7; // kb7 - буфер PORTB.1=1; // звук зуммер - вкл. if (menu == 33) flag_ON_kruiz = 1; // флаг вкл. круиз-контроль else flag_kruiz = ~flag_kruiz; // флаг круиз-контроль // bufer_kruiz = q; // буфер круиз-контроль }; if ( (8>k7) && (k7) ) {k7++;}; // счёт if (k7 == 8) { PORTB.1=0; // звук зуммер - выкл. k7++; }; /////////////////////////////// if ( (PINC.5==1) && (k7 == 9) ) {k7++;}; if (k7 > 9) {k7++;}; // счёт if (k7 == 17) { k7=0; // сброс flag_k7=0; // сброс }; //////////////////////////////////////////////////////////////////////// кнопки: k = k & 0b11111100; // (......00) 11 10 01 00 k = k | pw; // (......11) 11 10 01 00 //k = kb0 ? k | (1<<0) : k & 0b11111110; // (.......0) 0- Вкл(Выкл) меню //k = kb1 ? k | (1<<1) : k & 0b11111101; // (......0.) 1- Выбор меню / Вкл(Выкл) LCD if (t > obduv) k = k | (1<<2); // (.....1..) 2- Вкл(Выкл) обдув 40/50/60/70/80; else k = k & 0b11111011; // (.....1..) 2- Вкл(Выкл) обдув 40/50/60/70/80; //k = kb3 ? k | (1<<3) : k & 0b11110111; // (....1...) 3- Вкл(Выкл) фары //k = kb4 ? k | (1<<4) : k & 0b11101111; // (...0....) 4- скорость 80/90/100 //k = kb5 ? k | (1<<5) : k & 0b11011111; // (..1.....) 5- Вкл(Выкл) резервный аккумулятор k = k6 ? k | (1<<6) : k & 0b10111111; // (.1......) 6- Вкл выгрузка if (flag_svet) k = k | (1<<7); // (1.......) 7- Вкл свет else k = k & 0b01111111; // (1.......) 7- Вкл свет ////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////// АЦП2: adc(2); a=ADCW/2; if (a>ub2+1) {u2=a/2; ub2=a;}; if (apb+1) {p=a/2; pb=a;}; if (a буфер bufer[0]=u; // АЦП bufer[1]=w; // ШИМ bufer[2]=k; // кнопки bufer[3]=u2; // АЦП2 bufer[4]=ch; // частота bufer[5]=n; // номер пакета пульт ///////////////////////////////////////////////////////////////////////////////// crc буфер: //-0,8mc crc=0; bcrc=0xFFFF; fcrc(); // сброс // начальное for (b=0;b<6;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); // буфер }; bufer[6]=(crc>>8); // crc bufer[7]=crc; // crc ///////////////////////////////////////////////////////////////////////////////////////////// TX FIFO PORTB.2=0; // SS SPDR=0b10100000; while(!(SPSR & (1<<7))); // TX FIFO for (x=0;x<8;x++) { SPDR=bufer[x]; while(!(SPSR & (1<<7))); }; PORTB.2=1; // SS ////////////////////////////////////////////// вкл. TX: PORTC.0=1; // CE 1; вкл. TX delay_ms(1); // Ждём окончания передачи TX: пакет - 250kbps; 0,000.512с. + 0,000.130с PLL PORTC.0=0; // CE 0; выкл. TX ///////////////////////////////////////////////////////////////////////////////////////////////////// sT++; // sT - счётчик пакетов пульт kontrol_TX++; // контроль TX if (kontrol_TX == 0) kontrol_RX = 0; // сброс // модель // Data: аккум - температура - вода - тахометр - датчик тока - номер пакета модель - CRC16 - CRC16. //////////////////////////////////////////////////////////////////////////////////////////// вкл. RX: PORTB.2=0; // SS SPDR=0b00100000; while(!(SPSR & (1<<7)));// 0x00 CONFIG: SPDR=0b01111111; while(!(SPSR & (1<<7)));// CRC=2, POWER=1, RX=1. PORTB.2=1; // SS ////////////////////////////////////////////// вкл. RX: PORTC.0=1; // CE 1; вкл. RX //////////////////////////////////////////////////////////////////////////////////////////// delay_ms(10); // ждём ответ RX 8ms + // 32 пак/c. цикл 0,031.25c. //////////////////////////////////////////////////////////////////////////////////////////// выкл. RX: PORTC.0=0; // CE 0; выкл. RX ////////////////////////////////////////////// STATUS: PORTB.2=0; // SS SPDR=0; while(!(SPSR & (1<<7))); x=SPDR; PORTB.2=1; // SS ////////////////////////////////////////////// .... 111. - RX FIFO - пуст if ((x & 0b00001110)==0b00001110) { delay_us(1200); // коррекция RX FIFO + CRC16 // SPI = 1 Мгц goto _3; // > LCD индикатор }; ////////////////////////////////////////////// RX FIFO: //-0,12mc PORTB.2=0; // SS SPDR=0b01100001; while(!(SPSR & (1<<7))); // RX FIFO for (x=0;x<8;x++) { SPDR=0; while(!(SPSR & (1<<7))); bufer[x]=SPDR; }; PORTB.2=1; // SS ////////////////////////////////////////////// crc буфер: //-0,95mc crc=0; bcrc=0xFFFF; fcrc(); // сброс // начальное for (b=0;b<8;b=b+2) { bcrc=bufer[b]; bcrc=(bcrc<<8)|bufer[b+1]; fcrc(); }; ////////////////////// проверка crc: if (crc==0) { g=bufer[0]; // g - аккум модель t=bufer[1]; // t - датчик температура модель v=bufer[2]; // v - датчик вода модель g2=bufer[3]; // g2 - аккум модель 2 tok=bufer[4]; // tok - датчик тока модель / температура 2 m=bufer[5]; // m - номер пакета модель } ////////////////////// ошибка crc: else { // kontrol_CRC++; // контроль CRC goto _3; // > LCD индикатор }; //////////////////////////////////////////////////////////////////////////////////////////////////////// sR++; // sR - счётчик пакетов модель c=0; // сброс цикл chb = ch; // chb - частота буфер = ch - запроса kontrol_RX++; // контроль RX ////////////////////////////////////////////////////////////////////////////////// контроль номер пакет: //if (n==m) kp=1; // контроль пакетов Tx (n) == Rx (m): //else kp=0; // контроль пакетов Tx (n) != Rx (m): //////////////////////////////////////////////////////////////////////////////////////////////////////// _3: ////////////////////////////////////////////////////////////////////////////////////////// LCD индикатор: ////////////////////////////////////////////////////////////////////// if ((n & 0b00000111)==7) { // 8 пак/0,25s s = sT - sR; // s - счётчик пакетов s = 8 - s; // goto _4; // > LCD индикатор // полный экран 15 ms // SPI = 1 Мгц }; ///////////////////////////////////////////////////// развёртка: // kadry - частота кадров LCD 4/8/16/32 if (kadry == 4) { if ((n & 0b00000111)==7) { // 8 пак/0,25s goto _4; // > LCD индикатор // полный экран 15 ms // SPI = 1 Мгц }; }; if (kadry == 8) { if ((n & 0b00000011)==3) { // 4 пак/0,125s goto _4; // > LCD индикатор // полный экран 15 ms // SPI = 1 Мгц }; }; if (kadry == 16) { if ((n & 0b00000001)==1) { // 2 пак/ goto _4; // > LCD индикатор // полный экран 15 ms // SPI = 1 Мгц }; }; if (kadry == 32) { goto _4; // > LCD индикатор // полный экран 15 ms // SPI = 1 Мгц }; //////////////////////////////////////////////////////////////////////////////////////////////////////// _5: // < LCD индикатор // полный экран 15 ms // SPI = 1 Мгц SPSR &= 0b11111110; // < SPI - SCK = кварц 4 Мгц/4 = 1 МГц if (sT == 8) {sT = 0; sR = 0;}; // сброс //////////////////////////////////////////////////////////////////////////////////////////////////////// n++; // номер пакета пульт 0...255 goto _1; //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// _4: SPSR |= 0b00000001; // > SPI2X - SCK = кварц 4 Мгц/2 = 2 МГц ///////////////////// меню 4: ошибка // k0: - (.......1) // 0- Вкл(Выкл)меню if (menu > 49) goto _11; // > LCD индикатор меню ///////////////////// меню 4: модель // k0: - (.......1) // 0- Вкл(Выкл)меню if (menu > 39) goto _10; // > LCD индикатор меню ///////////////////// меню 3: пульт // k0: - (.......1) // 0- Вкл(Выкл)меню if (menu > 29) goto _9; // > LCD индикатор меню ///////////////////// меню 2: часы // k0: - (.......1) // 0- Вкл(Выкл)меню //if (menu > 19) goto _8; // > LCD индикатор меню ///////////////////// меню 1: связь // k0: - (.......1) // 0- Вкл(Выкл)меню if (menu > 9) goto _7; // > LCD индикатор меню ///////////////////// меню // k0: - (.......1) // 0- Вкл(Выкл)меню if (menu) goto _6; // > LCD индикатор меню ///////////////////////////////////////////////////////////////////////////////////////// LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 /////////////////////////////////////////////// антеннка: for (x=0;x<9;x++) { SPDR=antenka[x]; while(!(SPSR & (1<<7))); }; /////////////////////////////////////////////// уровень сигнала (S_metr): for (x=0;x<8;x++) { if (s>x)h = S_metr[x]; else h = 0b00000000; SPDR=h; while(!(SPSR & (1<<7))); SPDR=0; while(!(SPSR & (1<<7))); }; //////////////////////////////////////////////// fpp(6); //////////////////////////////////////////////// мощность: LCD(26); // "P" //////////////////////////////////////////////// шкала мощность: for (x=0;x<5;x++) { SPDR=0b01100000; while(!(SPSR & (1<<7))); //0 }; SPDR=0; while(!(SPSR & (1<<7))); ////////////////////////////////// for (z=0;z<3;z++) { for (x=0;x<5;x++) { if (pw>z) h = pw_metr[z]; else h = 0b00000000; SPDR=h; while(!(SPSR & (1<<7))); //1,2,3 }; SPDR=0; while(!(SPSR & (1<<7))); }; //////////////////////////////////////////////// fpp(3); //////////////////////////////////////////////// часы: //st_100(dni); // "00" счётчик 0...99 //fpp(4); //st_100(hour); LCD(48); // "00:" счётчик 0...99 //st_100(min); LCD(48); // "00:" счётчик 0...99 //st_100(sec); // "00" счётчик 0...99 ////////////////////////////////////////////////////////// ///////////////////////////////////////////////// "ГОТОВ" if (gotov) { LCD(13); LCD(24); LCD(28); LCD(24); LCD(12); // "ГОТОВ" } else { LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); // "-----" }; fpp(3); ////////////////////////////////////////////////// адрес nRF24L01+ начальное 1. st_10(Address_Pult); // "0" счётчик 0...9 ////////////////////////////////////////////////// fpp(1); ///////////////////////////////////////////////// частота: chi = 2400 + ch; // начальное 2400 st_10000(chi); // "0000" счётчик 0...9999 // LCD(22); LCD(23); LCD(44); // "MHz" //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ///////////////////// выгрузка: // v: - (......1.) 1 - вкл. выгрузка модель (геркон 2 база) if (v & 0b00000010) { LCD(11); LCD(10); LCD(17); LCD(10); } // "БАЗА" else { LCD(47); LCD(47); LCD(47); LCD(47); // "----" }; fpp(7); //////////////////// реле 6.1/6.2: (...11...) if (v & 0b00011000) { ////////////////// реле 6.2: // v: - (....1...) 1 - вкл. выгрузка модель (реле 6.2 база) << if (v & 0b00001000) { LCD(45); LCD(45); LCD(45); LCD(45); LCD(45); LCD(45); LCD(45); } // "<<<<<<<" ////////////////// реле 6.1: // v: - (...1....) 1 - вкл. выгрузка модель (реле 6.1 выгрузка) >> else { LCD(49); LCD(49); LCD(49); LCD(49); LCD(49); LCD(49); LCD(49);}; // ">>>>>>>" } //////////////////// реле 6.1/6.2: (...00...) else { LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); // "-------" }; ///////////////////////////////////////////// fpp(7); ///////////////////// выгрузка: // v: - (.....1..) 1 - вкл. выгрузка модель (геркон 1 выгрузка) if (v & 0b00000100) { LCD(12); LCD(37); LCD(13); LCD(26); LCD(29); LCD(17); LCD(20); LCD(10); } // "ВЫГРУЗКА" else { LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); LCD(47); // "--------" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 /////////////////////////////////////////// "АЦП" LCD(10); LCD(32); LCD(25); fpp(4); st_1000(u); // "000" счётчик 0...999 fpp(1); SPDR=0xFF; while(!(SPSR & (1<<7))); // | fpp(2); /////////////////////////////////////////// "ШИМ/КРУ" (ШИМ/круиз-контроль) if (flag_kruiz) { LCD(20); LCD(26); LCD(29); } // "КРУ" else { LCD(34); LCD(18); LCD(22); }; // "ШИМ" fpp(4); st_1000(w & 0b01111111); // сброс реверс // "000" счётчик 0...999 fpp(1); SPDR=0xFF; while(!(SPSR & (1<<7))); // | fpp(2); /////////////////////////////////////////// "АЦП2" LCD(10); LCD(32); LCD(25); fpp(4); st_1000(u2); // "000" счётчик 0...999 //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 /////////////////////////////////////////// температура: t LCD(28); LCD(15); LCD(22); fpp(4); // "ТЕМ" st_1000(t); // "000" счётчик 0...999 fpp(1); SPDR=0xFF; while(!(SPSR & (1<<7))); // | fpp(2); ////////////////////////////////////////// tok - датчик тока модель LCD(28); LCD(24); LCD(20); fpp(4); // "ТОК" st_1000(tok); // "000" счётчик 0...999 fpp(1); SPDR=0xFF; while(!(SPSR & (1<<7))); // | fpp(2); ////////////////////////////////////////// //fpp(1); //SPDR=0b01000000; while(!(SPSR & (1<<7))); // "." //fpp(1); ///////////////////// температура: t 2 // tok - датчик тока модель / температура 2 // tok - 0.0625 = 0001 //s_tok = tok; // s_tok - счётчик температура 2 //z=0; while (tok){z++; tok=tok-1;}; //btok = z * 625; // btok - буфер температура 2 //st_10000(btok); // "000" счётчик 0...9999 //fpp(1); //////////////////////////////////////////// потоп: // v: - (.......1) // 1 - вкл. вода модель if (flag_potop) { LCD(25); LCD(24); LCD(28); fpp(4); // "ПОТ" if (v & 0b00000001) { LCD(12); LCD(24); LCD(14); } // "ВОД" else { LCD(47); LCD(47); LCD(47); // "---" }; } else { LCD(47); LCD(47); LCD(47); fpp(4); // "---" LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ///////////////////// скорость 100/75/50: // k: - (...1....) // 4- Вкл(Выкл) эхолот //LCD(20); LCD(24); LCD(26); fpp(4); // "КОР" //st_1000(RH); // скорость 100/75/50 // "000" счётчик 0...999 fpp(41); //fpp(1); SPDR=0xFF; while(!(SPSR & (1<<7))); // | fpp(43); SPDR=0xFF; while(!(SPSR & (1<<7))); // | fpp(2); ///////////////////// фары: // k: - (....1...) // 3- Вкл(Выкл) фары if (flag_svet) { LCD(30); LCD(10); LCD(26); fpp(4); // "ФАР" if (k & 0b00001000) { LCD(12); LCD(20); LCD(21); } // "ВКЛ" else { LCD(47); LCD(47); LCD(47); // "---" }; } else { LCD(47); LCD(47); LCD(47); fpp(4); // "---" LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ///////////////////////////////////////// аккум пульт 5 V LCD(25); // "П" fpp(13); ak_pult(p/2); // p - аккум пульт 5 V fpp(14); //////////////////////////////////////// аккум модель 12 V -1 ///////////////////// k: - //(..1.....) 5- Вкл(Выкл) резервный аккумулятор if (k & 0b00100000) LCD(47); // "-" else LCD(1); // "1" fpp(7); // " " ak_model(g); // g - аккум модель 12 V fpp(13); //////////////////////////////////////// аккум модель 12 V -2 ///////////////////// k: - //(..1.....) 5- Вкл(Выкл) резервный аккумулятор if (k & 0b00100000) LCD(2); // "2" else LCD(47); // "-" fpp(7); // " " ak_model(g2); // g2 - аккум модель 2 12 V fpp(2); //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ///////////////////////////////////////////////////////////////////// шкала аккум пульт: // опорное 3,3V; + 5...8,4 V; 5/3,9 -99,000; 8,4/3,9 -166,000; // +62 hp = p; // hp - буфер шкала аккум пульт /////////////////////////////// if (hp>99) hp = hp - 100; else hp=0; /////////////////////////////// skala_0_ak(hp); fpp(12); ///////////////////////////////////////////////////////////////////// шкала аккум модель: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg = g; // hg - буфер шкала аккум модель /////////////////////////////// if (hg>69) hg = hg - 70; else hg=0; /////////////////////////////// skala_0_ak(hg); fpp(11); ///////////////////////////////////////////////////////////////////// шкала аккум модель 2: // опорное 5V; + 7...13,2 V; 6.0/5,1 -70,000; 13.2/5,1 -132,000; // +62 hg2 = g2;// hg2 - буфер шкала аккум модель 2 /////////////////////////////// if (hg2>69) hg2 = hg2 - 70; else hg2=0; /////////////////////////////// skala_0_ak(hg2); //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ///////////////////////////////////////////////////////////////////// шкала аккум пульт: skala_1_ak(hp); fpp(12); ///////////////////////////////////////////////////////////////////// шкала аккум модель: skala_1_ak(hg); fpp(11); ///////////////////////////////////////////////////////////////////// шкала аккум модель 2: skala_1_ak(hg2); /////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор /////////////////////////////////////////////////////////////////////////////////////////////////////// _6: // меню: //////////////////////////////////////////////////////////////////////////////////// меню LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 //////////////////////////////////////////// "МЕНЮ:" LCD(22); LCD(15); LCD(23); LCD(40); LCD(48); fpp(98); //////////////////////////////////////////////// //st_100(dni); // "00" счётчик 0...99 //fpp(4); //////////////////////////////////////////// часы: //st_100(hour); LCD(48); // "00:" счётчик 0...99 //st_100(min); LCD(48); // "00:" счётчик 0...99 //st_100(sec); // "00" счётчик 0...99 //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 1) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "СВЯЗЬ" LCD(27); LCD(12); LCD(41); LCD(17); LCD(38); fpp(92); ////////////////////////////////////////////////////////////////// if ( (menu == 1) && kb1 ) { menu = 10; // > меню 1: связь kb1 = 0; // выбор меню }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 /*if (menu == 2) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЧACЫ" LCD(33); LCD(10); LCD(27); LCD(37); fpp(98); ////////////////////////////////////////////////////////////////// if ( (menu == 2) && kb1 ) { menu = 20; // > меню 2: часы kb1 = 0; // выбор меню }; */ if (menu == 2) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ПУЛЬТ" LCD(25); LCD(29); LCD(21); LCD(38); LCD(28); fpp(92); ////////////////////////////////////////////////////////////////// if ( (menu == 2) && kb1 ) { menu = 30; // > меню 3: пульт kb1 = 0; // выбор меню }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 3) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "МОДЕЛЬ" LCD(22); LCD(24); LCD(14); LCD(15); LCD(21); LCD(38); fpp(86); ////////////////////////////////////////////////////////////////// if ( (menu == 3) && kb1 ) { menu = 40; // > меню 4: модель kb1 = 0; // выбор меню }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 4) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "АВТО СОХР EEPROM" LCD(10); LCD(12); LCD(28); LCD(24); fpp(6); LCD(27); LCD(24); LCD(31); LCD(26); fpp(6); LCD(15); LCD(15); LCD(26); LCD(43); LCD(24); LCD(22); fpp(8); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// if ( (menu == 4) && kb1 ) { flag_AU_EEPROM = ~ flag_AU_EEPROM;// флаг АВТО сохр EEPROM kb1 = 0; }; /////////////////////////////////// флаг if (flag_AU_EEPROM) { LCD(12); LCD(20); LCD(21); // "ВКЛ" } else { LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ////////////////////////////////////////////////////////////////// "КОНТОЛЬ:" LCD(20); LCD(24); LCD(23); LCD(28); LCD(26); LCD(24); LCD(21); LCD(38); LCD(48); fpp(74); //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if ((n & 0b00011111)==31) { // 32 пак/1s kontrol_TX_b = kontrol_TX; kontrol_RX_b = kontrol_RX; // kontrol_CRC_b = kontrol_CRC; }; ////////////////////////////////////////////////////////////////// "TX" LCD(28); LCD(31); fpp(6); st_100000(kontrol_TX_b); // счётчик 0...99999: fpp(13); //////////////////////////////////////////// контроль пакетов Tx (n) > Rx (m): //if (kp) LCD(20); // "K" (Tx (n) == Rx (m)) //else LCD(47); // "-" (Tx (n) != Rx (m)) fpp(6); fpp(13); ////////////////////////////////////////////////////////////////// "RX" LCD(43); LCD(31); fpp(6); st_100000(kontrol_RX_b); // счётчик 0...99999: //////////////////////////////////////////////////////////////////////// /* ////////////////////////////////////////////////////////////////// "ОШИБОК TX" LCD(24); LCD(34); LCD(18); LCD(11); LCD(24); LCD(20); fpp(6); LCD(28); LCD(31); fpp(44); st_100000(kontrol_CRC_b); // счётчик 0...99999: //////////////////////////////////////////////////////////////////////// */ ////////////////////////////////////////////////////////////////////////////////////////////////// menu > if ( menu == 5 ) { if (flag_AU_EEPROM) flag_TX_EEPROM = 1; // флаг АВТО сохр EEPROM // флаг запись EEPROM menu = 0; // сброс меню }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор ////////////////////////////////////////////////////////////////////////////////////////////////////////// _7: // меню 1: связь //////////////////////////////////////////////////////////////////////////////////// меню LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 //////////////////////////////////////////// "МЕНЮ СВЯЗЬ" LCD(22); LCD(15); LCD(23); LCD(40); fpp(6); LCD(27); LCD(12); LCD(41); LCD(17); LCD(38); fpp(68); //////////////////////////////////////////////// //st_100(dni); // "00" счётчик 0...99 //fpp(4); //////////////////////////////////////////// часы: //st_100(hour); LCD(48); // "00:" счётчик 0...99 //st_100(min); LCD(48); // "00:" счётчик 0...99 //st_100(sec); // "00" счётчик 0...99 //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЧACТОТА ЗАПРОСА" LCD(33); LCD(10); LCD(27); LCD(28); LCD(24); LCD(28); LCD(10); fpp(6); LCD(17); LCD(10); LCD(25); LCD(26); LCD(24); LCD(27); LCD(10); fpp(8); ////////////////////////////////////////////////////////////////// st_10000(2525); // "0000" счётчик 0...9999 ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 10) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЧACТОТА+1MHz" LCD(33); LCD(10); LCD(27); LCD(28); LCD(24); LCD(28); LCD(10); LCD(46); LCD(1); LCD(22); LCD(23); LCD(44); fpp(26); ////////////////////////////////////////////////////////////////// chi = 2400 + ch; // начальное 2400 st_10000(chi); // "0000" счётчик 0...9999 ////////////////////////////////////////////////////////////////// if ( (menu == 10) && kb1 ) { ch++; // ch - частота: 2.400GHz до 2.525GHz. 00000000(0)...01111101(125) if (ch > 125) ch = 0; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 11) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЧACТОТА-1MHz" LCD(33); LCD(10); LCD(27); LCD(28); LCD(24); LCD(28); LCD(10); LCD(47); LCD(1); LCD(22); LCD(23); LCD(44); fpp(26); ////////////////////////////////////////////////////////////////// chi = 2400 + ch; // начальное 2400 st_10000(chi); // "0000" счётчик 0...9999 ////////////////////////////////////////////////////////////////// if ( (menu == 11) && kb1 ) { ch--; // ch - частота: 2.400GHz до 2.525GHz. 00000000(0)...01111101(125) if (ch > 125) ch = 125; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 12) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "МОЩНОСТЬ+1" LCD(22); LCD(24); LCD(35); LCD(23); LCD(24); LCD(27); LCD(28); LCD(38); LCD(46); LCD(1); fpp(56); ///////////////////// pw - мощность: // k: - (......11) 11 10 01 00 st_10(pw); // "0" счётчик 0...9 ////////////////////////////////////////////////////////////////// if ( (menu == 12) && kb1 ) { pw++; // pw - 11 10 01 00 if (pw > 3) pw = 3; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 13) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "МОЩНОСТЬ-1" LCD(22); LCD(24); LCD(35); LCD(23); LCD(24); LCD(27); LCD(28); LCD(38); LCD(47); LCD(1); fpp(56); ///////////////////// pw - мощность: // k: - (......11) 11 10 01 00 st_10(pw); // "0" счётчик 0...9 ////////////////////////////////////////////////////////////////// if ( (menu == 13) && kb1 ) { pw--; // pw - 11 10 01 00 if (pw > 3) pw = 0; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 14) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "МОДЕЛЬ" LCD(22); LCD(24); LCD(14); LCD(15); LCD(21); LCD(38); fpp(80); ////////////////////// адрес nRF24L01+ начальное 1. st_10(Address_Pult); // счётчик 0...9 ////////////////////////////////////////////////////////////////// if ( (menu == 14) && kb1 ) { Address_Pult ++; // адрес nRF24L01+ начальное 1. if (Address_Pult > 5) Address_Pult = 1; flag_Address_Pult = 1;// флаг запись nRF24L01+ kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); ////////////////////////////////////////////////////////////////////////////////////////////////// menu > if ( menu == 15 ) { menu = 1; // > меню 1: связь }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор ////////////////////////////////////////////////////////////////////////////////////////////////////////// /* _8: // меню 2: часы //////////////////////////////////////////////////////////////////////////////////// меню LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 //////////////////////////////////////////// "МЕНЮ ЧACЫ" LCD(22); LCD(15); LCD(23); LCD(40); fpp(6); LCD(33); LCD(10); LCD(27); LCD(37); fpp(10); //////////////////////////////////////////////// st_100(dni); // "00" счётчик 0...99 fpp(4); //////////////////////////////////////////// часы: st_100(hour); LCD(48); // "00:" счётчик 0...99 st_100(min); LCD(48); // "00:" счётчик 0...99 st_100(sec); // "00" счётчик 0...99 //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 20) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЧACЫ+1" LCD(33); LCD(10); LCD(27); LCD(37); LCD(46); LCD(1); fpp(74); ////////////////////////////////////////////////////////////////// st_100(hour); // "00" счётчик 0...99 ////////////////////////////////////////////////////////////////// if ( (menu == 20) && kb1 ) { hour++; // hour - час 00 kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 21) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЧACЫ-1" LCD(33); LCD(10); LCD(27); LCD(37); LCD(47); LCD(1); fpp(74); ////////////////////////////////////////////////////////////////// st_100(hour); // "00" счётчик 0...99 ////////////////////////////////////////////////////////////////// if ( (menu == 21) && kb1 ) { hour--; // hour - час 00 if (hour > 59) hour = 0; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 22) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "MИHУTЫ+1" LCD(22); LCD(18); LCD(23); LCD(29); LCD(28); LCD(37); LCD(46); LCD(1); fpp(62); ////////////////////////////////////////////////////////////////// st_100(min); // "00" счётчик 0...99 ////////////////////////////////////////////////////////////////// if ( (menu == 22) && kb1 ) { min++; // min - минуты 00 kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 23) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "MИHУTЫ-1" LCD(22); LCD(18); LCD(23); LCD(29); LCD(28); LCD(37); LCD(47); LCD(1); fpp(62); ////////////////////////////////////////////////////////////////// st_100(min); // "00" счётчик 0...99 ////////////////////////////////////////////////////////////////// if ( (menu == 23) && kb1 ) { min--; // min - минуты 00 if (min > 59) min = 0; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 24) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "КОРР+1" LCD(20); LCD(24); LCD(26); LCD(26); LCD(46); LCD(1); fpp(56); ////////////////////////////////////////////////////////////////// st_100000(kor); // счётчик 0...99999 ////////////////////////////////////////////////////////////////// if ( (menu == 24) && kb1 ) { kor++; // kor - коррекция часы // kor=15625; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 25) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "КОРР-1" LCD(20); LCD(24); LCD(26); LCD(26); LCD(47); LCD(1); fpp(56); ////////////////////////////////////////////////////////////////// st_100000(kor); // счётчик 0...99999 ////////////////////////////////////////////////////////////////// if ( (menu == 25) && kb1 ) { kor--; // kor - коррекция часы // kor=15625; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 26) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "КОРР СОХР Е" LCD(20); LCD(24); LCD(26); LCD(26); fpp(24); LCD(27); LCD(24); LCD(31); LCD(26); fpp(6); LCD(15); fpp(8); ////////////////////////////////////////////////////////////////// st_100000(kor); // счётчик 0...99999 ////////////////////////////////////////////////////////////////// сохранить EEPROM if ( (menu == 26) && kb1 ) { EEDR=(kor>>8); EEPROM_TX(1); // 01 - коррекция часы. EEDR=kor; EEPROM_TX(2); // 02 - коррекция часы. kb1 = 0; menu++; }; ////////////////////////////////////////////////////////////////////////////////////////////////// menu > if ( menu == 27 ) { menu = 2; // > меню 2: часы }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор ////////////////////////////////////////////////////////////////////////////////////////////////////////// */ _9: // меню 3: пульт //////////////////////////////////////////////////////////////////////////////////// меню LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 //////////////////////////////////////////// "МЕНЮ ПУЛЬТ" LCD(22); LCD(15); LCD(23); LCD(40); fpp(6); LCD(25); LCD(29); LCD(21); LCD(38); LCD(28); fpp(68); //////////////////////////////////////////////// //st_100(dni); // "00" счётчик 0...99 //fpp(4); //////////////////////////////////////////// часы: //st_100(hour); LCD(48); // "00:" счётчик 0...99 //st_100(min); LCD(48); // "00:" счётчик 0...99 //st_100(sec); // "00" счётчик 0...99 //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 30) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "БУЗЕР" LCD(11); LCD(29); LCD(17); LCD(15); LCD(26); fpp(74); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// if ( (menu == 30) && kb1 ) { buzer = ~ buzer; // бузер if (buzer) DDRB.1=1; // звук бузер ВКЛ else DDRB.1=0; // звук бузер ВЫКЛ kb1 = 0; }; /////////////////////////////////// флаг if (buzer) { LCD(12); LCD(20); LCD(21); // "ВКЛ" // DDRB.1=1; // звук бузер ВКЛ } else { LCD(47); LCD(47); LCD(47); // "---" // DDRB.1=0; // звук бузер ВЫКЛ }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 31) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "КОНТР" LCD(20); LCD(24); LCD(23); LCD(28); LCD(26); fpp(74); ////////////////////////////////////////////////////////////////// st_1000(kontr); // "000" счётчик 0...999 ////////////////////////////////////////////////////////////////// if ( (menu == 31) && kb1 ) { kontr = kontr + 10; // kontr - контрастность индикатор //Set Contrast Control PORTD.1=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0x81; while(!(SPSR & (1<<7))); // контрастность. SPDR=kontr; while(!(SPSR & (1<<7))); // контрастность 0...255. PORTD.1=1; // D/C. 0 – Function, 1 – data. OLED 128x64 kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 32) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "КАДРЫ" LCD(20); LCD(10); LCD(14); LCD(26); LCD(37); fpp(80); ////////////////////////////////////////////////////////////////// st_100(kadry); // счётчик 0...99 ////////////////////////////////////////////////////////////////// if ( (menu == 32) && kb1 ) { kadry = kadry *2; // kadry - частота кадров LCD 4/8/16/32 if (kadry > 32) kadry = 4; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 33) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "КРУИЗ" LCD(20); LCD(26); LCD(29); LCD(18); LCD(17); fpp(50); ////////////////////////////////////////////////////////////////// if (f_flag_kruiz) bb_bufer_kruiz = bufer_kruiz; // буфер круиз-контроль else bb_bufer_kruiz = q; // буфер круиз-контроль //////////////////// if (bb_bufer_kruiz > 127) { // 1000 0000 = 128 b_bufer_kruiz = (bb_bufer_kruiz-128); }; if (bb_bufer_kruiz < 128) { // 1000 0000 = 128 b_bufer_kruiz = (127-bb_bufer_kruiz); }; //////////////////// st_1000(b_bufer_kruiz); // счётчик 0...999 fpp(6); ////////////////////////////////////////////////////////////////// if ( (menu == 33) && kb1 ) { kb1 = 0; }; ///////////////// if ( (menu == 33) && flag_ON_kruiz ) {// флаг вкл. круиз-контроль f_flag_kruiz = ~f_flag_kruiz; // флаг круиз-контроль if (f_flag_kruiz) bufer_kruiz = q; // буфер круиз-контроль // kb1 = 0; flag_ON_kruiz = 0; // флаг вкл. круиз-контроль }; /////////////////////////////////// флаг if (f_flag_kruiz) { LCD(12); LCD(20); LCD(21); // "ВКЛ" } else { LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); ////////////////////////////////////////////////////////////////////////////////////////////////// menu > if ( menu == 34 ) { menu = 2; // > меню 3: пульт }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор ////////////////////////////////////////////////////////////////////////////////////////////////////////// _10: // меню 4: модель //////////////////////////////////////////////////////////////////////////////////// меню LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 //////////////////////////////////////////// "МЕНЮ МОДЕЛЬ" LCD(22); LCD(15); LCD(23); LCD(40); fpp(2); LCD(22); LCD(24); LCD(14); LCD(15); LCD(21); LCD(38); fpp(66); /* //////////////////////////////////////////////// //st_100(dni); // "00" счётчик 0...99 //fpp(4); //////////////////////////////////////////// часы: //st_100(hour); LCD(48); // "00:" счётчик 0...99 //st_100(min); LCD(48); // "00:" счётчик 0...99 //st_100(sec); // "00" счётчик 0...99 */ //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 40) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ОБДУВ+10" LCD(24); LCD(11); LCD(14); LCD(29); LCD(12); LCD(46); LCD(1); LCD(0); fpp(62); ////////////////////////////////////////////////////////////////// st_100(obduv); // счётчик 0...99 ////////////////////////////////////////////////////////////////// if ( (menu == 40) && kb1 ) { obduv = obduv + 10; // obduv - обдув 40/50/60/70/80; if (obduv > 80) obduv = 40; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 41) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЗАЩИТА-1" LCD(17); LCD(10); LCD(35); LCD(18); LCD(28); LCD(10); LCD(47); LCD(1); fpp(54); ////////////////////////////////////////////////////////////////// ak_model(zasita_1); // zasita_1 - напряжение аккум модель меньше .. V -1 ////////////////////////////////////////////////////////////////// if ( (menu == 41) && kb1 ) { zasita_1 = zasita_1 + 10; if (zasita_1 > 100) zasita_1 = 50; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 42) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЗАЩИТА-1" LCD(17); LCD(10); LCD(35); LCD(18); LCD(28); LCD(10); LCD(47); LCD(1); fpp(56); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// if ( (menu == 42) && kb1 ) { f_zasita_1 = ~ f_zasita_1; // 08 - флаг защита аккум от переразряда модель 1 PORTB.1=0; // звук зуммер - выкл. kb1 = 0; }; /////////////////////////////////// флаг if (f_zasita_1) { LCD(12); LCD(20); LCD(21); // "ВКЛ" } else { LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 43) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЗАЩИТА-2" LCD(17); LCD(10); LCD(35); LCD(18); LCD(28); LCD(10); LCD(47); LCD(2); fpp(54); ////////////////////////////////////////////////////////////////// ak_model(zasita_2); // zasita_2 - напряжение аккум модель меньше .. V -2 ////////////////////////////////////////////////////////////////// if ( (menu == 43) && kb1 ) { zasita_2 = zasita_2 + 10; if (zasita_2 > 100) zasita_2 = 50; kb1 = 0; }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 44) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ЗАЩИТА-2" LCD(17); LCD(10); LCD(35); LCD(18); LCD(28); LCD(10); LCD(47); LCD(2); fpp(56); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// if ( (menu == 44) && kb1 ) { f_zasita_2 = ~ f_zasita_2; // 10 - флаг защита аккум от переразряда модель 2 PORTB.1=0; // звук зуммер - выкл. kb1 = 0; }; /////////////////////////////////// флаг if (f_zasita_2) { LCD(12); LCD(20); LCD(21); // "ВКЛ" } else { LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 45) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "СВЕТ" LCD(27); LCD(12); LCD(15); LCD(28); fpp(80); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// if ( (menu == 45) && kb1 ) { flag_svet = ~ flag_svet; // флаг Вкл свет kb1 = 0; }; /////////////////////////////////// флаг if (flag_svet) { LCD(12); LCD(20); LCD(21); // "ВКЛ" } else { LCD(47); LCD(47); LCD(47); // "---" }; //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 if (menu == 46) LCD(49); // ">" else fpp(6); // " " ////////////////////////////////////////////////////////////////// "ПОТОП" LCD(25); LCD(24); LCD(28); LCD(24); LCD(25); fpp(74); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// if ( (menu == 46) && kb1 ) { flag_potop = ~ flag_potop; // флаг Вкл потоп PORTB.1=0; // зуммер вода модель - выкл. PORTD.4=0; // индикатор вода модель - выкл. kb1 = 0; }; /////////////////////////////////// флаг if (flag_potop) { LCD(12); LCD(20); LCD(21); // "ВКЛ" } else { LCD(47); LCD(47); LCD(47); // "---" }; ////////////////////////////////////////////////////////////////////////////////////////////////// menu > if ( menu == 47 ) { menu = 3; // > меню 4: модель }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор ////////////////////////////////////////////////////////////////////////////////////////////////////////// _11: // ошибка EEPROM //////////////////////////////////////////////////////////////////////////////////// меню LCD индикатор: PORTD.0=0; // SS OLED 128x64 /////////////////////////////////////////////////////////////////////////////////////////////// строка 0 kursor(0); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 1 kursor(1); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 2 kursor(2); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 3 kursor(3); //Set Page Addres 0 < Page < 7 // 6x21=126+2 ////////////////////////////////////////////////////////////////// " ОШИБКА EEPROM " fpp(24); LCD(24); LCD(34); LCD(18); LCD(11); LCD(20); LCD(10); fpp(8); LCD(15); LCD(15); LCD(26); LCD(43); LCD(24); LCD(22); fpp(24); //////////////////////////////////////////////////////////////////////////////////////////////// строка 4 kursor(4); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 5 kursor(5); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 6 kursor(6); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); //////////////////////////////////////////////////////////////////////////////////////////////// строка 7 kursor(7); //Set Page Addres 0 < Page < 7 // 6x21=126+2 fpp(128); ////////////////////////////////////////////////////////////////////////////////////////////////// menu > if ( menu == 51 ) { menu = 0; // сброс меню }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// PORTD.0=1; // SS OLED 128x64 goto _5; // > выход из меню LCD индикатор ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// }