Главная » Статьи » Proton PICBasic |
Применение динамической индикации. Пример 4 - Сдвиговый регистр 74НС164
В этой статье рассмотрим работу сдвигового регистра 74HC164. Этот регистр так же как и 74HC595 предназначен для последовательного приема и параллельного отображения данных. Также подходит в случае, когда нужно сэкономить порты. Стоимость его (в Витебске) ненамного дороже 595-го - 6,1RUR против 5,8RUR. Рассмотрим внутреннюю схему регистра: Как видно, он мало чем отличается от 595-го, но есть пара особенностей:
Расположение выводов на мой взгляд уступает 595-му... Схема из предыдущих примеров, но с использованием двух сдвиговых регистров 74HC164: Ну и сам код: 'Счетчик c динамической индикацией на сдвиговом регистре 74HC164 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 Rst = PORTB.0 'Вывод для сброса сдвигового регистра Symbol Clock = PORTB.1 'Вывод для тактовых импульсов для сдвигового регистра Symbol DTA = PORTB.2 'Вывод для передачи данных для сдвигового регистра 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 'и отправляем на табличную конвертацию Rst = 1 'Сбрасываем сдвиговые регистры сигналом RESET SHOut DTA, Clock, msbfirst, [8] 'Проталкиваем в нижний регистр бит для зажигания разряда № 4 SHOut DTA, Clock, msbfirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для единиц DelayMS 2 'Задержка для отображения разряда 4 Rst = 0 'Отпускаем сброс ' n = Ind Dig 1 'Выделяем из числа десятки GoSub Convert 'и отправляем на табличную конвертацию Rst = 1 'Сбрасываем сдвиговые регистры сигналом RESET SHOut DTA, Clock, msbfirst, [4] 'Проталкиваем в нижний регистр бит для зажигания разряда № 3 SHOut DTA, Clock, msbfirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для десятков DelayMS 2 'Задержка для отображения разряда 3 Rst = 0 'Отпускаем сброс ' n = Ind Dig 2 'Выделяем из числа сотни GoSub Convert 'и отправляем на табличную конвертацию Rst = 1 'Сбрасываем сдвиговые регистры сигналом RESET SHOut DTA, Clock, msbfirst, [2] 'Проталкиваем в нижний регистр бит для зажигания разряда № 2 SHOut DTA, Clock, msbfirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для сотен DelayMS 2 'Задержка для отображения разряда 2 Rst = 0 'Отпускаем сброс ' n = Ind Dig 3 'Выделяем из числа тысячи GoSub Convert 'и отправляем на табличную конвертацию Rst = 1 'Сбрасываем сдвиговые регистры сигналом RESET SHOut DTA, Clock, msbfirst, [1] 'Проталкиваем в нижний регистр бит для зажигания разряда № 1 SHOut DTA, Clock, msbfirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для тысяч DelayMS 2 'Задержка для отображения разряда 1 Rst = 0 'Отпускаем сброс '-------------------------------Подпрограмма табличной конвертации числа---------------------------- Convert: Value = LookUpL n, [192,249,164,176,153,146,130,248,128,144] Return Замечания по коду: как видно, отличий очень мало от предыдущего примера. Если использовать всего один сдвиговый регистр, то итоговый код индикации будет аналогичен, рассмотренному в примере 2. В этом случае мерцания не будет, поскольку разряды могут включаться в нужное время (после вывода цифры в регистр) Прикрепления: Похожие материалы: Применение динамической индикации. Пример 1 - Управление 8 +nРазр, Применение динамической индикации. Пример 2 - Управление 3 +nРазр, Применение динамической индикации. Пример 3 - Управление по трем проводам, Статическая индикация. Пример 5 – Управление 3 + nРазр
| |
Просмотров: 27106 | Комментарии: 3 | |
Всего комментариев: 3 | |
| |