Главная » Статьи » 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
 
Похожие материалы: Применение динамической индикации. Пример 1 - Управление 8 +nРазрПрименение динамической индикации. Пример 3 - Управление по трем проводамПрименение динамической индикации. Пример 4 - Сдвиговый регистр 74НС164Статическая индикация. Пример 5 – Управление 3 + nРазр

Воздуховоды – это одна из важных частей вентиляционной системы. Крупный рыночный сегмент занят оцинкованными изделиями, на которые обычно пускается листовой металл. Воздуховоды здесь необходимы не только для транспортировки воздуха – при наличии дополнения определенными установками формируются системы подготовки воздуха. Среди них можно назвать комплексы, обеспечивающие обеззараживание, охлаждение или подогрев, а также иные функции.



Категория: Proton PICBasic | Добавил: S_moke (10.01.2012)
Просмотров: 8634 | Комментарии: 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! А с инверторами и с общим катодом работает.

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