Главная » Статьи » Proton PICBasic

Применение динамической индикации. Пример 1 - Управление 8 +nРазр.
В процессе изучения языка Proton Pic Basic обнаружилось то, что вывод информации пользователю о контролируемых и измеряемых величинах проще всего реализовать на ЖК индикаторе. Пара строк - вывод обеспечен. Другое дело обстоит с применением ССИ. Разбирая чужие примеры организации динамической индикации (ДИ), я пришел к выводу, что новичкам порой сложно понять - каким образом организован процесс вывода информации на экран. Потратив на это дело определенное количество времени и не разобравшись толком, пришлось поразмыслить и написать наиболее простой вариант, доступный для понимания большинству.
Подробно описывать процесс динамической индикации описывать не буду, упомяну лишь следующие моменты:
1) В Proton подключение сегментов строго последовательное Px.0 – A, Px.1 – B, Px.2 – C, Px.3 – D, Px.4 – E, Px.5 – F, Px.6 – G, Px.7 – Dp
2) В портX сначала выводится заранее выделенная и подготовленная цифра (в данном случае первой цифрой может быть и крайняя слева и крайняя справа, но общепринятой все же является та, которая относится к младшему разряду индикатора, т. е. крайняя справа )
3) Зажигается соответствующий цифре разряд ССИ на время 2мС (экспериментируйте)
4) Разряд гасится
5) Далее аналогично выводятся оставшиеся цифры и зажигаются соответствующие им разряды
Организовать ДИ можно написав подпрограмму цикла для зажигания и гашения разрядов, но я выше оговорился что покажу самый простой и доступный способ.
Итак, привожу пример банального счетчика с отображением процесса счета на ССИ:



Собственно сам код

Device 16F876A
'----------------------------Предустановки----------------------------------------------------------
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_ON, WDT_OFF, HS_OSC
Xtal 4
'----------------------------------Настройки портов-------------------------------------------------
PortB_Pullups = off 'Выключить подтяжку резисторов к порту PORTB  
TRISA = %11111111
TRISB = %00000000
TRISC = %00000000
PORTB = %00000000  
PORTC = %00000000  
'-----------------------------------Конфигурация переменных-----------------------------------------  
Dim Ind As Word 'Переменная для вывода индицируемого значения величин в Portb
Dim n As Byte '
Dim i As Word 'Переменная для счетчика цифр
Dim j As Byte 'Переменная для организации задержки счета
Symbol R1 PORTC.0 'разряд индикатора
Symbol R2 PORTC.1 'разряд индикатора
Symbol R3 PORTC.2 'разряд индикатора
Symbol R4 PORTC.3 'разряд индикатора
'-------------------------------------Главная программа---------------------------------------------
Start:
For i = 0 To 9999 Step 1
For j = 0 To 15 Step 1
DelayMS 1
Ind = i  
GoSub DI
Next j
Next i
GoTo Start
End
;------------------------------Подпрограмма динамической индикации----------------------------------
DI:
  n = Ind Dig 0 'Выделяем из числа единицы
  GoSub Convert 'и отправляем на табличную конвертацию
  R4 = 1 'Зажигаем 1-й справа разряд индикатора
  DelayMS 2 'Задержка для отображения цифры
  R4 = 0 'Гасим разряд
  '
  n = Ind Dig 1 'Выделяем из числа десятки
  GoSub Convert 'и отправляем на табличную конвертацию
  R3 = 1 'Зажигаем 2-й справа разряд индикатора
  DelayMS 2 'Задержка для отображения цифры
  R3 = 0 'Гасим разряд
  '
  n = Ind Dig 2 'Выделяем из числа сотни
  GoSub Convert 'и отправляем на табличную конвертацию
  R2 = 1 'Зажигаем 3-й справа разряд индикатора
  DelayMS 2 'Задержка для отображения цифры
  R2 = 0 'Гасим разряд
  '
  n = Ind Dig 3 'Выделяем из числа тысячи
  GoSub Convert 'и отправляем на табличную конвертацию
  R1 = 1 'Зажигаем 4-й справа разряд индикатора
  DelayMS 2 'Задержка для отображения цифры
  R1 = 0 'Гасим разряд
Return
'---------------------------------------------------------------------------------------------------  
  Convert:
  LookUpL n, [192,249,164,176,153,146,130,248,128,144], PORTB  
  Return  

  

Замечания по коду:
Вместо строк
Код

  R4 = 1
  DelayMS 2
  R4 = 0

Можно применить всего одну:
Код

PulsOut R4 , 200 ' Где 200 - время присутствия импульса на ноге. Расчетное время равно 200*10uS=2mS

В данном случае размер исполняемого кода для одного разряда увеличится на три программных слова

Прикрепления: как прикрепить проект?
В следующем примере рассмотрим сдвиговый регистр 74HC595




Категория: Proton PICBasic | Добавил: S_moke (10.01.2012) | Автор: S_moke
Просмотров: 8862 | Комментарии: 3 | Рейтинг: 5.0/3
Всего комментариев: 3
1 Stok   (19.03.2012 22:44) [Материал]
Конвертация, по-моему, неправильная. Нужно завести еще одну переменную для оной + убрать PORTB из предпоследней строки. Но Протеус все равно одни восьмерки показывает, что-то не так.

2 Stok   (16.04.2012 22:04) [Материал]
Ай! Нет, это я лень! Конвертация должна выглядеть так:
Convert:
PORTB = LookUpL n, [192,249,164,176,153,146,130,248,128,144]
Return

3 QWERTY   (09.08.2015 01:42) [Материал]
Еще хотелось бы чтобы был примерчик где извлекаются не только тысячи, но и десятки тысяч, и сотни тысяч и единицы и десятки миллионов. DIG ограничивает 5 цифрами к сожалению

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]