Держи.Bear2011 писал(а):Может кто подскажет примеры?
BASCOM AVR в вопросах и ответах
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
- Реклама
Re: BASCOM AVR в вопросах и ответах
max50
Спасибо
Спасибо
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Не вопрос.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
Парни, ломаю голову видимо над простой задачей. Пишу прогу под бортовой комп с функцие спидометра, расходомера и прочее.
Так вот, хочу чтобы борткомп выводил показания средней скрости за всю поездку. Как это организовать? Получил я реальную скорость, что потом с ней делать? Понимаю что устреднять? но как? Вводить переменную которая увеличивается при каждом измерении и сумировать скорость, потом делить на значние этой переменной и заносить в память через определенне промежутки времени? Может кто примерчик подскажет, я новичек просто.
Так вот, хочу чтобы борткомп выводил показания средней скрости за всю поездку. Как это организовать? Получил я реальную скорость, что потом с ней делать? Понимаю что устреднять? но как? Вводить переменную которая увеличивается при каждом измерении и сумировать скорость, потом делить на значние этой переменной и заносить в память через определенне промежутки времени? Может кто примерчик подскажет, я новичек просто.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
а какой датчик на спидометре?как считается скорость?
- Реклама
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
скорость считыватеся датчиком холла на корбке-прямоугольные импульсы. 6имп-1метр пути. Но это не суть, будем считать что скорость я получил. Также будем считать, что поездка заканчивается по выключению зажигания, т.е. средняя скорость должна сохранятся либо в этот момент, либо периодически записываться в еепром. По выключению, устнавливаю прерывание по компоратору, оно и записывает в момент пропадания питания. Но все же со средней скростью пока не понятно.
Re: BASCOM AVR в вопросах и ответах
Так средняя скорость - это расстояние/время (физика 5-6 класс)
Делай счетчик пройденного расстояния и часы. И наверное еще дополнительную кнопку обнуления. Ну и само собой кнопку вычисления этой скорости, хотя возможно получиться сделать - завел двигатель, счетчик обнулился и пошел отсчет времени и пройденного расстояния. Заглушил двигатель - просчитал среднюю скорость
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
вот только как отсчитывать время? оба таймера заняты, один считает скорость, другйо моментальный расход топлива.
Есть еще варианты отсчета времени. Может задать переменную, и увеличивать ее на 1 какждый такт? Только как как ее привязать к реальному времени?
Есть еще варианты отсчета времени. Может задать переменную, и увеличивать ее на 1 какждый такт? Только как как ее привязать к реальному времени?
Re: BASCOM AVR в вопросах и ответах
Может в таком случае имеет смысл "прикошачить" м/с часов? Запустил двигатель - считал показания часов и записал в регистр или переменную. Заглушил - снова считал вычислил разницу
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
Да закупил пару модулей часов реального времени, надо будет с ними еще научится работать. Может что и получится
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Думается мне, вариант с RTC самый оптимальный. В любом случае бортовик должен иметь часы, с этими данными можно делать всякие полезные штуки. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Ну ещё как вариант-
Вы какую-то переменную "скорость" на индикатор выводите-ж. Вот её и складывайте , а потом делите.
Каждый раз как выводите на индикатор, складывайте, увеличивайте счётчик, Досчитали до 255, поделили всё результат в другую переменную. Ту в свою очередь тоже складываем и считаем. Трёх переменных за глаза.
А сохранять автоматом,- если скорость три (к примеру) вывода на экран была "0". На ходу -же зажигание не выключаете!
Вы какую-то переменную "скорость" на индикатор выводите-ж. Вот её и складывайте , а потом делите.
Каждый раз как выводите на индикатор, складывайте, увеличивайте счётчик, Досчитали до 255, поделили всё результат в другую переменную. Ту в свою очередь тоже складываем и считаем. Трёх переменных за глаза.
А сохранять автоматом,- если скорость три (к примеру) вывода на экран была "0". На ходу -же зажигание не выключаете!
Все делают ошибки, только мудрецы - новые, а дураки - старые.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
я так понимаю расчет скорости идет от таймера,то есть через определенные промежутки времени,пусть будет например 4 сек-сколько она у вас?
добавляем две переменные-допустим S и N,каждый раз когда протикал таймер и идет расчет скорости-добавляем полученную скорость к переменной S,N увеличиваем на единицу,в итоге в переменной S будет сумма замеренных скоростей,а N-количество прибавленных скоростей к переменной S,в любой момент можно отбразить среднюю скорость равная среднеарифметической,то есть S/N
и доб таймер не нужен
добавляем две переменные-допустим S и N,каждый раз когда протикал таймер и идет расчет скорости-добавляем полученную скорость к переменной S,N увеличиваем на единицу,в итоге в переменной S будет сумма замеренных скоростей,а N-количество прибавленных скоростей к переменной S,в любой момент можно отбразить среднюю скорость равная среднеарифметической,то есть S/N
и доб таймер не нужен
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
есть ли у кого пример работы с MRF49?в гугле ничего на русском нет!
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
Спасибо! по средней скорости разобрался.
Теперь засада с часами реального времени. Посомотрите пожалуйста мою программу, очень надо. Программу доработал чтобы часы неправильные цифры не выводили и происходит в протеусе какой-то глюк, на экране какие-то цифры несвязные вылазят рядом с отображением времени, часы обнуляются. Посомтрите может опытным глазом что заметите Только дайте им пару минут посчитать, а то сразу вроде все в норме.. Спасибо. Проект прилагаю.
Теперь засада с часами реального времени. Посомотрите пожалуйста мою программу, очень надо. Программу доработал чтобы часы неправильные цифры не выводили и происходит в протеусе какой-то глюк, на экране какие-то цифры несвязные вылазят рядом с отображением времени, часы обнуляются. Посомтрите может опытным глазом что заметите Только дайте им пару минут посчитать, а то сразу вроде все в норме.. Спасибо. Проект прилагаю.
- Вложения
-
- расходомер.rar
- (52.54 КБ) 181 скачивание
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
http://www.mcselec.com/index2.php?optio ... ght=rfm12bpavel1979 писал(а):есть ли у кого пример работы с MRF49?
http://avrproject.ru/forum/5-279-1
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
max50 спасибо,мне помогло,написал простую программу-вроде импульсы идут как надо,все в архиве,буду тестить в железе
- Вложения
-
- вроде раб.rar
- (53.66 КБ) 165 скачиваний
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Не за что.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
вот еще нашел http://www.roggenbuck.de/DS1820.html более детально и легче понять
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
На мой взгляд не очень правильно организованна работа с DS1307. Посмотрите мой исходник, может что-нибудь пригодится:Dnepr_1186 писал(а):Теперь засада с часами реального времени.
Спойлер
Код: Выделить всё
$regfile = "m32def.dat" 'подключаем файл заголовков для контроллера ATmega32
$crystal = 8000000 'определяем частоту кварца/внутреннего генератора
$baud = 9600 'настройка скорости UART
$hwstack = 64 'аппаратный стек
$swstack = 64 'програмный стек
$framesize = 200 'размер фрейма
Config Lcd = 16 * 2 'дисплей 2 строки по 16 символов
'указываем конфигурацию подключения дисплея к портам МК
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 1
Cursor Off 'выключить курсор
Cls 'очистить дисплей
Config Rc5 = Pinb.0 'на пин b0 подключен TSOP1736
Config Sda = Portb.1 'на пин b1 подключена линия Sda
Config Scl = Portb.2 'на пин b2 подключена линия Scl
Config Pinb.3 = Output 'настройка пина b3 на выход
Mute Alias Portb.3 'присваиваем пину b3 имя Mute
Config Pinb.4 = Output 'настройка пина b4 на выход
Power_amp Alias Portb.4 'присваиваем пину b4 имя Power_amp
Config Pinb.5 = Output 'настройка пина b5 на выход
Fan Alias Portb.5 'присваиваем пину b5 имя Fan
Config Pinb.6 = Output 'настройка пина b6 на выход
Red_led Alias Portb.6 'присваиваем пину b6 имя Red_led
Config Pinb.7 = Output 'настройка пина b7 на выход
Green_led Alias Portb.7 'присваиваем пину b7 имя Green_led
Config Pinc.6 = Output 'настройка пина c6 на выход
Yellow_led Alias Portc.6 'присваиваем пину c6 имя Yellow_led
Config 1wire = Portc.7 'на пин c7 подключен DS18B20
Config Pind.0 = Input 'настройка пина d0 на вход
Choice_mode Alias Pind.0 'присваиваем пину d0 имя Choice_mode
Set Portd.0 'включить внутренний подтягивающий резистор
Config Pind.1 = Input 'настройка пина d1 на вход
Power_on_off Alias Pind.1 'присваиваем пину d1 имя Power_on_off
Set Portd.1 'включить внутренний подтягивающий резистор
Config Pind.2 = Input 'настройка пина d2 на вход
Sw Alias Pind.2 'присваиваем пину d2 имя Sw
Set Portd.2 'включить внутренний подтягивающий резистор
Config Pind.3 = Input 'настройка пина d3 на вход(вывод A энкодера)
Valcod_a Alias Pind.3 'присваиваем пину d3 имя Valcod_a
Set Portd.3 'включить внутренний подтягивающий резистор
Config Pind.4 = Input 'настройка пина d4 на вход(вывод B энкодера)
Valcod_b Alias Pind.4 'присваиваем пину d4 имя Valcod_b
Set Portd.4 'включить внутренний подтягивающий резистор '
Config Pind.6 = Input 'настройка пина d6 на вход
Mute_on_off Alias Pind.6 'присваиваем пину d6 имя Mute_on_off
Set Portd.6 'включить внутренний подтягивающий резистор
Config Pind.7 = Input 'настройка пина d7 на вход
Inputss Alias Pind.7 'присваиваем пину d7 имя Inputss
Set Portd.7 'включить внутренний подтягивающий резистор
Config Int1 = Falling 'настраиваем внешнее прерывание INT1 на срабатывание при изменении из "1" в "0"
On Int1 Valcoder 'подпрограмма обработки прерывания Valcoder
Enable Int1 'разрешаем работу прерывания INT1
Enable Interrupts 'разрешаем глобальные прерывания
Config Clock = User 'работа с DS1307
Const Ds1307w = &HD0 'константа адреса записи DS1307
Const Ds1307r = &HD1 'константа адреса чтения DS1307
Config Date = Dmy , Separator = . 'настраиваем способ отображения даты ДДММГГ, разделитель точка
Declare Sub Timbre_disp 'подпрограмма вывода значений тембра НЧ и ВЧ на дисплей
Declare Sub Balance 'подпрограмма расчета баланса
Declare Sub Vol_disp 'подпрограмма перевода цифровых значений громкости в dB
Declare Sub Convertt 'подпрограмма преобразования температуры датчика на шине 1wire
'Declare Sub Standby 'подпрограмма режима ожидания усилителя
Declare Sub Power_on 'подпрограмма основного режима работы усилителя
Declare Sub Setdatetime 'подпрограмма установки даты и времени
Declare Sub Month_disp 'подпрограмма перевода цифровых значений месяца в названия месяца
Dim Lsb As Byte 'переменная младшего байта DS18B20
Dim Msb As Byte 'переменная старшего байта DS18B20
Dim Temp As Byte 'переменная температуры
Dim Temp1 As Byte 'временная переменная для вычесления температуры
Dim Address As Byte 'переменная адреса Rc5
Dim Command As Byte 'переменная команды Rc5
Dim Vol As Byte 'переменная громкости
Dim Voll As Byte 'переменная громкости левого канала
Dim Volr As Byte 'переменная громкости правого канала
Dim Vol_disp As String * 5 'переменная громкости, выводимая на дисплей
Dim Bal As Byte 'переменная баланса
Dim Treble As Byte 'переменная тембра ВЧ
'Dim Treble_disp As String * 5 'переменная тембра ВЧ, выводимая на дисплей
Dim Bass As Byte 'переменная тембра НЧ
'Dim Bass_disp As String * 5 'переменная тембра НЧ, выводимая на дисплей
Dim Inputs As Byte 'переменная номера входа TDA8425
Dim Subaddr As Byte 'переменная субадреса TDA8425
Dim Datas As Byte 'переменная данных TDA8425
Dim Swfunc As Byte 'переменная переключения функций TDA8425
Dim Chr_code As Byte 'переменная некоторых символов, хранящихся в памяти ЖКИ
Dim Menu As Byte 'переменная меню для энкодера
Dim Timbre As Byte 'переменная тембра
Dim Timbre_disp As String * 5 'переменная тембра, выводимая на дисплей
Dim Choice_timbre As Bit 'переменная выбора тембра ВЧ или НЧ
Dim Z As Byte 'переменная знакоместа
Dim Mode_disp As String * 7 'переменная выбора звучания TDA8425, выводимая на дисплей
Dim Daysmonth As Byte 'переменная дней в месяце
Dim Month_disp As String * 8 'переменная месяца, выводимая на дисплей
Dim Weekday_disp As String * 7 'переменная дня недели, выводимая на дисплей
Dim Weekday_read As Byte 'переменная номера дня недели, считываемая из DS1307
Dim Weekday As Byte 'переменная номера дня недели
Dim Press_rc5 As Bit
Deflcdchar 0 , 31 , 31 , 31 , 17 , 31 , 31 , 31 , 31 'инверсный минус
Deflcdchar 1 , 31 , 32 , 32 , 32 , 32 , 32 , 32 , 31 'пустое деление шкалы
Deflcdchar 2 , 31 , 19 , 21 , 21 , 19 , 21 , 21 , 31 'инверсная буква R
Deflcdchar 3 , 31 , 23 , 23 , 23 , 23 , 23 , 17 , 31 'инверсная буква L
Deflcdchar 4 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 'знак градусов
Deflcdchar 5 , 32 , 2 , 6 , 26 , 18 , 26 , 6 , 2 'динамик
Deflcdchar 6 , 31 , 32 , 31 , 31 , 31 , 31 , 32 , 31 'полное деление шкалы
Deflcdchar 7 , 31 , 31 , 27 , 17 , 27 , 31 , 31 , 31 'инверсный плюс
Readeeprom Swfunc , 1
If Swfunc = 255 Then
Swfunc = 206
Writeeeprom Swfunc , 1
End If
Subaddr = 8
Datas = Swfunc
Gosub I2c
Readeeprom Vol , 2
If Vol = 255 Then
Vol = 222
Writeeeprom Vol , 2
End If
Subaddr = 0
Datas = Vol
Gosub I2c
Subaddr = 1
Datas = Vol
Gosub I2c
Readeeprom Bal , 3
If Bal = 255 Then
Bal = 4
Writeeeprom Bal , 3
Call Balance
End If
Readeeprom Bass , 4
If Bass = 255 Then
Bass = 246
Writeeeprom Bass , 5
End If
Subaddr = 2
Datas = 0
Gosub I2c
Readeeprom Treble , 5
If Treble = 255 Then
Treble = 246
Writeeeprom Treble , 4
End If
Subaddr = 3
Datas = Treble
Gosub I2c
Pwm1a = 40
Set Red_led 'включаем красный светодиод питания
Reset Green_led 'выключаем зеленый светодиод питания
Standby: 'подпрограмма режима ожидания усилителя
'*******************************************************************************
Cls 'очищаем экран ЖКИ
Set Red_led 'включаем красный светодиод питания
Reset Green_led 'выключаем зеленый светодиод питания
Do 'начало основного цикла
Call Month_disp 'вызываем подпрограмму перевода цифровых значений месяца в названия месяца
Locate 1 , 1 'задаем позицию курсора
Lcd Time$ 'выводим на ЖКИ время, вызывая подпрограмму чтения времени из DS1307
Locate 2 , 1 'задаем позицию курсора
Lcd _day ; " " ; Month_disp 'выводим на ЖКИ значение переменной _day, пробел, значение переменной Month_disp
If _year < 10 Then 'если значение переменной _year < 10 то,
Lcd " 200" ; _year ; " " 'выводим на ЖКИ, пробел, 200, значение переменной _year, 4 пробела
Else 'иначе
Lcd " 20" ; _year ; " " 'выводим на ЖКИ, пробел, 20, значение переменной _year, 4 пробела
End If 'конец если
Weekday_read = Dayofweek() 'считываем номер дня недели из DS1307
Weekday_disp = Lookupstr(weekday_read , Weekdays) 'преобразовываем номер дня недели в название дня недели
Locate 1 , 10 'задаем позицию курсора
Lcd Weekday_disp 'выводим на ЖКИ значение переменной Weekday_disp
Gosub Rc5 'переход на подпрограмму опроса Rc5
If Power_on_off = 0 Or Command = 12 Then 'если Power_on_off = 0 или Command = 12, то
Waitms 100 'подождать 100 мс
Set Power_amp 'включить питание усилителя
Call Power_on 'идти на подпрограмму основного режима работы усилителя
End If 'конец если
If Command = 15 Then Pwm1a = 210 Else Pwm1a = 40
If Sw = 0 Then 'если Sw = 0, то
Waitms 100 'подождать 100 мс
Call Setdatetime 'идти на подпрограмму установки даты и времени
End If 'конец если
If Swfunc.5 = 1 Then 'если бит 5 Swfunc = 1, то
Reset Mute 'выключить режим Mute
Swfunc.5 = Not Swfunc.5 'значение бита 5 Swfunc изменить на противоположное
Subaddr = 8
Datas = Swfunc
Gosub I2c 'идти на подпрограмму записи значений в TDA8425
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
End If 'конец если
Loop 'конец основного цикла
End 'конец программы
Sub Setdatetime 'подпрограмма установки даты и времени
'*******************************************************************************
Menu = 0
Pwm1a = 200
Set Red_led 'включаем красный светодиод питания
Reset Green_led 'выключаем зеленый светодиод питания
Cls 'очищаем экран ЖКИ
Do 'начало основного цикла
Call Month_disp 'вызываем подпрограмму перевода цифровых значений месяца в названия месяца
Locate 1 , 1 'задаем позицию курсора
If _hour < 10 Then 'если значение переменной _hour < 10 то,
Lcd "0" ; _hour ; ":" 'выводим на ЖКИ 0, значение переменной _hour, двоеточие
Else 'иначе
Lcd _hour ; ":" 'выводим на ЖКИ значение переменной _hour, двоеточие
End If 'конец если
If _min < 10 Then 'если значение переменной _min < 10 то,
Lcd "0" ; _min ; ":" 'выводим на ЖКИ 0, значение переменной _min, двоеточие
Else 'иначе
Lcd _min ; ":" 'выводим на ЖКИ значение переменной _min, двоеточие
End If 'конец если
Lcd "00" 'выводим на ЖКИ 00
Locate 2 , 1 'задаем позицию курсора
Lcd _day ; " " ; Month_disp 'выводим на ЖКИ значение переменной _day, пробел, значение переменной Month_disp
If _year < 10 Then 'если значение переменной _year < 10 то,
Lcd " 200" ; _year ; " " 'выводим на ЖКИ пробел, 200, значение переменной _year, 4 пробела
Else 'иначе
Lcd " 20" ; _year ; " " 'выводим на ЖКИ пробел, 20, значение переменной _year, 4 пробела
End If 'конец если
Weekday_read = Dayofweek() 'считываем номер дня недели из DS1307
Weekday_disp = Lookupstr(weekday_read , Weekdays) 'преобразовываем номер дня недели в название дня недели
Locate 1 , 10 'задаем позицию курсора
Lcd Weekday_disp 'выводим на ЖКИ значение переменной Weekday_disp
If Sw = 0 Then 'если Sw = 0, то
Waitms 100 'подождать 100 мс
Incr Menu 'увеличить значение переменной Menu на 1
End If 'конец если
If Menu = 6 Then 'если значение переменной Menu = 6, то
Gosub Standby 'идти на подпрограмму режима ожидания усилителя
End If 'конец если
Loop 'конец основного цикла
End Sub 'конец подпрограммы
Sub Power_on 'подпрограмма основного режима работы усилителя
'*******************************************************************************
Menu = 7
Pwm1a = 200
Reset Red_led 'выключаем красный светодиод питания
Set Green_led 'включаем зеленый светодиод питания
Cls 'очищаем экран ЖКИ
Do 'начало основного цикла
Call Convertt 'переход на подпрограмму преобразования температуры
Call Vol_disp 'переход на подпрограмму перевода цифровых значений громкости в dB
Call Balance 'переход на подпрограмму расчета баланса
If Temp => 38 Then 'если значение переменной Temp => 38, то
Set Fan 'включить вентилятор охлаждения
Elseif Temp = 31 Then 'иначе если значение переменной Temp = 31, то
Reset Fan 'выключить вентилятор охлаждения
End If 'конец если
Locate 2 , 11 'задаем позицию курсора
Lcd "T=" ; Temp ; Chr(4) ; "C " 'выводим на ЖКИ T=, значение переменной Temp, знак градусов, C, пробел
Locate 1 , 1 'задаем позицию курсора
Lcd "Bx." 'выводим на ЖКИ Вх.
Locate 2 , 1 'задаем позицию курсора
Lcd "Ўp." 'выводим на ЖКИ Гр.
Locate 2 , 5 'задаем позицию курсора
Lcd Vol_disp 'выводим на ЖКИ значение переменной Vol_disp
Select Case Swfunc 'выбираем из значений переменной Swfunc
Case 206 : Inputs = 1 'если значение переменной Swfunc = 206, то Inputs = 1(вход 1)
Mode_disp = "Cїepeo " 'Mode_disp = Стерео(режим стерео), звук включен
Case 207 : Inputs = 2 'если значение переменной Swfunc = 207, то Inputs = 2(вход 2)
Mode_disp = "Cїepeo " 'Mode_disp = Стерео(режим стерео), звук включен
Case 222 : Inputs = 1 'если значение переменной Swfunc = 222, то Inputs = 1(вход 1)
Mode_disp = "окружение" 'Mode_disp = Пр. ст.(режим пространственное стерео), звук включен
Case 223 : Inputs = 2 'если значение переменной Swfunc = 223, то Inputs = 2(вход 2)
Mode_disp = "окружение" 'Mode_disp = Пр. ст.(режим пространственное стерео), звук включен
Case 238 : Inputs = 1 'если значение переменной Swfunc = 238, то Inputs = 1(вход 1)
Mode_disp = "Cїepeo " 'Mode_disp = Стерео(режим стерео), звук выключен
Case 239 : Inputs = 2 'если значение переменной Swfunc = 239, то Inputs = 2(вход 2)
Mode_disp = "Cїepeo " 'Mode_disp = Стерео(режим стерео), звук выключен
Case 254 : Inputs = 1 'если значение переменной Swfunc = 254, то Inputs = 1(вход 1)
Mode_disp = "окружение" 'Mode_disp = Пр. ст.(режим пространственное стерео), звук выключен
Case 255 : Inputs = 2 'если значение переменной Swfunc = 255, то Inputs = 2(вход 2)
Mode_disp = "окружение" 'Mode_disp = Пр. ст.(режим пространственное стерео), звук выключен
End Select 'закончить выбор
Locate 1 , 5 'задаем позицию курсора
Lcd Inputs 'выводим на ЖКИ значение переменной Inputs
Locate 1 , 7 'задаем позицию курсора
Lcd Mode_disp 'выводим на ЖКИ значение переменной Mode_disp
If Inputss = 0 Then 'если Inputss = 0 , то
Waitms 100 'подождать 100 мс
Swfunc.0 = Not Swfunc.0 'значение бита 0 Swfunc изменить на противоположное
Subaddr = 8
Datas = Swfunc
Gosub I2c 'идти на подпрограмму записи значений в TDA8425
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
End If 'конец если
If Swfunc.5 = 1 Then 'если бит 5 Swfunc = 1, то
Waitms 100 'подождать 100 мс
Locate 1 , 15 'задаем позицию курсора
Lcd Chr(5) ; "x" 'выводим на ЖКИ символ динамика, x
Set Mute 'включить режим Mute
Else 'иначе
Locate 1 , 15 'задаем позицию курсора
Lcd " " 'выводим на ЖКИ 2 пробела
Reset Mute 'выключить режим Mute
End If 'конец если
If Choice_mode = 0 Then 'если Inputss = 0 , то
Waitms 100 'подождать 100 мс
Swfunc.4 = Not Swfunc.4 'значение бита 4 Swfunc изменить на противоположное
Subaddr = 8
Datas = Swfunc
Gosub I2c 'идти на подпрограмму записи значений в TDA8425
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
End If 'конец если
Gosub Rc5 'переход на подпрограмму опроса Rc5
If Mute_on_off = 0 Or Command = 13 Then 'если Mute_on_off = 0 или Command = 13, то
Waitms 100 'подождать 100 мс
Swfunc.5 = Not Swfunc.5 'значение бита 5 Swfunc изменить на противоположное
Subaddr = 8
Datas = Swfunc
Gosub I2c 'идти на подпрограмму записи значений в TDA8425
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
End If 'конец если
If Sw = 0 Or Command = 59 Then 'если Sw = 0 или Command = 59, то
Waitms 100 'подождать 100 мс
Gosub Volume 'идти на подпрограмму
End If 'конец если
If Power_on_off = 0 Or Command = 12 Then 'если Power_on_off = 0 или Command = 12, то
Waitms 100 'подождать 100 мс
Reset Fan 'выключить вентилятор охлаждения
Reset Power_amp 'включить питание усилителя
Gosub Standby 'идти на подпрограмму режима ожидания усилителя
Cls 'очищаем экран ЖКИ
End If 'конец если
If Command = 32 Then 'если Command = 32
If Vol < 255 Then Incr Vol 'и если значение переменной Vol < 255, то увеличить значение переменной Vol на 1
End If 'конец если
If Command = 33 Then 'если Command = 33
If Vol > 220 Then Decr Vol 'и если значение переменной Vol > 220, то уменьшить значение переменной Vol на 1
End If 'конец если
Loop 'конец основного цикла
End Sub 'конец подпрограммы
Volume:
'*******************************************************************************
Menu = 8
Cls 'очищаем экран ЖКИ
Do 'начало основного цикла
Locate 1 , 1 'задаем позицию курсора
Lcd "ЎpoјєocїД" 'выводим на ЖКИ надпись Громкость
Locate 1 , 12 'задаем позицию курсора
Lcd Vol_disp 'выводим на ЖКИ значение переменной Vol_disp
Locate 2 , 2 'задаем позицию курсора
Lcd Chr(0) 'выводим на ЖКИ инверсный минус
Locate 2 , 15 'задаем позицию курсора
Lcd Chr(7) 'выводим на ЖКИ инверсный плюс
Gosub Rc5 'перехоод на подпрограмму опроса RC-5
If Command = 32 Then 'если Command = 32
If Vol < 255 Then Incr Vol 'и если значение переменной Vol < 255, то увеличить значение переменной Vol на 1
End If 'конец если
If Command = 33 Then 'если Command = 33
If Vol > 220 Then Decr Vol 'и если значение переменной Vol > 220, то уменьшить значение переменной Vol на 1
End If 'конец если
Call Vol_disp 'переход на подпрограмму перевода цифровых значений громкости в dB
Call Balance 'переход на подпрограмму расчета баланса
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
If Sw = 0 Or Command = 59 Then 'если Sw = 0 или Command = 59, то
Waitms 100 'подождать 100 мс
Gosub Balance_disp 'идти на подпрограмму вывода шкалы баланса
End If 'конец если
Select Case Vol 'выбираем из значений переменной Vol, выводим на ЖКИ шкалу громкости
Case 220 : Locate 2 , 3
Lcd Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 221 To 223 : Locate 2 , 3
Lcd Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 224 To 226 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 227 To 229 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 230 To 232 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 233 To 235 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 236 To 238 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 239 To 241 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 242 To 244 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 245 To 247 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1)
Case 248 To 250 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1)
Case 251 To 253 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1)
Case 254 To 255 : Locate 2 , 3
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6)
End Select 'закончить выбор
Loop 'конец основного цикла
Sub Vol_disp 'подпрограмма перевода цифровых значений громкости в dB
'*******************************************************************************
Select Case Vol 'выбираем из значений переменной Vol, переводим в dB
Case 220 : Vol_disp = "-64dB"
Case 221 : Vol_disp = "-62dB"
Case 222 : Vol_disp = "-60dB"
Case 223 : Vol_disp = "-58dB"
Case 224 : Vol_disp = "-56dB"
Case 225 : Vol_disp = "-54dB"
Case 226 : Vol_disp = "-52dB"
Case 227 : Vol_disp = "-50dB"
Case 228 : Vol_disp = "-48dB"
Case 229 : Vol_disp = "-46dB"
Case 230 : Vol_disp = "-44dB"
Case 231 : Vol_disp = "-42dB"
Case 232 : Vol_disp = "-40dB"
Case 233 : Vol_disp = "-38dB"
Case 234 : Vol_disp = "-36dB"
Case 235 : Vol_disp = "-34dB"
Case 236 : Vol_disp = "-32dB"
Case 237 : Vol_disp = "-30dB"
Case 238 : Vol_disp = "-28dB"
Case 239 : Vol_disp = "-26dB"
Case 240 : Vol_disp = "-24dB"
Case 241 : Vol_disp = "-22dB"
Case 242 : Vol_disp = "-20dB"
Case 243 : Vol_disp = "-18dB"
Case 244 : Vol_disp = "-16dB"
Case 245 : Vol_disp = "-14dB"
Case 246 : Vol_disp = "-12dB"
Case 247 : Vol_disp = "-10dB"
Case 248 : Vol_disp = " -8dB"
Case 249 : Vol_disp = " -6dB"
Case 250 : Vol_disp = " -4dB"
Case 252 : Vol_disp = " 0dB"
Case 253 : Vol_disp = " +2dB"
Case 254 : Vol_disp = " +4dB"
Case 255 : Vol_disp = " +6dB"
End Select 'закончить выбор
End Sub 'конец подпрограммы
Balance_disp: 'подпрограмма вывода шкалы баланса
'*******************************************************************************
Menu = 9
Cls 'очищаем экран ЖКИ
Do 'начало основного цикла
Locate 1 , 1 'задаем позицию курсора
Lcd " a»aЅc" 'выводим на ЖКИ надпись Баланс
Locate 1 , 12
Lcd Bal
Locate 2 , 3 'задаем позицию курсора
Lcd Chr(3) 'выводим на ЖКИ инверсную букву L
Locate 2 , 14 'задаем позицию курсора
Lcd Chr(2) 'выводим на ЖКИ инверсную букву R
Gosub Rc5 'перехоод на подпрограмму опроса RC-5
If Command = 32 Then 'если Command = 32
If Bal < 8 Then Incr Bal 'и если значение переменной Bal < 8 , то увеличить значение переменной Bal на 1
End If 'конец если
If Command = 33 Then 'если Command = 33
If Bal > 0 Then Decr Bal 'и если значение переменной Bal > 0, то уменьшить значение переменной Bal на 1
End If 'конец если
Call Balance 'переход на подпрограмму расчета баланса
Select Case Bal 'выбираем из значений переменной Bal, выводим на ЖКИ шкалу баланса
Case 0 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(200) ; Chr(201) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1)
Case 1 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(200) ; Chr(201) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(6)
Case 2 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(200) ; Chr(201) ; Chr(1) ; Chr(1) ; Chr(6) ; Chr(6)
Case 3 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(200) ; Chr(201) ; Chr(1) ; Chr(6) ; Chr(6) ; Chr(6)
Case 4 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(200) ; Chr(201) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6)
Case 5 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(200) ; Chr(201) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6)
Case 6 : Locate 2 , 4
Lcd Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(200) ; Chr(201) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6)
Case 7 : Locate 2 , 4
Lcd Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(200) ; Chr(201) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6)
Case 8 : Locate 2 , 4
Lcd Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(200) ; Chr(201) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6)
End Select 'закончить выбор
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
If Sw = 0 Or Command = 59 Then 'если Sw = 0 или Command = 59, то
Waitms 100 'подождать 100 мс
Gosub Treble 'идти на подпрограмму
End If 'конец если
Loop 'конец основного цикла
Treble:
'*******************************************************************************
Menu = 10
Cls 'очищаем экран ЖКИ
Do 'начало основного цикла
Call Timbre_disp 'переход на подпрограмму вывода значений тембра НЧ и ВЧ на дисплей
Set Choice_timbre 'выставляем битовую переменную Choice_timbre
Locate 1 , 1 'задаем позицию курсора
Lcd "TeјІp B«" 'выводим на ЖКИ надпись Тембр ВЧ
Gosub Rc5 'перехоод на подпрограмму опроса RC-5
If Command = 32 Then 'если Command = 32
If Treble < 250 Then Incr Treble 'и если значение переменной Treble < 250 , то увеличить значение переменной Treble на 1
End If 'конец если
If Command = 33 Then 'если Command = 33
If Treble > 242 Then Decr Treble 'и если значение переменной Treble > 242, то уменьшить значение переменной Treble на 1
End If 'конец если
Subaddr = 3
Datas = Treble
Gosub I2c 'идти на подпрограмму записи значений в TDA8425
Gosub Writerom 'идти на подпрограмму записи значений в EEPROM
If Sw = 0 Or Command = 59 Then 'если Sw = 0 или Command = 59, то
Waitms 100 'подождать 100 мс
Gosub Bass 'идти на подпрограмму
End If
Loop 'конец основного цикла
Bass:
'*******************************************************************************
Menu = 11
Cls 'очищаем экран ЖКИ
Do 'начало основного цикла
Call Timbre_disp 'переход на подпрограмму вывода значений тембра НЧ и ВЧ на дисплей
Reset Choice_timbre 'сбрасываем битовую переменную Choice_timbre
Locate 1 , 1 'задаем позицию курсора
Lcd "TeјІp H«" 'выводим на ЖКИ надпись Тембр НЧ
Gosub Rc5 'перехоод на подпрограмму опроса RC-5
If Command = 32 Then
If Bass < 251 Then Incr Bass
End If
If Command = 33 Then
If Bass > 242 Then Decr Bass
End If
Subaddr = 2
Datas = Bass
Gosub I2c
Gosub Writerom
If Bass < 251 Then
Locate 2 , 13 'задаем позицию курсора
Lcd Chr(1)
End If
If Bass = 251 Then
Timbre_disp = "+15dB"
Locate 2 , 13 'задаем позицию курсора
Lcd Chr(6)
End If
If Command = 59 Then
Waitms 10
Gosub Power_on
End If
If Sw = 0 Then
Waitms 10
Gosub Power_on
End If
Loop
Sub Timbre_disp
'*******************************************************************************
Locate 1 , 12 'задаем позицию курсора
Lcd Timbre_disp 'выводим на ЖКИ значение переменной Timbre_disp
Locate 2 , 4 'задаем позицию курсора
Lcd Chr(0) 'выводим на ЖКИ инверсный минус
If Choice_timbre = 1 Then
Timbre = Treble
Z = 13
Locate 2 , 14 'задаем позицию курсора
Lcd " "
Else
Timbre = Bass
Z = 14
End If
Locate 2 , Z 'задаем позицию курсора
Lcd Chr(7) 'выводим на ЖКИ инверсный плюс
Select Case Timbre
Case 242 : Timbre_disp = "-12dB"
Locate 2 , 5
Lcd Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) '; Chr(1)
Case 243 : Timbre_disp = " -9dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) '; Chr(1)
Case 244 : Timbre_disp = " -6dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) '; Chr(1)
Case 245 : Timbre_disp = " -3dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) '; Chr(1)
Case 246 : Timbre_disp = " 0dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) '; Chr(1)
Case 247 : Timbre_disp = " +3dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) ; Chr(1) '; Chr(1)
Case 248 : Timbre_disp = " +6dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) ; Chr(1) '; Chr(1)
Case 249 : Timbre_disp = " +9dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(1) '; Chr(1)
Case 250 : Timbre_disp = "+12dB"
Locate 2 , 5
Lcd Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) ; Chr(6) '; Chr(1)
End Select
End Sub
Sub Month_disp 'подпрограмма перевода цифровых значений месяца в названия месяца
'*******************************************************************************
Select Case _month
Case 1 : Month_disp = "ЗЅіapЗ" 'января
Daysmonth = 31
Case 2 : Month_disp = "дeіpa»З" 'февраля
Daysmonth = _year And &H03 'проверяем на високосный год
If Daysmonth = 0 Then 'если год високосный (переменная Daysmonth = 0)
Daysmonth = 29 'то переменная Daysmonth = 29
Else 'иначе
Daysmonth = 28 'переменная Daysmonth = 28
End If
Case 3 : Month_disp = "јapїa" 'марта
Daysmonth = 31
Case 4 : Month_disp = "aѕpe»З" 'апреля
Daysmonth = 30
Case 5 : Month_disp = "јaЗ" 'мая
Daysmonth = 31
Case 6 : Month_disp = "ёЖЅЗ" 'июня
Daysmonth = 30
Case 7 : Month_disp = "ёЖ»З" 'июля
Daysmonth = 31
Case 8 : Month_disp = "aіґycїa" 'августа
Daysmonth = 31
Case 9 : Month_disp = "ceЅїЗІpЗ" 'сентября
Daysmonth = 30
Case 10 : Month_disp = "oєїЗІpЗ" 'октября
Daysmonth = 31
Case 11 : Month_disp = "ЅoЗІpЗ" 'ноября
Daysmonth = 30
Case 12 : Month_disp = "гeєaІpЗ" 'декабря
Daysmonth = 31
End Select
End Sub
Sub Balance
'*******************************************************************************
Voll = 0
Volr = 0
If Bal < 5 Then 'если Bal < 5, то преобладает левый баланс
Volr = Bal * 3 'вычисляем значение уменьшения
Volr = 15 - Volr 'громкости для правого канала
Volr = Vol - Volr 'рассчитываем значение для правого канала
Subaddr = 1 'отправляем его в TDA
Datas = Volr
Gosub I2c
Elseif Bal = 5 Then 'если B = 5 , то в обоих каналах одинаковая громкость
Voll = Vol
Volr = Vol
Subaddr = 0 'отправляем его в TDA
Datas = Vol
Gosub I2c
Subaddr = 1
Datas = Vol
Gosub I2c
Elseif Bal > 5 Then 'если Bal > 5 , то преобладает правый баланс
Voll = Bal - 5 'вычисляем значение уменьшения
Voll = Voll * 3 'громкости для левого канала
Voll = Vol - Voll 'рассчитываем значение для левого канала
Subaddr = 0 'отправляем его в TDA
Datas = Voll
Gosub I2c
End If
End Sub
Valcoder: 'подпрограмма обработки прерывания INT1
'*******************************************************************************
Select Case Menu
Case 1 : If Valcod_b = 1 Then 'если на линии B лог "1"
If _year < 50 Then Incr _year 'то если переменная _year не достигла значения 50 увеличиваем ее на 1
Else 'если на линии B лог "0"
If _year > 9 Then Decr _year 'то если переменная _year не достигла значения 9 уменьшаем ее на 1
End If
Case 2 : If Valcod_b = 1 Then 'если на линии B лог "1"
If _month < 12 Then Incr _month 'то если переменная _month не достигла значения 12 увеличиваем ее на 1
Else 'если на линии B лог "0"
If _month > 1 Then Decr _month 'то если переменная _month не достигла значения 1 уменьшаем ее на 1
End If
Case 3 : If Valcod_b = 1 Then 'если на линии B лог "1"
If _day < Daysmonth Then Incr _day 'то если переменная _day не достигла значения переменной Daysmonth увеличиваем ее на 1
Else 'если на линии B лог "0"
If _day > 1 Then Decr _day 'то если переменная _day не достигла значения 1 уменьшаем ее на 1
End If
Gosub Setdate 'перехоод на подпрограмму записи даты в DS1307
Gosub Getdatetime 'перехоод на подпрограмму чтения данных из DS1307
Case 4 : If Valcod_b = 1 Then 'если на линии B лог "1"
If _hour < 23 Then Incr _hour 'то если переменная _hour не достигла значения 23 увеличиваем ее на 1
Else 'если на линии B лог "0"
If _hour > 0 Then Decr _hour 'то если переменная _hour не достигла значения 0 уменьшаем ее на 1
End If
Case 5 : If Valcod_b = 1 Then 'если на линии B лог "1"
If _min < 59 Then Incr _min 'то если переменная _min не достигла значения 59 увеличиваем ее на 1
Else 'если на линии B лог "0"
If _min > 0 Then Decr _min 'то если переменная _min не достигла значения 0 уменьшаем ее на 1
End If
_sec = 0
Gosub Settime 'перехоод на подпрограмму записи времени в DS1307
Gosub Getdatetime 'перехоод на подпрограмму чтения данных из DS1307
Case 8 : If Valcod_b = 1 Then 'если на линии B лог "1"
If Vol < 255 Then Incr Vol 'то если переменная Vol не достигла значения 255 увеличиваем ее на 1
Else 'если на линии B лог "0"
If Vol > 220 Then Decr Vol 'то если переменная Vol не достигла значения 220 уменьшаем ее на 1
End If
Case 9 : If Valcod_b = 1 Then 'если на линии B лог "1"
If Bal < 8 Then Incr Bal 'то если переменная Bal не достигла значения 8 увеличиваем ее на 1
Else 'если на линии B лог "0"
If Bal > 0 Then Decr Bal 'то если переменная Bal не достигла значения 0 уменьшаем ее на 1
End If
Case 10 : If Valcod_b = 1 Then 'если на линии B лог "1"
If Treble < 250 Then Incr Treble 'то если переменная Treble не достигла значения 250 увеличиваем ее на 1
Else 'если на линии B лог "0"
If Treble > 242 Then Decr Treble 'то если переменная Treble не достигла значения 242 уменьшаем ее на 1
End If
Case 11 : If Valcod_b = 1 Then 'если на линии B лог "1"
If Bass < 251 Then Incr Bass 'то если переменная Bass не достигла значения 251 увеличиваем ее на 1
Else 'если на линии B лог "0"
If Bass > 242 Then Decr Bass 'то если переменная Bass не достигла значения 242 уменьшаем ее на 1
End If
End Select
Return 'возврат из подпрогрммы
Getdatetime: 'подпрограмма чтения данных из DS1307
'*******************************************************************************
I2cstart ' I2C START
I2cwbyte Ds1307w ' константа адрес записи DS1307
I2cwbyte 0 ' начальный адрес в DS1307
I2cstart ' I2C START
I2cwbyte Ds1307r ' константа адрес чтения DS1307
I2crbyte _sec , Ack ' чтение значения СЕКУНД
I2crbyte _min , Ack ' чтение значения МИНУТ
I2crbyte _hour , Ack ' чтение значения ЧАСА
I2crbyte Weekday , Ack ' чтение значения НЕДЕЛИ
I2crbyte _day , Ack ' чтение значения ДНЯ
I2crbyte _month , Ack ' чтение значения МЕСЯЦА
I2crbyte _year , Nack ' чтение значения ГОДА
I2cstop 'I2C STOP
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) 'преобразуем все переменные в десятичный вид
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year) 'преобразуем все переменные в десятичный вид
Return 'возврат из подпрогрммы
Setdate: 'подпрограмма записи даты в DS1307
'*******************************************************************************
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year) 'преобразуем все переменные в двоичный вид
I2cstart ' I2C START
I2cwbyte Ds1307w ' константа адрес записи DS1307
I2cwbyte 4 ' начальный адрес в DS1307
I2cwbyte _day ' запись ДЕНЬ
I2cwbyte _month ' запись МЕСЯЦ
I2cwbyte _year ' запись ГОД
I2cstop 'I2C STOP
Return 'возврат из подпрогрммы
Settime: 'подпрограмма записи времени в DS1307
'*******************************************************************************
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) 'преобразуем все переменные в двоичный вид
I2cstart ' I2C START
I2cwbyte Ds1307w ' константа адрес записи DS1307
I2cwbyte 0 ' начальный адрес в DS1307
I2cwbyte _sec ' запись СЕКУНД
I2cwbyte _min ' запись МИНУТ
I2cwbyte _hour ' запись ЧАСА
I2cstop 'I2C STOP
Return 'возврат из подпрогрммы
Sub Convertt
'*******************************************************************************
1wreset 'сбросить шину 1wire
1wwrite &HCC 'выдаем команду чтения ПЗУ датчика
1wwrite &H44 ' Convert T
'Waitms 750
1wreset 'сбросить шину 1wire
1wwrite &HCC 'выдаем команду чтения ПЗУ датчика
1wwrite &HBE 'команда чтения ОЗУ датчика
Lsb = 1wread() 'читаем младший байт
Msb = 1wread() 'читаем старший байт
Temp = Lsb / 16 'сдвигаем младший байт вправо на 4 бита
Temp1 = Msb * 16 'сдвигаем старший байт влево на 4 бита
Temp = Temp + Temp1 'формирмируем результам
End Sub
Rc5:
'*******************************************************************************
Getrc5(address , Command) 'считать код RC-5
'If Address = 0 Then 'если адрес = 0,
Command = Command And &B01111111 'то наложить маску
'End If
Return 'возврат из подпрогрммы
I2c: 'подпрограмма записи значений в TDA8425
'*******************************************************************************
I2cstart
I2cwbyte 130
I2cwbyte Subaddr
I2cwbyte Datas
I2cstop
Return 'возврат из подпрогрммы
Writerom: 'подпрограмма записи значений в EEPROM
'*******************************************************************************
Writeeeprom Swfunc , 1
Writeeeprom Vol , 2
Writeeeprom Bal , 3
Writeeeprom Bass , 4
Writeeeprom Treble , 5
Return 'возврат из подпрогрммы
Weekdays:
'*******************************************************************************
Data "ЁoЅeг. " 'Понед.
Data "BїopЅёє" 'Вторник
Data "Cpeгa " 'Среда
Data "«eїіepґ" 'Четверг
Data "ЁЗїЅёеa" 'Пятница
Data "CyІІoїa" 'Суббота
Data "Bocєp. " 'Воскр.Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.


