Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Мигание изменяемого параметра


Мигание изменяемого параметра

Сообщений 1 страница 8 из 8

1

Всем привет!
Ни кто не заморачивался с миганием изменяемого параметра на ЖКИ с контроллером HD44780?
Cursor On Blink не подходит, так как находится только под одним знакоместом.
Есть какие-нибудь идеи?
Заранее спасибо.

0

2

Мне кажется только попеременный вывод-стирание-вывод.

0

3

Мне тоже. Только как реализовать это в коде?

0

4

max написал(а):

Только как реализовать это в коде?

Lcd Spc(количество пробелов)

0

5

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 * 2

  Config 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 Byte

  Dim Выводимая_строка_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 Переменная_str

          Else
           'Забираем пустое место
            Выводимая_строка_str = Lookupstr(0 , Значения_выводимых_строк)

            Locate 2 , 1
            Lcd Spc(5)

        End If

       'Выводим строку
        Locate 1 , 1
        Lcd Выводимая_строка_str

        Флаг_обновить_lcd = 0
        Goto Главный_цикл
    End If


    Idle
'===============================================================================
  Goto Главный_цикл
End
'
'===============================================================================

'===============================================================================
  Обработка_прерывания_timer2:
'-------------------------------------------------------------------------------
    Timer2 = Const_доп_делитель_timer2

    Incr Счетчик_прерываний_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)

0

6

Наверное придется под целый экран делать страницу памяти отведенную под контроль мигания (чтобы помнить какие позициями мигать) и уже исходя из этого таймер обработку.

0

7

Мне удобнее в основном цикле формировать 2х16 строки, в которых уже собраны все переменные с учетом длины символов, мигания и тд. А затем выводить на LCD с заданным периодом.
Например, флаг обновления LCD поднимается раз в 1 сек (таймером). Флаг мигания с любым периодом по другому счетчику. В теле основного цикла готовим строки на вывод с учетом флага мигания, количеством символов переменной, чтобы не было сдвигов. Затем выводим готовые строки на LCD.

0

8

Спасибо, буду пробовать.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Мигание изменяемого параметра