'===============================================================================
$regfile = "m32def.dat" ' мега32
$crystal = 16000000
'$baud = 4800
$hwstack = 120 ' default use 32 for the hardware stack
$swstack = 120 ' default use 10 for the SW stack
$framesize = 120 ' default use 40 for the frame space
'Ucsr0a.1 = 1
Config Timer0 = Timer , Prescale = 64 'настройка прерывания Для Подсчета 1 Секунды Pulse по таймеру ' Делитель 32768 / 64 / 256
On Timer0 Pulse:
Enable Interrupts
Enable Timer0
'********************* ADC ***********************
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'********************* ШИМ ***********************
'Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 256
Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Up , Prescale = 256
Config Portd.4 = Output
'Config Portd.5 = Output
'********************************************
Config Int0 = Falling
' переход по получению импульса
On Int0 Обработка_прерывания_int0
Enable Int0
'---------------- Используемые библиотеки ----------------------------------------
'$lib "mcsbyte.lbx"
' $lib "glcd-Nokia1100.lib"
$lib "glcd-Nokia1100_China.lib"
'---------------- Настраиваем LCD Nokia1100 -------------------
Config Graphlcd = 128x64sed , Cs1 = Porta.7 , Si = Portc.7 , Sclk = Porta.5 , Rst = Porta.6
Const Negative_lcd = 0 ' Для негативного вывода информации, установить "Negative_lcd = 1"
Const Mirror_y = 1
Const Mirror_x = 0
Initlcd ' Инициализируем LCD
Cls ' Очищаем LCD
'********************* Установки Дисплея и Инициализация ***********************
'Nokia_spi_data Alias Portc.7 : Config Portc.7 = Output 'SDA - можно задать любую ножку
'Nokia_spi_clock Alias Porta.5 : Config Porta.5 = Output 'SCLK - можно задать любую ножку
'Nokia_cs Alias Porta.7 : Config Porta.7 = Output 'CS - можно задать любую ножку
'Display_reset Alias Porta.6 : Config Porta.6 = Output 'LCD_RESET - можно задать любую ножку
'Display_reset = 1
'Nokia_cs = 1
'Declare Sub Nokia_init()
'Declare Sub Nokia_clear()
'Declare Sub Nokia_text(byval Nokia_x As Byte , Byval Nokia_y As Byte , Byval Nokia_text As String , Byval Nokia_inversion As Byte)
'Declare Sub Nokia_picture(bylabel Nokia_label As Word)
'Dim W As Iram Word At 8 Overlay
'Dim Nokia_data_9 As Integer
'Call Nokia_init() ' Инициализируем дисплей
'*******************************************************************************
Config Portb.6 = Input , Portb.2 = Input , Portb.4 = Input , Portb.3 = Input , Portb.5 = Input , Portd.7 = Input , Portc.2 = Input , Portc.3 = Input , Portd.5 = Input , Portd.6 = Input , Portc.4 = Input , Portc.5 = Input , Portd.0 = Input , Portd.1 = Input , Porta.3 = Input , Porta.4 = Input
Set Portb.6 : Set Portb.2 : Set Portb.4 : Set Portb.3 : Set Portb.5 : Set Portd.7 : Set Portc.2 : Set Portc.3 : Set Portd.5 : Set Portd.6 : Set Portc.4 : Set Portc.5 : Set Portd.0 : Set Portd.1 : Set Porta.3 : Set Porta.4
Стоп_key Alias Pinb.6 : Пуск_пауза_key Alias Pinb.2 : Плюс_вода_temp Alias Pinb.4 : Минус_вода_temp Alias Pinb.3 : Плюс_обороты_key Alias Pinb.5 : Минус_обороты_key Alias Pind.7 : Курсор_вверх_key Alias Pinc.2 : Курсор_вниз_key Alias Pinc.3 : Количество_полосканий_плюс_key Alias Pind.5 : Количество_полосканий_минус_key Alias Pind.6
Время_стирки_плюс_key Alias Pinc.4 : Время_стирки_минус_key Alias Pinc.5 : Время_замачевания_плюс_key Alias Pind.0 : Время_замачевания_минус_key Alias Pind.1 : Отстрочка_плюс_key Alias Pina.3 : Отстрочка_минус_key Alias Pina.4
'*******************************************************************************
Const Realization_i2c = 2 ' 1 - аппаратный i2c, 2 - программный i2c
#if Realization_i2c = 2
Config Sda = Portb.0
Config Scl = Portb.1
Config I2cdelay = 1
#endif
I2cinit ' Инициализация шины I2c
Waitms 50 ' Ждём пока запустится i2c
'===============================================================================
' Конфигурация акселерометра ADXL345
'===============================================================================
'http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf
Const Запись_adxl345 = &HA6 ' ADXL345 адрес записи
Const Чтение_adxl345 = &HA7 ' ADXL345 адрес чтения
I2cstart
I2cwbyte Запись_adxl345
I2cwbyte &H2D ' Power-saving features control
I2cwbyte &B0000_1000
I2cstop
I2cstart
I2cwbyte Запись_adxl345
I2cwbyte &H31
I2cwbyte &B00000000 ' Data format control
I2cstop ' Освобождаем шину I2c
I2csend Запись_adxl345 , &B00001000 ' Пробуждение датчика
'===============================================================================
' Используемые переменные
'===============================================================================
Dim Флаг_есть_данные As Byte
Dim Флаг_обновить_lcd As Byte
Dim Количество_измерений As Byte
Dim Угол_наклона_integer As Integer
Dim X_byte(2) As Byte
Dim Y_byte(2) As Byte
Dim Z_byte(2) As Byte
Dim X_integer As Integer At X_byte(1) Overlay
Dim Y_integer As Integer At Y_byte(1) Overlay
Dim Z_integer As Integer At Z_byte(1) Overlay
Dim X_integer_нов As Integer , X_integer_разница As Integer
Dim Y_integer_нов As Integer , Y_integer_разница As Integer
Dim Z_integer_нов As Integer , Z_integer_разница As Integer
Dim Сумма_x_integer As Integer
Dim Сумма_y_integer As Integer
Dim Сумма_z_integer As Integer
Dim Сумма_x_y_z As Integer
Dim Сумма_x_y_z_новое As Integer
Dim К As Byte
Dim Сумма As Integer
Dim X_single As Integer
Dim Y_single As Integer
Dim Z_single As Integer
Dim X_str As String * 8
Dim Y_str As String * 8
Dim Z_str As String * 8
Dim P_gain As Byte
Dim I_gain As Byte
Dim D_gain As Byte
Dim Gain_scaling As Integer
Dim Kof As Byte
Dim F_rpm As Byte
Dim Count_t As Integer
Dim Count_1 As Integer
Dim Count_2 As Integer
Dim Spid_1 As Integer
Dim Feedback As Integer
Dim Setpoint As Integer
Dim Заданная_скорость As Byte
Dim Pid_p As Integer
Dim Pid_d As Integer
Dim Pid_px As Integer
Dim Pid_y As Integer
Dim Pid_i As Integer
Dim Pid_y_1 As Integer
Dim Pid_y_2 As Integer
Dim A As Byte
'===========================переменные калибровка терморезистора========================================
Dim Adc_rtc As Integer
Dim T_0_gr As Integer , T_10_gr As Integer , T_20_gr As Integer , T_30_gr As Integer , T_40_gr As Integer , T_50_gr As Integer , T_60_gr As Integer , T_70_gr As Integer , T_80_gr As Integer , T_90_gr As Integer , T_100_gr As Integer
Dim T_0_gr_eram As Integer , T_10_gr_eram As Integer , T_20_gr_eram As Integer , T_30_gr_eram As Integer , T_40_gr_eram As Integer , T_50_gr_eram As Integer , T_60_gr_eram As Integer , T_70_gr_eram As Integer , T_80_gr_eram As Integer , T_90_gr_eram As Integer , T_100_gr_eram As Integer
Dim T_univ_gr_temp As Integer
Dim Y As Integer
Dim Adc2 As Integer
Dim Adc3 As Integer
Dim Adc3_temp As Integer
Dim Температура_adc4 As Integer
Dim Temper_kal As Byte
Dim Стоп As Bit
Dim Инженерное_меню As Integer
Dim Курсор_вверх As Bit
Dim Курсор_вниз As Bit
Dim Пуск_пауза As Bit
Dim Pod_1 As Bit , Pod_2 As Bit , Pod_3 As Bit , Pod_4 As Bit , Pod_5 As Bit , Pod_6 As Bit , Pod_7 As Bit , Pod_8 As Bit , Pod_9 As Bit , Pod_10 As Bit , Pod_11 As Bit , Pod_12 As Bit , Pod_13 As Bit
Dim Pod_14 As Bit , Pod_15 As Bit , Pod_16 As Bit , Pod_17 As Bit , Pod_18 As Bit , Pod_19 As Bit , Pod_20 As Bit , Pod_21 As Bit , Pod_22 As Bit , Pod_23 As Bit , Pod_24 As Bit , Pod_25 As Bit
Dim Pod_26 As Bit , Pod_27 As Bit , Pod_28 As Bit , Pod_29 As Bit
Dim Kursor_1 As Byte , Kursor_2 As Byte , Kursor_3 As Byte , Kursor_4 As Byte , Kursor_5 As Byte , Kursor_6 As Byte
Dim Число_импульсов_обор_taxo As Byte , Число_импульсов_обор_taxo_eram As Byte , Число_импульсов_обор_ustavka As Byte
Dim Плюс_вода_темп As Byte , Минус_вода_темп As Byte , Заданная_температура_воды_lcd As Byte
Dim Плюс_обороты As Byte , Минус_обороты As Byte , Заданные_обороты_отжима_taxo As Integer
Dim Импульсы_таймера As Integer
Dim Pusk_1 As Byte
Dim Количество_полосканий_плюс As Byte , Количество_полосканий_минус As Byte , Зад_количество_полосканий_lcd As Byte
Dim Время_стирки_плюс As Byte , Время_стирки_минус As Byte , Заданное_время_отирки_lcd As Integer , Часы_стирки As Integer , Минуты_стирки As Integer
Dim Время_замачевания_плюс As Byte , Время_замачевания_минус As Byte , Заданное_время_замачевания_lcd As Integer , Часы_замоч_конец As Integer , Минуты_замоч_конец As Integer
Dim Отстрочка_плюс As Byte , Отстрочка_минус As Byte , Заданное_время_отстрочки_lcd As Integer , Часы_отстр_конец As Integer , Минуты_отстр_конец As Integer
Dim Номер_программы As Byte , Номер_программы_новое As Byte , Номер_программы_новое_2 As Byte , Номер_программы_eram As Byte
'1 , 3 , 6 , 9 , 12 , 15 , 18 , 21 , 24 , 27 , 30 , 33,36 используемые ячеки памяти
'===============================================================================
' чтение уставок - точки калипровки термодатчика
'===============================================================================
Readeeprom T_0_gr , 1 ' чтение уставки из память - точка калибровки 0 градусов
Readeeprom T_10_gr , 3 ' чтение уставки из память - точка калибровки 10 градусов
Readeeprom T_20_gr , 6 ' чтение уставки из память - точка калибровки 20 градусов
Readeeprom T_30_gr , 9 ' чтение уставки из память - точка калибровки 30 градусов
Readeeprom T_40_gr , 12 ' чтение уставки из память - точка калибровки 40 градусов
Readeeprom T_50_gr , 15 ' чтение уставки из память - точка калибровки 50 градусов
Readeeprom T_60_gr , 18 ' чтение уставки из память - точка калибровки 60 градусов
Readeeprom T_70_gr , 21 ' чтение уставки из память - точка калибровки 70 градусов
Readeeprom T_80_gr , 24 ' чтение уставки из память - точка калибровки 80 градусов
Readeeprom T_90_gr , 27 ' чтение уставки из память - точка калибровки 90 градусов
Readeeprom T_100_gr , 30 ' чтение уставки из память - точка калибровки 100 градусов
'===============================================================================
' чтение уставки - число импульсов за один оборот барабана
'===============================================================================
Readeeprom Число_импульсов_обор_ustavka , 33 ' чтение уставки - число импульсов за один оборот барабана
'===============================================================================
'===============================================================================
' чтение уставки - Номера программы
'===============================================================================
Readeeprom Номер_программы , 36 ' чтение уставки - Номера программы
'===============================================================================
' Настройка прерывания INT0 Прерывание для подсчета входных импульсов
'===============================================================================
'Настраиваем вывод на вход и подтягиваем к "-", но этой подтяжки мало, смотреть схему
' Config Pind.2 = Input : Reset Portd.2
'Прерывание срабатывает по нарастанию уровня Rising (по переднему фронту) ; Falling (по заднему фронту) ; Low Level (по низкому уровню)
'Config Int0 = Falling
'Ссылка на подпрограмму обработчика прерывания INT0, переход фазы через "0"
'On Int0 Обработка_прерывания_int0 Nosave ' После прерывания идем в подпрограмму обработки прерывания
'Eifr.intf0 = 1 ' Сбрасываем флаг прерывания INT0
'Enable Int0 ' Разрешаем прерывания INT0
'=============================== Коеффициенты ПИДР ===========================================
P_gain = 10
I_gain = 3
D_gain = 0
Gain_scaling = 2
'Kof = 30
'F_rpm = 0
'==========================================================================
'Контроль Alias Portb.7
'Config Portb.7 = Output
Стоп = Стоп_key
If Стоп = 0 Then 'Если нажать кнопку СТОП и включить в СЕТЬ стиральню машину то попадаем в инженерное меню
Инженерное_меню = 10
Pod_4 = 1
End If
'===============================================================================
Главный_цикл:
'===============================================================================
'Incr Pwm1a 'плавно увеличиваем значение регистра сравнения OCR1A
'Incr Pwm1b 'плавно увеличиваем значение регистра сравнения OCR1B
'Ocr1b = 10
'Gosub Калибровка_rtc 'Макрос записи точек при калибровке терморезистора доступна при замкнутой перемычки на плате
Gosub Линейность_rtc 'Макрос линейности терморезистора
If Инженерное_меню <> 0 Then 'Если зашли в инженерное меню
Gosub Инженерное_меню_glav 'Макрос инженерного меню
Else
If Pusk_1 = 0 Then
Gosub Наименование_программы_lcd 'Макрос отображения наименования программы стирки на ЛСД
End If
End If
'=========== Кнопка "КУРСОР В ВЕРХ" =========
Курсор_вверх = Курсор_вверх_key
If Курсор_вверх = 0 And Pod_1 = 0 Then '1
Pod_1 = 1
If Инженерное_меню <> 0 Then '2
If Инженерное_меню > 9 And Инженерное_меню < 41 Then '5 если инженерное меню в диапазоне от 10 - 40
If Инженерное_меню < 20 Then '4
Инженерное_меню = 40
Else '4
Инженерное_меню = Инженерное_меню - 10
End If '4
End If '5
Else '2
Номер_программы = Номер_программы + 1 'если Инженерное_меню не равно 0 то выбираем номер программы курсором в верх
Pusk_1 = 0 'останавливаем таймер времени отображения задаваеммых параметров (температура,обороты,программа ,...)
Импульсы_таймера = 0 'зброс импульсов
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
End If '2
If Инженерное_меню = 100 Then '7 если инженерное меню =100 то курсором меняем значение при котором меряется температура
If Temper_kal > 91 Then '6
Temper_kal = 0
Else '6
Temper_kal = Temper_kal + 10
Kursor_5 = 0
End If '6
End If '7
Else '1
If Курсор_вверх = 1 And Pod_1 = 1 Then '3
Pod_1 = 0
End If '3
End If '1
'=========== Кнопка "КУРСОР ВНИЗ" =========
Курсор_вниз = Курсор_вниз_key
If Курсор_вниз = 0 And Pod_2 = 0 Then
Pod_2 = 1
If Инженерное_меню <> 0 Then '2
If Инженерное_меню > 9 And Инженерное_меню < 41 Then '5 если инженерное меню в диапазоне от 10 - 40
If Инженерное_меню > 30 Then '4
Инженерное_меню = 10
Else '4
Инженерное_меню = Инженерное_меню + 10
End If '4
End If '5
Else '2
Номер_программы = Номер_программы - 1 'если Инженерное_меню не равно 0 то выбираем номер программы курсором вниз
Pusk_1 = 0 'останавливаем таймер времени отображения задаваеммых параметров (температура,обороты,программа ,...)
Импульсы_таймера = 0 'зброс импульсов
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
End If '2
If Инженерное_меню = 100 Then '7 если инженерное меню =100 то курсором меняем значение при котором меряется температура
If Temper_kal < 1 Then '6
Temper_kal = 100
Else '6
Temper_kal = Temper_kal - 10
Kursor_5 = 0
End If '6
End If '7
Else
If Курсор_вниз = 1 And Pod_2 = 1 Then
Pod_2 = 0
End If
End If
'=========== Кнопка "ПУСК/ПАУЗА" =========
Пуск_пауза = Пуск_пауза_key
If Пуск_пауза = 0 And Pod_3 = 0 Then
Pod_3 = 1
If Номер_программы_новое_2 <> Номер_программы Then 'заностм в память Номера программы
Номер_программы_eram = Номер_программы
Номер_программы_новое_2 = Номер_программы
Writeeeprom Номер_программы_eram , 36
End If
If Инженерное_меню = 200 Then '3 если инженерное меню =200
Число_импульсов_обор_taxo_eram = Число_импульсов_обор_taxo
Writeeeprom Число_импульсов_обор_taxo_eram , 33 'запись в память числа импульсов на оборот доступна при замкнутой перемычки на плате
Kursor_6 = 1
End If '3
If Инженерное_меню = 100 Then '2 если инженерное меню =100
Gosub Калибровка_rtc 'Макрос записи точек при калибровке терморезистора доступна при замкнутой перемычки на плате
Kursor_5 = 1
End If '2
If Инженерное_меню > 9 And Инженерное_меню < 41 Then '1 если инженерное меню в диапазоне от 10 - 40 то умножаем на 10
Инженерное_меню = Инженерное_меню * 10
Cls ' Очищаем LCD
End If '1
Else
If Пуск_пауза = 1 And Pod_3 = 1 Then
Pod_3 = 0
End If
End If
'=========== Кнопка "СТОП/ВЫХОД" =========
Стоп = Стоп_key
If Стоп = 0 And Pod_4 = 0 Then
Pod_4 = 1
If Инженерное_меню > 9 And Инженерное_меню < 41 Then '2 если инженерное меню в диапазоне от 9 - 41 то выход ыход из инженерного меню
Инженерное_меню = 0
Cls ' Очищаем LCD
End If '2
If Инженерное_меню > 99 And Инженерное_меню < 401 Then '1 если инженерное меню в диапазоне от 99 - 401 то делим на 10
Инженерное_меню = Инженерное_меню / 10
Число_импульсов_обор_taxo = 0 'обнуляем счетчик перед повторным счетом импульсов при калибровке
Kursor_6 = 0
End If '1
Else
If Стоп = 1 And Pod_4 = 1 Then
Pod_4 = 0
End If
End If
'=========== Кнопка "Плюс уставка заданная температура" =========
Плюс_вода_темп = Плюс_вода_temp
If Плюс_вода_темп = 0 And Pod_5 = 0 And Pod_13 = 1 Then 'Pod_13 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_5 = 1
If Заданная_температура_воды_lcd > 89 Then
Заданная_температура_воды_lcd = 0
Else
Заданная_температура_воды_lcd = Заданная_температура_воды_lcd + 5
End If
Else
If Плюс_вода_темп = 1 And Pod_5 = 1 Then
Pod_5 = 0
End If
End If
'=========== Кнопка "Минус уставка заданная температура" =========
Минус_вода_темп = Минус_вода_temp
If Минус_вода_темп = 0 And Pod_6 = 0 And Pod_13 = 1 Then 'Pod_13 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_6 = 1
If Заданная_температура_воды_lcd < 1 Then
Заданная_температура_воды_lcd = 90
Else
Заданная_температура_воды_lcd = Заданная_температура_воды_lcd - 5
End If
Else
If Минус_вода_темп = 1 And Pod_6 = 1 Then
Pod_6 = 0
End If
End If
'=========== Кнопка "Плюс уставка заданные обороты при отжиме" =========
Плюс_обороты = Плюс_обороты_key
If Плюс_обороты = 0 And Pod_7 = 0 And Pod_11 = 1 Then 'Pod_11 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_7 = 1
If Заданные_обороты_отжима_taxo > 1999 Then
Заданные_обороты_отжима_taxo = 200
Else
Заданные_обороты_отжима_taxo = Заданные_обороты_отжима_taxo + 100
End If
Else
If Плюс_обороты = 1 And Pod_7 = 1 Then
Pod_7 = 0
End If
End If
'=========== Кнопка "Минус уставка заданные обороты при отжиме" =========
Минус_обороты = Минус_обороты_key
If Минус_обороты = 0 And Pod_8 = 0 And Pod_11 = 1 Then 'Pod_11 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_8 = 1
If Заданные_обороты_отжима_taxo < 201 Then
Заданные_обороты_отжима_taxo = 2000
Else
Заданные_обороты_отжима_taxo = Заданные_обороты_отжима_taxo - 100
End If
Else
If Минус_обороты = 1 And Pod_8 = 1 Then
Pod_8 = 0
End If
End If
'=========== Кнопка "Плюс уставка заданное время стирки" =========
Время_стирки_плюс = Время_стирки_плюс_key
If Время_стирки_плюс = 0 And Pod_14 = 0 And Pod_16 = 1 Then 'Pod_16 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_14 = 1
If Заданное_время_отирки_lcd > 299 Then
Заданное_время_отирки_lcd = 10
Else
Заданное_время_отирки_lcd = Заданное_время_отирки_lcd + 10
End If
Else
If Время_стирки_плюс = 1 And Pod_14 = 1 Then
Pod_14 = 0
End If
End If
'=========== Кнопка "Минус уставка заданное время стирки" =========
Время_стирки_минус = Время_стирки_минус_key
If Время_стирки_минус = 0 And Pod_15 = 0 And Pod_16 = 1 Then 'Pod_16 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_15 = 1
If Заданное_время_отирки_lcd < 11 Then
Заданное_время_отирки_lcd = 300
Else
Заданное_время_отирки_lcd = Заданное_время_отирки_lcd - 10
End If
Else
If Время_стирки_минус = 1 And Pod_15 = 1 Then
Pod_15 = 0
End If
End If
'=========== Кнопка "Плюс уставка заданное количество полосканий" =========
Количество_полосканий_плюс = Количество_полосканий_плюс_key
If Количество_полосканий_плюс = 0 And Pod_18 = 0 And Pod_17 = 1 Then 'Pod_17 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_18 = 1
If Зад_количество_полосканий_lcd > 9 Then
Зад_количество_полосканий_lcd = 0
Else
Зад_количество_полосканий_lcd = Зад_количество_полосканий_lcd + 1
End If
Else
If Количество_полосканий_плюс = 1 And Pod_18 = 1 Then
Pod_18 = 0
End If
End If
'=========== Кнопка "Минус уставка заданное количество полосканий" =========
Количество_полосканий_минус = Количество_полосканий_минус_key
If Количество_полосканий_минус = 0 And Pod_19 = 0 And Pod_17 = 1 Then 'Pod_17 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_19 = 1
If Зад_количество_полосканий_lcd < 1 Then
Зад_количество_полосканий_lcd = 10
Else
Зад_количество_полосканий_lcd = Зад_количество_полосканий_lcd - 1
End If
Else
If Количество_полосканий_минус = 1 And Pod_19 = 1 Then
Pod_19 = 0
End If
End If
'=========== Кнопка "Плюс уставка заданное время замачивания" =========
Время_замачевания_плюс = Время_замачевания_плюс_key
If Время_замачевания_плюс = 0 And Pod_22 = 0 And Pod_24 = 1 Then 'Pod_24 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_22 = 1
If Заданное_время_замачевания_lcd > 1439 Then
Заданное_время_замачевания_lcd = 0
Else
Заданное_время_замачевания_lcd = Заданное_время_замачевания_lcd + 10
End If
Else
If Время_замачевания_плюс = 1 And Pod_22 = 1 Then
Pod_22 = 0
End If
End If
'=========== Кнопка "Минус уставка заданное время замачивания" =========
Время_замачевания_минус = Время_замачевания_минус_key
If Время_замачевания_минус = 0 And Pod_23 = 0 And Pod_24 = 1 Then 'Pod_24 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_23 = 1
If Заданное_время_замачевания_lcd < 10 Then
Заданное_время_замачевания_lcd = 1440
Else
Заданное_время_замачевания_lcd = Заданное_время_замачевания_lcd - 10
End If
Else
If Время_замачевания_минус = 1 And Pod_23 = 1 Then
Pod_23 = 0
End If
End If
'=========== Кнопка "Плюс уставка заданное время отстрочки" =========
Отстрочка_плюс = Отстрочка_плюс_key
If Отстрочка_плюс = 0 And Pod_26 = 0 And Pod_28 = 1 Then 'Pod_28 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_26 = 1
If Заданное_время_отстрочки_lcd > 1439 Then
Заданное_время_отстрочки_lcd = 0
Else
Заданное_время_отстрочки_lcd = Заданное_время_отстрочки_lcd + 10
End If
Else
If Отстрочка_плюс = 1 And Pod_26 = 1 Then
Pod_26 = 0
End If
End If
'=========== Кнопка "Минус уставка заданное время отстрочки" =========
Отстрочка_минус = Отстрочка_минус_key
If Отстрочка_минус = 0 And Pod_27 = 0 And Pod_28 = 1 Then 'Pod_28 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
Pod_27 = 1
If Заданное_время_отстрочки_lcd < 10 Then
Заданное_время_отстрочки_lcd = 1440
Else
Заданное_время_отстрочки_lcd = Заданное_время_отстрочки_lcd - 10
End If
Else
If Отстрочка_минус = 1 And Pod_27 = 1 Then
Pod_27 = 0
End If
End If
'=========== Контроль нажатия кнопок =========
'Если Нажать Одну Кнопку Из Выбора Оборотов , Температуры И.т.д. То Запускаем Счетчик Времени Отображение На Лсд Етих Уставок
If Плюс_вода_темп = 0 Or Минус_вода_темп = 0 Or Плюс_обороты = 0 Or Минус_обороты = 0 Or Время_стирки_плюс = 0 Or Время_стирки_минус = 0 Or Количество_полосканий_плюс = 0 Or Количество_полосканий_минус = 0 Or Время_замачевания_плюс = 0 Or Время_замачевания_минус = 0 Or Отстрочка_плюс = 0 Or Отстрочка_минус = 0 Then
If Pusk_1 = 0 Then
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
End If
Pusk_1 = 1 'Пуск таймера времени отображения уставок
Импульсы_таймера = 0 'Пока кнопка нажата таймер =0
If Pod_9 = 0 Then
Pod_9 = 1
End If
Else
Pod_9 = 0
End If
If Pusk_1 = 1 Then
Gosub Лсд_уставки_lcd 'Макрос Отображения на ЛСД задаваеммых параметров (температура,обороты,программа ,...)
End If
'=========== ОПРОС АЦП №5 ТЕМПЕРАТУРА =========
'Disable Interrupts 'на всякий отключаем прерывания, это то, что может затормозить программу если не отключить и опросить АЦП
Start Adc 'запуск опроса АЦП
Adc_rtc = Getadc(1) ' чтение в переменну значение АЦП 5
'Waitms 20 'будет глючить, ставьте задержку
Stop Adc
'Disable Interrupts
Gosub Измерение_adxl345
Сумма_x_integer = Сумма_x_integer + X_integer
Сумма_y_integer = Сумма_y_integer + Y_integer
Сумма_z_integer = Сумма_z_integer + Z_integer
'Набираем сумму из 64 измерений
Incr Количество_измерений
'Усредняем полученные данные
If Количество_измерений > 64 Then
X_single = Сумма_x_integer
Shift X_single , Right , 6 , Signed ' Аналог X_single = Сумма_x_single / 64
Y_single = Сумма_y_integer
Shift Y_single , Right , 6 , Signed ' Аналог Y_single = Сумма_y_single / 64
Z_single = Сумма_z_integer
Shift Z_single , Right , 6 , Signed ' Аналог Z_single = Сумма_z_single / 64
Количество_измерений = 0
Флаг_есть_данные = 1
End If
'Переводим в угловые градусы, минуты, секунды
If Флаг_есть_данные <> 0 Then
If X_integer <> X_integer_нов Then
X_integer_разница = X_integer - X_integer_нов
X_integer_нов = X_integer
If X_integer_разница < 0 Then
X_integer_разница = X_integer_разница * -1
End If
End If
If Y_integer <> Y_integer_нов Then
Y_integer_разница = Y_integer - Y_integer_нов
Y_integer_нов = Y_integer
If Y_integer_разница < 0 Then
Y_integer_разница = Y_integer_разница * -1
End If
End If
If Z_integer <> Z_integer_нов Then
Z_integer_разница = Z_integer - Z_integer_нов
Z_integer_нов = Z_integer
If Z_integer_разница < 0 Then
Z_integer_разница = Z_integer_разница * -1
End If
End If
Сумма_x_y_z = X_integer_разница + Y_integer_разница
Сумма_x_y_z = Сумма_x_y_z + Z_integer_разница
Сумма = Сумма + Сумма_x_y_z
К = К + 1
If К > 2 Then
Сумма_x_y_z = Сумма / 3
Сумма_x_y_z_новое = Сумма_x_y_z
Сумма = 0
К = 0
Флаг_обновить_lcd = 1
End If
'Флаг_обновить_lcd = 1
Флаг_есть_данные = 0
End If
'Выводим на LCD
If Флаг_обновить_lcd <> 0 Then
If Инженерное_меню = 0 And Pusk_1 = 0 Then 'Если зашли в инженерное меню
'Форматируем, чтобы не прыгали показания
'X_str = Str(сумма_x_y_z) 'выводим на ЛСД данные от акселерометра:
' X_str = Format(x_str , "0000")
' Setfont Font_6x8
' Lcdat 1 , 1 , X_str , 0
End If
Флаг_обновить_lcd = 0
End If
'If Инженерное_меню = 0 And Pusk_1 = 0 Then 'Если зашли в инженерное меню
' Z_str = Str(spid_1) 'выводим на ЛСД скорость вращения:
' Z_str = Format(z_str , "0000")
' Setfont Font_12x16
' Lcdat 5 , 1 , Z_str , 0
'Z_str = Str(температура_adc4) 'выводим на ЛСД температуру воды:
' Z_str = Format(z_str , "0000")
' Lcdat 7 , 1 , Z_str , 0
' End If
'===============================================================================
Goto Главный_цикл
End
'===============================================================================
'===============================================================================
Измерение_adxl345:
'-------------------------------------------------------------------------------
I2cstart ' Подготовка к работе шины I2c
I2cwbyte Запись_adxl345 ' Адресное обращение к используемому чипу i2c, для записи
I2cwbyte &H32 ' Регистр с которого будем считывать данные
I2crepstart ' Повторная подготовка к работе шины I2c
I2cwbyte Чтение_adxl345 ' Адресное обращение к используемому чипу i2c, для чтения
I2crbyte X_byte(1) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte X_byte(2) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Y_byte(1) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Y_byte(2) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Z_byte(1) , Ack ' Читаем значение из регистра чипа i2c
I2crbyte Z_byte(2) , Nack ' Читаем значение из регистра чипа i2c
I2cstop ' Освобождаем шину I2c
'-------------------------------------------------------------------------------
Return
'===============================================================================
Pulse: ' Прерывание Для Подсчета 1 Секунды Частота прерывания 500 гц 100 - это 200 мс
If Count_t >= 100 Then ' 1 Частота прерывания 500 гц 100= это (500/100=5 гц),период прерывания 1/5гц = 0.2 сек,
'если мы определили что на один оборот 20 импулсов , то 300/20импульсов = 30 ,
' 300 Это Число Зависит От Коефицыента(100) На Который Делится Частота Прерывания
'30 - это коефициент на который множим измеренные импульсы за 0.2 сек - пример (Spid_1 = Spid_1 * 30),
'и на етот же коефициент (30) умножаем заданную скорость для отображения на ЛСД заданные обороты/мин
Spid_1 = Count_1
Spid_1 = Spid_1 * 30
'Spid_1 = Spid_1 * 3
Feedback = Count_1 ' измерянное
Setpoint = 30 'заданная_скорость (если число импульсов на оборот 20 то 1 - это 1*30 оборотов/мин) , если заданные обороты 100 то 100/на коеф-нт 30
Pid_p = Setpoint - Feedback ' ошибка
Pid_d = Pid_p - Pid_px
Pid_px = Pid_p
Pid_y = Pid_p * P_gain
Pid_y_1 = Pid_i * I_gain
Pid_y = Pid_y + Pid_y_1
Pid_y_2 = Pid_d * D_gain
Pid_y = Pid_y + Pid_y_2
Pid_y = Pid_y / Gain_scaling
If Pid_y < 255 Then ' 2
If Pid_y > 0 Then
Pid_i = Pid_i + Pid_p
Else
Pid_y = 0
End If
Else
Pid_y = 255
End If ' 2
Ocr1b = Pid_y ' PWM
Count_t = 0
Число_импульсов_обор_taxo = Число_импульсов_обор_taxo + Count_1 'Count_2- счет импульсов при калибровке ТАХО и повороте барабана на один оборот
Count_1 = 0
End If ' 1
Count_t = Count_t + 1
If Pusk_1 = 1 Then 'Пуск таймера времени отображения уставок
Импульсы_таймера = Импульсы_таймера + 1
If Импульсы_таймера > 200 Then '500- ето одна секунда
Pusk_1 = 0
Импульсы_таймера = 0
End If
End If
'Count_2 = Count_2 + 1
'If A = 1 Then
' A = 0
' Portb.7 = 0
' Else
' A = 1
' Portb.7 = 1
'End If
Return
Калибровка_rtc: 'Макрос записи точек при калибровке терморезистора, доступна при замкнутой перемычки на плате
If Temper_kal = 0 Then 'заностм в память данные с ADC при 0 градусах
T_0_gr_eram = Adc_rtc
Writeeeprom T_0_gr_eram , 1
End If
If Temper_kal = 10 Then 'заностм в память данные с ADC при 10 градусах
T_10_gr_eram = Adc_rtc
Writeeeprom T_10_gr_eram , 3
End If
If Temper_kal = 20 Then 'заностм в память данные с ADC при 20 градусах
T_20_gr_eram = Adc_rtc
Writeeeprom T_20_gr_eram , 6
End If
If Temper_kal = 30 Then 'заностм в память данные с ADC при 30 градусах
T_30_gr_eram = Adc_rtc
Writeeeprom T_30_gr_eram , 9
End If
If Temper_kal = 40 Then 'заностм в память данные с ADC при 40 градусах
T_40_gr_eram = Adc_rtc
Writeeeprom T_40_gr_eram , 12
End If
If Temper_kal = 50 Then 'заностм в память данные с ADC при 50 градусах
T_50_gr_eram = Adc_rtc
Writeeeprom T_50_gr_eram , 15
End If
If Temper_kal = 60 Then 'заностм в память данные с ADC при 60 градусах
T_60_gr_eram = Adc_rtc
Writeeeprom T_60_gr_eram , 18
End If
If Temper_kal = 70 Then 'заностм в память данные с ADC при 70 градусах
T_70_gr_eram = Adc_rtc
Writeeeprom T_70_gr_eram , 21
End If
If Temper_kal = 80 Then 'заностм в память данные с ADC при 80 градусах
T_80_gr_eram = Adc_rtc
Writeeeprom T_80_gr_eram , 24
End If
If Temper_kal = 90 Then 'заностм в память данные с ADC при 90 градусах
T_90_gr_eram = Adc_rtc
Writeeeprom T_90_gr_eram , 27
End If
If Temper_kal = 100 Then 'заностм в память данные с ADC при 100 градусах
T_100_gr_eram = Adc_rtc
Writeeeprom T_100_gr_eram , 30
End If
Return
Линейность_rtc: 'Макрос линейности терморезистора
Adc2 = Adc_rtc
Adc2 = Adc2 * 10
If Adc_rtc > T_10_gr Then '1 Если температура больше 10 гр.
If Adc_rtc > T_20_gr Then '2 Если температура больше 20 гр.
If Adc_rtc > T_30_gr Then '3 Если температура больше 30 гр.
If Adc_rtc > T_40_gr Then '4 Если температура больше 40 гр.
If Adc_rtc > T_50_gr Then '5 Если температура больше 50 гр.
If Adc_rtc > T_60_gr Then '6 Если температура больше 60 гр.
If Adc_rtc > T_70_gr Then '7 Если температура больше 70 гр.
If Adc_rtc > T_80_gr Then '8 Если температура больше 80 гр.
If Adc_rtc > T_90_gr Then '9 Если температура больше 90 гр.
If Adc_rtc > T_100_gr Then '10 Если температура больше 100 гр.
Else '10 Температура = от 90-100 гр.
Y = T_100_gr - T_90_gr
T_univ_gr_temp = T_90_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 90 'Додаем 90 гр
End If '10
Else '9 Температура = от 80-90 гр.
Y = T_90_gr - T_80_gr
T_univ_gr_temp = T_80_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 80 'Додаем 80 гр
End If '9
Else '8 Температура = от 70-80 гр.
Y = T_80_gr - T_70_gr
T_univ_gr_temp = T_70_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 70 'Додаем 70 гр
End If '8
Else '8 Температура = от 60-70 гр.
Y = T_70_gr - T_60_gr
T_univ_gr_temp = T_60_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 60 'Додаем 60 гр
End If '7
Else '6 Температура = от 50-60 гр.
Y = T_60_gr - T_50_gr
T_univ_gr_temp = T_50_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 50 'Додаем 50 гр
End If '6
Else '5 Температура = от 40-50 гр.
Y = T_50_gr - T_40_gr
T_univ_gr_temp = T_40_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 40 'Додаем 40 гр
End If '5
Else '4 Температура = от 30-40 гр.
Y = T_40_gr - T_30_gr
T_univ_gr_temp = T_30_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 30 'Додаем 30 гр
End If '4
Else '3 Температура = от 20-30 гр.
Y = T_30_gr - T_20_gr
T_univ_gr_temp = T_20_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 20 'Додаем 20 гр
End If '3
Else '2 Температура = от 10-20 гр.
Y = T_20_gr - T_10_gr
T_univ_gr_temp = T_10_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
Adc3 = Adc3 + 10 'Додаем 10 гр
End If '2
Else '1 Температура = от 0-10 гр.
Y = T_10_gr - T_0_gr
T_univ_gr_temp = T_0_gr * 10
Adc3_temp = Adc2 - T_univ_gr_temp
Adc3 = Adc3_temp / Y
End If '1
'- обрезаем показания если температура ниже 0 то 0 и если больше 100 то 100 -----
If Adc_rtc <= T_0_gr Then ' Если температура меньше 0 гр.
Температура_adc4 = 0
Else
Температура_adc4 = Adc3
If Adc_rtc >= T_100_gr Then ' Если температура больше 100 гр.
Температура_adc4 = 100
End If
End If
Return
Инженерное_меню_glav: 'Макрос инженерного меню
Setfont Font_6x8
If Инженерное_меню > 9 And Инженерное_меню < 41 Then '1 если инженерное меню в диапазоне от 9 - 41
Lcdat 1 , 1 , "Инженерное меню:" , 0
Lcdat 3 , 1 , "1.Калибровка RTC" , Kursor_1
Lcdat 4 , 1 , "2.Число имп/об " , Kursor_2
Lcdat 5 , 1 , "3.Акселерометр" , Kursor_3
Lcdat 6 , 1 , "4.Ко-ль сигналов" , Kursor_4
End If '1
If Инженерное_меню = 100 Then '2 если инженерное меню в диапазоне 100 калибровка терморезистора
Lcdat 1 , 1 , "Калибровка RTC:" , 0
Lcdat 3 , 1 , "температура на " , 0
Lcdat 4 , 1 , "датчике= гр" , 0
Z_str = Str(temper_kal) 'выводим на ЛСД температуру среды вкоторой находится датчик при калибровке:
Z_str = Format(z_str , "000")
Lcdat 4 , 49 , Z_str , 0
Lcdat 6 , 1 , "Данные ADC=" , 0
Z_str = Str(adc_rtc) 'выводим на ЛСД значение ADC при калибровке:
Z_str = Format(z_str , "0000")
Lcdat 6 , 67 , Z_str , 0
Lcdat 8 , 1 , "ADC в EEPROM" , Kursor_5
End If '2
If Инженерное_меню = 200 Then '2 если инженерное меню в диапазоне 200 калибровка таходатчика
Lcdat 1 , 1 , "Калибровка ТАХО:" , 0
Lcdat 3 , 1 , "импульсы/об от" , 0
Lcdat 4 , 1 , "датчика= имп" , 0
Z_str = Str(число_импульсов_обор_taxo) 'выводим на ЛСД число импульсов при калибровке ТАХО:
Z_str = Format(z_str , "000")
Lcdat 4 , 49 , Z_str , 0
Lcdat 8 , 1 , "ТАХО в EEPROM" , Kursor_6
End If '2
If Инженерное_меню = 10 Then : Kursor_1 = 1
Else
Kursor_1 = 0
End If
If Инженерное_меню = 20 Then : Kursor_2 = 1
Else
Kursor_2 = 0
End If
If Инженерное_меню = 30 Then : Kursor_3 = 1
Else
Kursor_3 = 0
End If
If Инженерное_меню = 40 Then : Kursor_4 = 1
Else
Kursor_4 = 0
End If
Return
'**********************************************************************************************************
'=========== Макрос Отображения на ЛСД задаваеммых параметров (температура,обороты,программа ,...) =========
Лсд_уставки_lcd: 'Макрос Отображения на ЛСД задаваеммых параметров (температура,обороты,программа ,...)
If Плюс_обороты = 0 Or Минус_обороты = 0 Then
Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
If Pod_10 = 0 Then
Pod_10 = 1
Setfont Font_12x16
Cls ' Очищаем LCD один раз
End If
End If
If Плюс_обороты = 1 And Минус_обороты = 1 And Pod_10 = 1 Then
Pod_11 = 1 'Pod_14 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
End If
'********************************************
If Плюс_вода_темп = 0 Or Минус_вода_темп = 0 Then
Pod_10 = 0 : Pod_11 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
If Pod_12 = 0 Then
Pod_12 = 1
Setfont Font_12x16
Cls ' Очищаем LCD один раз
End If
End If
If Плюс_вода_темп = 1 And Минус_вода_темп = 1 And Pod_12 = 1 Then
Pod_13 = 1 'Pod_13 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
End If
'********************************************
If Время_стирки_плюс = 0 Or Время_стирки_минус = 0 Then
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
If Pod_20 = 0 Then
Pod_20 = 1
Setfont Font_12x16
Cls ' Очищаем LCD один раз
End If
End If
If Время_стирки_плюс = 1 And Время_стирки_минус = 1 And Pod_20 = 1 Then
Pod_16 = 1 'Pod_16 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
End If
'********************************************
If Количество_полосканий_плюс = 0 Or Количество_полосканий_минус = 0 Then
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_24 = 0 : Pod_25 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
If Pod_21 = 0 Then
Pod_21 = 1
Setfont Font_12x16
Cls ' Очищаем LCD один раз
End If
End If
If Количество_полосканий_плюс = 1 And Количество_полосканий_минус = 1 And Pod_21 = 1 Then
Pod_17 = 1 'Pod_17 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
End If
'********************************************
If Время_замачевания_плюс = 0 Or Время_замачевания_минус = 0 Then
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_28 = 0 : Pod_29 = 0 'зброс противоположных запретов
If Pod_25 = 0 Then
Pod_25 = 1
Setfont Font_12x16
Cls ' Очищаем LCD один раз
End If
End If
If Время_замачевания_плюс = 1 And Время_замачевания_минус = 1 And Pod_25 = 1 Then
Pod_24 = 1 'Pod_24 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
End If
'********************************************
If Отстрочка_плюс = 0 Or Отстрочка_минус = 0 Then
Pod_10 = 0 : Pod_11 = 0 : Pod_12 = 0 : Pod_13 = 0 : Pod_20 = 0 : Pod_16 = 0 : Pod_21 = 0 : Pod_17 = 0 : Pod_24 = 0 : Pod_25 = 0 'зброс противоположных запретов
If Pod_29 = 0 Then
Pod_29 = 1
Setfont Font_12x16
Cls ' Очищаем LCD один раз
End If
End If
If Отстрочка_плюс = 1 And Отстрочка_минус = 1 And Pod_29 = 1 Then
Pod_28 = 1 'Pod_28 = 1-запрещаем менять уставку при первом нажатии кнопки выбора
End If
'***выводим на ЛСД уставку оборотов / мин**
If Плюс_обороты = 0 Or Минус_обороты = 0 Then
'Setfont Font_12x16
Lcdat 1 , 1 , "ОБОРОТЫ" , 0
Lcdat 3 , 1 , "ОТЖИМА" , 0
Z_str = Str(заданные_обороты_отжима_taxo) 'выводим на ЛСД уставку оборотов / мин :
Z_str = Format(z_str , "0000")
Lcdat 5 , 20 , Z_str , 0
Lcdat 7 , 1 , "ОБ/МИН" , 0
End If
'***выводим на ЛСД уставку температура воды**
If Плюс_вода_темп = 0 Or Минус_вода_темп = 0 Then
'Setfont Font_12x16
Lcdat 1 , 1 , "ТЕМПЕРА-" , 0
Lcdat 3 , 1 , "ТУР.ВОДЫ" , 0
Z_str = Str(заданная_температура_воды_lcd) 'выводим на ЛСД уставку температура воды :
Z_str = Format(z_str , "00")
Lcdat 5 , 20 , Z_str , 0
Lcdat 7 , 1 , "ГРАДУСОВ" , 0
End If
'***выводим на ЛСД уставку заданное время стирки**
If Время_стирки_плюс = 0 Or Время_стирки_минус = 0 Then
'Setfont Font_12x16
Lcdat 1 , 25 , "ВРЕМЯ" , 0
Lcdat 3 , 13 , "СТИРКИ" , 0
Минуты_стирки = Заданное_время_отирки_lcd Mod 60 ' ЧАСЫ
Часы_стирки = Заданное_время_отирки_lcd / 60 ' МИНУТЫ
Z_str = Str(часы_стирки) 'выводим на ЛСД уставку заданное время стирки (ЧАСЫ) :
Z_str = Format(z_str , "00")
Lcdat 7 , 20 , Z_str , 0
Lcdat 7 , 45 , ":" , 0 'выводим на ЛСД уставку заданное время стирки (МИНУТЫ) :
Z_str = Str(минуты_стирки)
Z_str = Format(z_str , "00")
Lcdat 7 , 55 , Z_str , 0
End If
'***выводим на ЛСД уставку заданное количество полосканий**
If Количество_полосканий_плюс = 0 Or Количество_полосканий_минус = 0 Then
'Setfont Font_12x16
Lcdat 1 , 1 , "КОЛИЧЕС-" , 0
Lcdat 3 , 1 , "ТВО ПО-" , 0
Lcdat 5 , 1 , "ЛОСКАНИЙ" , 0
Z_str = Str(зад_количество_полосканий_lcd) 'выводим на ЛСД уставку заданное количество полосканий :
Z_str = Format(z_str , "00")
Lcdat 7 , 20 , Z_str , 0
End If
'***выводим на ЛСД уставку заданное время замачевания**
If Время_замачевания_плюс = 0 Or Время_замачевания_минус = 0 Then
'Setfont Font_12x16
Lcdat 1 , 1 , "ЗАМО-НИЕ" , 0
'**********
Минуты_замоч_конец = Заданное_время_замачевания_lcd Mod 60 ' ЧАСЫ
Часы_замоч_конец = Заданное_время_замачевания_lcd / 60 ' МИНУТЫ
Z_str = Str(часы_замоч_конец) 'выводим на ЛСД уставку заданное время замачевания (часы) :
Z_str = Format(z_str , "00")
Lcdat 5 , 1 , Z_str , 0
Lcdat 5 , 25 , ": КОН" , 0
Z_str = Str(минуты_замоч_конец) 'выводим на ЛСД уставку заданное время замачевания (минуты):
Z_str = Format(z_str , "00")
Lcdat 5 , 31 , Z_str , 0
End If
'***выводим на ЛСД уставку заданное время отстрочки стирки **
If Отстрочка_плюс = 0 Or Отстрочка_минус = 0 Then
'Setfont Font_12x16
Lcdat 1 , 1 , "ОТСТ-ЧКА" , 0
'**********
Минуты_отстр_конец = Заданное_время_отстрочки_lcd Mod 60 ' ЧАСЫ
Часы_отстр_конец = Заданное_время_отстрочки_lcd / 60 ' МИНУТЫ
Z_str = Str(часы_отстр_конец) 'выводим на ЛСД уставку заданное время отстрочки стирки (часы) :
Z_str = Format(z_str , "00")
Lcdat 5 , 1 , Z_str , 0
Lcdat 5 , 25 , ": КОН" , 0
Z_str = Str(минуты_отстр_конец) 'выводим на ЛСД уставку заданное время отстрочки стирки (минуты) :
Z_str = Format(z_str , "00")
Lcdat 5 , 31 , Z_str , 0
End If
Return
'************************************************************
'***выводим на ЛСД наименования программы стирки **
Наименование_программы_lcd: 'Макрос отображения наименования программы стирки на ЛСД
If Номер_программы_новое <> Номер_программы Then
Номер_программы_новое = Номер_программы
Cls ' Очищаем LCD один раз
End If
Setfont Font_12x16
If Номер_программы = 1 Then
Lcdat 1 , 1 , "*ХЛОПОК*" , 0
End If
If Номер_программы = 2 Then
Lcdat 1 , 1 , "БЕРЕЖНАЯ" , 0
Lcdat 3 , 1 , "СТИРКА" , 0
End If
If Номер_программы = 3 Then
Lcdat 1 , 1 , "ТОНКИЕ" , 0
Lcdat 3 , 1 , "ТКАНИ" , 0
End If
If Номер_программы = 4 Then
Lcdat 1 , 1 , "СИНТЕ-" , 0
Lcdat 3 , 1 , "ТИКА" , 0
End If
If Номер_программы = 5 Then
Lcdat 1 , 1 , "ШЕРСТЬ" , 0
End If
If Номер_программы = 6 Then
Lcdat 1 , 1 , "ШЕЛК" , 0
End If
If Номер_программы = 7 Then
Lcdat 1 , 1 , "СМЕШАНЫЕ" , 0
Lcdat 3 , 1 , "ТКАНИ" , 0
End If
If Номер_программы = 8 Then
Lcdat 1 , 1 , "БЫСТРАЯ" , 0
Lcdat 3 , 1 , "СТИРКА" , 0
End If
If Номер_программы = 9 Then
Lcdat 1 , 1 , "ТОЛЬКО" , 0
Lcdat 3 , 1 , "СТИРКА" , 0
End If
If Номер_программы = 10 Then
Lcdat 1 , 1 , "ТОЛЬКО" , 0
Lcdat 3 , 1 , "ОТЖИМ" , 0
End If
If Номер_программы = 11 Then
Lcdat 1 , 1 , "ТОЛЬКО" , 0
Lcdat 3 , 1 , "СЛИВ" , 0
End If
If Номер_программы = 12 Then
Lcdat 1 , 1 , "ТОЛЬКО" , 0
Lcdat 3 , 1 , "ЗАМО-НИЕ" , 0
End If
If Номер_программы = 13 Then
Lcdat 1 , 1 , "СВОЯ ПРО" , 0
End If
Setfont Font_6x8
'Lcdat 5 , 1 , "t=•»°*" , 0
'Lcdat 5 , 1 , "t= » C°" , 0
Lcdat 5 , 1 , "t=" , 0
Z_str = Str(заданная_температура_воды_lcd) 'выводим на ЛСД уставку температура воды :
Z_str = Format(z_str , "00")
Lcdat 8 , 13 , Z_str , 0
Lcdat 8 , 25 , "»" , 0
Lcdat 5 , 1 , "t=" , 0
Z_str = Str(заданная_температура_воды_lcd) 'выводим на ЛСД уставку время /отстрочки / :
Z_str = Format(z_str , "00")
Lcdat 8 , 13 , Z_str , 0
Lcdat 8 , 25 , "»" , 0
Z_str = Str(заданные_обороты_отжима_taxo) 'выводим на ЛСД уставку оборотов / мин :
Z_str = Format(z_str , "0000")
Lcdat 6 , 1 , Z_str , 0
Lcdat 6 , 25 , "»" , 0
Lcdat 7 , 1 , "1234567891234567" , 0
Return
'===============================================================================
Обработка_прерывания_int0:
'-------------------------------------------------------------------------------
Count_1 = Count_1 + 1
' Счетчик входных импульсов
'-------------------------------------------------------------------------------
Return
'===============================================================================
'===============================================================================
'-------------------- Используемые шрифты ------------------------------------
'===============================================================================
'-------------------- Используемые шрифты ----------------------------------------
'=================================================
$include "Font_6x8.font"
$include "Font_12x16.font"
'$include "Font24x32.font"
'=================================================
'-------------------------------------------------------------------------------
'$include "Nokia-1100 Library.inc" 'сама библиотека
'===============================================================================