Главная » Статьи » Полезная информация |
Барграф это такая линейная шкала, размер которой соответствует значению какого-либо настраиваемого параметра. Еще одна разновиднотсь барграфа с ползунком - положение ползунка будет меняться в зависимости от значения переменной в пределах 0-100%, это мы наблюдаем, к примеру, каждый раз изменяя настройки громкости в плеере. Использование барграфов в меню упрощает визуальную настройку - мы сразу можем определить значение настраиваемого параметра. Да и выглядит приятней и по взрослому. В статье опишу метод создания барграфов для знакосинтезирующих дисплеев 16х2 с контроллером HD44780. Для быстрого создания барграфа в своем проекте будем пользоваться библиотекой от австрийского товарища Мэтиаса Браунеккера (Matthias Braunecker), на данный момент поддерживается 5 типов барграфов, каждый из которых имеет свой номер: Выводить барграф на дисплей с данной библиотекой очень просто, сейчас рассмотрим это. Для начала скачиваем саму библиотеку: Для подключения библиотеки в начале программы прописываем следующие строки:
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.4 Схема подключения: При вращении ручки энкодера изменяется переменная Value в пределах значений от 0 до 100. В первой строке дисплея начиная с третьего знакоместа выводится барграф, длиной 12 символов. Для улучшения юзабильности можно дабавить цифровую информацию настраиваемого параметра, как это сделано у меня:
$regfile = "m8def.dat"
$crystal = 8000000 $hwstack = 34 $swstack = 32 $framesize = 34 Config Portd.4 = Input 'для подключения второго выхода энкодера Config Int0 = Falling 'прерывание INT0 по заднему фронту On Int0 Encod Enable Interrupts Enable Int0 'конфигурируем подключение дисплея Config Lcdpin=Pin,Rs=Portc.0,E=Portc.1,Db4=Portc.2,Db5=Portc.3,Db6=Portc.4,Db7=Portc.5 Config Lcd = 16 * 2 Cursor Blink Cls Lcd "AVRproject.ru" Lowerline Lcd "Bargraf demo" Wait 3 Cursor Noblink 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.4 = 0 Then 'если на ноге единица (импульс не пришел) тогда Incr Value 'инкременируем переменную (увеличиваем на 1) Else 'в обратном случае Decr Value 'декрементируем переменную (уменьшаем на 1) End If End If Gifr = 64 'сбрасываем регистр хранения прерывания INT0 Return Вот что получаем в итоге. При вращении ручки энкодера "ползунок" будет ползать по линейке, а переменная Value будет изменяться от 0 до 100%. Выбранный стиль барграфа = 1 И другие варианты шкал:
[Style] = 0
[Style] = 2
[Style] =3
[Style] = 4
| |
Просмотров: 21544 | Комментарии: 15
| Теги: |
Всего комментариев: 15 | ||||||||||||
| ||||||||||||
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |