Всем привет!
Ни кто не заморачивался с миганием изменяемого параметра на ЖКИ с контроллером HD44780?
Cursor On Blink не подходит, так как находится только под одним знакоместом.
Есть какие-нибудь идеи?
Заранее спасибо.
Мигание изменяемого параметра
Сообщений 1 страница 8 из 8
Поделиться12016-01-26 19:22:22
Поделиться22016-01-27 09:14:01
Мне кажется только попеременный вывод-стирание-вывод.
Поделиться32016-01-27 09:15:44
Мне тоже. Только как реализовать это в коде?
Поделиться42016-01-27 10:01:31
Только как реализовать это в коде?
Lcd Spc(количество пробелов)
Поделиться52016-01-27 10:08:11
1. Прерывания по таймеру, с периодом мигания. В прерывании подымать флаг, сигнализирующий о необходимости обновить индикацию.
2. В главном цикле, по условию флага, обновлять индикацию.
$map ' Получаем карту распределения памяти компилятором Bascom
$regfile = "m328pdef.dat" 'Документация Atmel - http://www.atmel.com/images/Atmel-8271- … mplete.pdf
$crystal = 1000000
$framesize = 128 ' Размер области используемой и необходимой для преобразований
$hwstack = 128 ' Размер аппаратного стека
$swstack = 128 ' Размер программного стека$baud = 4800
Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Ucsr0a.1 = 1 ' Двойная скорость работы USART, скорость трансляции = $baud * 2Config Timer2 = Timer , Prescale = 64
On Timer2 Обработка_прерывания_timer2
Const Const_доп_делитель_timer2 = 100 ' Прерывания каждые ~10 ms
Dim Счетчик_прерываний_timer2 As Byte
'===============================================================================
' Настройка МК для работы с LCD на базе контроллера hd44780
' Обратите внимание, библиотеки не используются, выводы могут быть любые
'===============================================================================
Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0
Config Lcd = 20 * 4 ' Используемый LCD
Initlcd ' Инициализируем LCD
Waitms 50 ' Ждем пока все запустится
Cursor Off ' Noblink ' Выключаем неморгающий курсор
' Cursor On Noblink ' Включаем неморгающий курсор
' Cursor Blink ' Включаем моргающий курсор
' Upperline 1 строка, Lowerline 2 строка, Thirdline 3 строка, Fourthline 4 строка - один из вариантов перехода на строку
Cls ' Чистим экран, на всякий случайDim Период_мигания_lcd As Byte : Период_мигания_lcd = 50 ' Период мигания в ms = значение * 10
Dim Флаг_мигание_lcd As Byte
Dim Флаг_обновить_lcd As ByteDim Выводимая_строка_str As String * 20
Dim Переменная_word As Word
Dim Переменная_str As String * 5'===============================================================================
' Разрешаем работу всех включенных прерываний
'===============================================================================
Enable Timer2
Enable Interrupts
'===============================================================================' Г Л А В Н Ы Й Ц И К Л
Главный_цикл:
'===============================================================================Incr Переменная_word
Переменная_str = Str(переменная_word)
Переменная_str = Format(переменная_str , " 0")If Флаг_обновить_lcd <> 0 Then
Toggle Флаг_мигание_lcd
If Флаг_мигание_lcd <> 0 Then
'Забираем нужную информацию
Выводимая_строка_str = Lookupstr(1 , Значения_выводимых_строк)Locate 2 , 1
Lcd Переменная_strElse
'Забираем пустое место
Выводимая_строка_str = Lookupstr(0 , Значения_выводимых_строк)Locate 2 , 1
Lcd Spc(5)End If
'Выводим строку
Locate 1 , 1
Lcd Выводимая_строка_strФлаг_обновить_lcd = 0
Goto Главный_цикл
End IfIdle
'===============================================================================
Goto Главный_цикл
End
'
'==============================================================================='===============================================================================
Обработка_прерывания_timer2:
'-------------------------------------------------------------------------------
Timer2 = Const_доп_делитель_timer2Incr Счетчик_прерываний_timer2
If Счетчик_прерываний_timer2 => Период_мигания_lcd Then
Флаг_обновить_lcd = 1
Счетчик_прерываний_timer2 = 0
End If
'-------------------------------------------------------------------------------
Return
'==============================================================================='===============================================================================
Значения_выводимых_строк:
Data " " '0
Data "Example_1" '1
Data "Example_2" '2
Data "Example_3" '3'===============================================================================
Отредактировано sasha_1973 (2016-01-27 10:38:25)
Поделиться62016-01-27 11:24:41
Наверное придется под целый экран делать страницу памяти отведенную под контроль мигания (чтобы помнить какие позициями мигать) и уже исходя из этого таймер обработку.
Поделиться72016-01-27 11:30:27
Мне удобнее в основном цикле формировать 2х16 строки, в которых уже собраны все переменные с учетом длины символов, мигания и тд. А затем выводить на LCD с заданным периодом.
Например, флаг обновления LCD поднимается раз в 1 сек (таймером). Флаг мигания с любым периодом по другому счетчику. В теле основного цикла готовим строки на вывод с учетом флага мигания, количеством символов переменной, чтобы не было сдвигов. Затем выводим готовые строки на LCD.
Поделиться82016-01-27 17:45:48
Спасибо, буду пробовать.