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

Применение динамической индикации. Пример 2 - Управление 3 +nРазр.
В данном примере рассмотрим организацию вывода значения счетчика на ССИ и использованием сдвигового регистра 74HC595. Данный регистр хорош тем, что позволяет сэкономить 5 выводов от МК, а при применении двух регистров можно организовать восьмиразрядную ССИ с использованием всего трех выводов от МК.
Здесь также имеются некоторые нюансы:
1) Вывод числа должен организовываться таким образом, чтобы первым с регистр загонялось число, а потом уже зажигаться разряд. Иначе при зажженном разряде будет подмигивание индикатора. Это происходит из-за того, что биты в регистр загоняются последовательно и последовательно проходят от вывода к выводу
2) Для отображения числа на разряде - данные после поступления нужно защелкнуть подав 1 на соответствующий вывод.
Схема устройства:



Код счетчика с отображением процесса счета на ССИ:

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  
'-----------------------------------Конфигурация переменных-----------------------------------------  
Symbol SH_CP PORTB.0
Symbol DS PORTB.1
Symbol ST_CP PORTB.2
Symbol R1 PORTC.0 'разряд индикатора
Symbol R2 PORTC.1 'разряд индикатора
Symbol R3 PORTC.2 'разряд индикатора
Symbol R4 PORTC.3 'разряд индикатора
Dim Value As Byte
Dim Ind As Word 'Переменная для вывода индицируемого значения величин в Portb
Dim n As Byte '
Dim i As Word 'Переменная для счетчика цифр
Dim j As Byte 'Переменная для организации задержки счета
'-------------------------------------Главная программа---------------------------------------------
Start:
For i = 0 To 9999 Step 1
For j = 0 To 10 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:
  Value = LookUpL n, [192,249,164,176,153,146,130,248,128,144]
  SHOut DS, SH_CP, msbfirst, [Value]  
  ST_CP = 1
  ST_CP = 0
  Return  

Что можно сделать здесь еще?:
- добавить точку на определенный разряд (для примера на второй справа):
-//-
Dim dot as byte
dot = 128 ‘ %10000000
-//-
n = Ind Dig 1 'Выделяем из числа десятки
Value = LookUpL n, [192,249,164,176,153,146,130,248,128,144]
SHOut DS, SH_CP, msbfirst, [Value + dot]
ST_CP = 1
ST_CP = 0
R3 = 1 'Зажигаем 2-й справа разряд индикатора
DelayMS 2 'Задержка для отображения цифры
R3 = 0 'Гасим разряд

- Зажечь определенный символ на разряде:
If x = 0 then SHOut DS, SH_CP, msbfirst, [Value]: endif
If x = 1 then SHOut DS, SH_CP, msbfirst, [118]: endif ‘ символ H

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

  R4 = 1
  DelayMS 2
  R4 = 0

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

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

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

Прикрепления:как прикрепить файл проекта?

В следующем примере рассмотрим динамическую индикацию по трем проводам с использованием двух 74HC595




Категория: Proton PICBasic | Добавил: S_moke (10.01.2012) | Автор: S_moke
Просмотров: 5612 | Комментарии: 5 | Рейтинг: 5.0/2
Всего комментариев: 5
1 mikhail09p   (11.01.2012 05:45)
Уважаемый S_moke, Вы ошиблись, код программы тут из предыдущего примера:
Применение динамической индикации. Пример 1 - Управление 8 +nРазр.

2 S_moke   (11.01.2012 08:54)
Да, извиняюсь - публиковал в спешке, поэтому сейчас исправлю.

3 mikhail09p   (11.01.2012 15:50)
Файлы проекта отправьте модератору demanik, он разместит. wink
Хорошая работа! Большое спасибо! applause

4 Stok   (20.03.2012 12:30)
Спасибо! Очень помогло! А можете так же написать для индикатора с общим катодом?

5 HCT   (21.02.2015 10:51)
Большое спасибо, S_moke! А с инверторами и с общим катодом работает.

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