Визуализация уровня громкости на ЖКИ1602 - BASCOM AVR - Микроконтроллеры - Каталог статей - Собери свою радиосхему! Сайт радиолюбителей.
Собери свою радиосхему!
Воскресенье, 11.12.2016, 05:11 Приветствую Вас Гость

Чебоксары

Главная | Регистрация | Вход | RSS

Каталог статей

Главная » Статьи » Микроконтроллеры » BASCOM AVR

Визуализация уровня громкости на ЖКИ1602

Барграф это такая линейная шкала, размер которой соответствует значению какого-либо настраиваемого параметра. Еще одна разновиднотсь барграфа с ползунком - положение ползунка будет меняться в зависимости от значения переменной в пределах 0-100%, это мы наблюдаем, к примеру, каждый раз изменяя настройки громкости в плеере. Использование барграфов в меню упрощает визуальную настройку - мы сразу можем определить значение настраиваемого параметра. Да и выглядит приятней и по взрослому. В статье опишу метод создания барграфов для знакосинтезирующих дисплеев 16х2 с контроллером HD44780.

 Для быстрого создания  барграфа  в своем проекте будем пользоваться библиотекой от австрийского товарища Мэтиаса Браунеккера (Matthias Braunecker), на данный момент поддерживается 5 типов барграфов, каждый из которых имеет свой номер:

Выводить барграф на дисплей с данной библиотекой очень просто, сейчас рассмотрим это. Для начала скачиваем саму библиотеку lcd_bar.bas.

 Для подключения библиотеки в начале программы прописываем следующие строки:

Const Lcd_bar_style = [Style]
 $include "lcd_bar.bas"

в первой строке вместо [Style] вставляем цифру от 0 до 4, тем самым выбираем какой вид будет иметь наш барграф. В следующей строке подключаем саму библиотеку и указываем путь, чтобы компилятор его нашел. В данном случае библиотека лежит в папке с проектом, поэтому полный путь к файлу указывать не обязательно.

 В том месте где нужно вывести барграф, вставляем вот это:

Locate [x] , [y]
 Lcd_bar [value] , [x-size] 

В первой строке указываются координаты начала шкалы. В следующей строчке  [value] заменяется той переменной, значение которой нам нужно отрисовать. Параметром [x-size] указывается длина выводимого барграфа, тоесть насколько он будет вытянут по длине дисплея.

 К микроконтроллеру Atmega8 подключен энкодер. Общий вывод энкодера поcажен на землю, а выводы данных подключены напрямую к PortD.2 (используется прерывание Int0) и PortD.3, схему рисовать было лень думаю уж разберетесь...  При вращении ручки энкодера изменяется переменная Value в пределах значений от 0 до 100. В первой строке дисплея начиная с третьего знакоместа выводится барграф, длиной 12 символов.

Код программы в BASCOM AVR:

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 34
$swstack = 32
$framesize = 34


Config Portd.2 = Input               'для подключения второго выхода энкодера
Config Int0 = Falling                 'прерывание INT0 по заднему фронту
On Int0 Encod

Enable Interrupts
Enable Int0

'конфигурируем подключение дисплея

Config Lcdpin = Pin , Rs = Portc.0 , E = Portb.5 , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1
Config Lcd = 16 * 4                                         

Config Portb.0 = Output
Portb.0 = 1
Cursor Off
Cls

Const Lcd_bar_style = 1               'выбранный стиль барграфа
$include "lcd_bar.bas"                'подрубаем внешний файл библиотеки

Dim Value As Byte                     'переменная с которой работаем

Do

 Disable Interrupts                  'запрещаем прерывания во время работы с дисплеем
 Locate 1 , 3
 Lcd_bar Value , 12                    'выводим барграф размером 12 символов


 If Value > 100 Then Value = 0        'держим переменную в пределах от 0 до 100

 Locate 2 , 1
 Lcd "Value = " ; Value ; " %"        'выводим числовое значение переменной

 Enable Interrupts                  'снова разрешаем прерывания

 Waitms 70
 Cls

Loop

End
Encod:
 Waitms 2                            'ждем пока утихнет дребезг контактов
 If Pind.2 = 0 Then
  If Pind.3= 0 Then                 'если на ноге единица (импульс не пришел) тогда
  Incr Value                         'инкременируем переменную (увеличиваем на 1)
  Else                               'в обратном случае
  Decr Value                         'декрементируем переменную (уменьшаем на 1)
  End If
 End If
 Gifr = 64                           'сбрасываем регистр хранения прерывания INT0

Return

- - - - - - - - - - 

Вот что получаем в итоге. При вращении ручки энкодера "ползунок" будет ползать по линейке, а переменная Value будет изменяться от 0 до 100%.

Видео:

 

Фотографии:

Другой вариант отображения...

Третий вариант барграфа...

Проект в BASCOM (исходник) и файл библиотеки должны находиться в одной папке, иначе при компиляции будет ошибка!

...по материалам сайта http://avrproject.ru/

Скачать проект в BASCOM AVR (~1кб.)

Скачать библиотеку (~1.5кб.)

Категория: BASCOM AVR | Добавил: Адвансед (16.09.2014)
Просмотров: 2413 | Теги: ATmega8, 1602 | Рейтинг: 4.0/4
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:
Категории раздела
Источники питания и приборы
Охрана и контроль доступа
Измерительные устройства
Часы, таймеры, счетчики
Световые эффекты
Защита и контроль
Для начинающих
Разное
BASCOM AVR
Информация по МК, FAQ
Поиск
Наш опрос
Проводит ли вода эл.ток?
Всего ответов: 52

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
у нас тут все на bascom)

Подавляющее количество часов на Atmega8 выполнены с использо...

В чем тогда может быть причина, что у меня показывает лишь в...

Рейтинг@Mail.ru