Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [115]
Наш опрос
Оцените мой сайт
Всего ответов: 1292
Главная » Статьи » Мои статьи

Цикл статей на тему "Исследование работы 7-Seg Led индикации в Bascom". Поразрядная индикация.
Исследование работы 7-Seg LED индикаторов в "Bascom”.

   
 О принципе вывода информации на 7-seg led писано, переписано, в принципе и добавить-то нечего. Если у кого возникнет желание разобраться досконально - GOOGLE в помощь, для особо ленивых ссылки далее по тексту. 

Ссылки по данной тематике:



Е щ ё   с с ы л к и:   будут позже !!!



     В данной статье будет рассмотрен вариант поразрядного вывода информации именно в среде компилятора "Bascom", а именно:  динамическая индикация на 7-ми сегментных светодиодных индикаторах в 8-ми разрядах.

 Поразрядная индикация – т.е., в единицу времени светятся все сегменты выводимой цифры в одном разряде.





  Исходник



'*******************************************************************************
'****************** Поразрядная 7-seg LED индикация ********************
'*******************************************************************************

' Контроллер: ATMEGA8A или любой другой "AVR" с небольшими переделками исходника
' Версия компилятора: BASCOM-AVR 2.0.7.1
' Автор: sasha_1973

'*******************************************************************************
'-------------------------------------------------------------------------------
'--------------- Конфигурация используемого контроллера ----------------
'-------------------------------------------------------------------------------
$regfile = "m8def.dat" : $crystal = 4000000 : $hwstack = 40 : $swstack = 16 : $framesize = 32
'-------------------------------------------------------------------------------
'******************************************************************************
'-------------------------------------------------------------------------------
'--------------- Настройка портов МК для LED индикации -----------------
'-------------------------------------------------------------------------------
' ******************************************************************************
'-------------------------------------------------------------------------------
'------------- Присваиваем собственные имена, для удобства -------------
'-------------------------------------------------------------------------------

A Alias Portb.0 ' Порт МК, к которому подключен сегмент "А" LED индикатора
B Alias Portb.1 ' Порт МК, к которому подключен сегмент "B" LED индикатора
C Alias Portb.2 ' Порт МК, к которому подключен сегмент "C" LED индикатора
D Alias Portb.3 ' Порт МК, к которому подключен сегмент "D" LED индикатора
E Alias Portb.4 ' Порт МК, к которому подключен сегмент "E" LED индикатора
F Alias Portb.5 ' Порт МК, к которому подключен сегмент "F" LED индикатора
G Alias Portb.6 ' Порт МК, к которому подключен сегмент "G" LED индикатора
H Alias Portb.7 ' Порт МК, к которому подключен сегмент "H" LED индикатора

'------------------------

Разряд_1 Alias Portd.0 ' Порт МК, к которому подключен "1 разряд" LED индикатора
Разряд_2 Alias Portd.1 ' Порт МК, к которому подключен "2 разряд" LED индикатора
Разряд_3 Alias Portd.2 ' Порт МК, к которому подключен "3 разряд" LED индикатора
Разряд_4 Alias Portd.3 ' Порт МК, к которому подключен "4 разряд" LED индикатора
Разряд_5 Alias Portd.4 ' Порт МК, к которому подключен "5 разряд" LED индикатора
Разряд_6 Alias Portd.5 ' Порт МК, к которому подключен "6 разряд" LED индикатора
Разряд_7 Alias Portd.6 ' Порт МК, к которому подключен "7 разряд" LED индикатора
Разряд_8 Alias Portd.7 ' Порт МК, к которому подключен "8 разряд" LED индикатора

'-------------------------------------------------------------------------------
'--------- Коммутация портов (вход, выход или висим в воздухе) ---------
'-------------------------------------------------------------------------------

' Можно так

Config Portb = Output ' Настраиваем сразу весь порт МК на выход

' или так

Config Portb.0 = Output ' Настраиваем одну ножку порта на выход
Config Portb.1 = Output ' Настраиваем одну ножку порта на выход
Config Portb.2 = Output ' Настраиваем одну ножку порта на выход
Config Portb.3 = Output ' Настраиваем одну ножку порта на выход
Config Portb.4 = Output ' Настраиваем одну ножку порта на выход
Config Portb.5 = Output ' Настраиваем одну ножку порта на выход
Config Portb.6 = Output ' Настраиваем одну ножку порта на выход
Config Portb.7 = Output ' Настраиваем одну ножку порта на выход

' или так, кому, как больше нравится

Ddrb = &B11111111 ' Настройка каждого вывода всего порта (PORTB - сегменты), в одну строчку

'--------------------------

Config Portd.0 = Output ' Настраиваем одну ножку порта на выход
Config Portd.1 = Output ' Настраиваем одну ножку порта на выход
Config Portd.2 = Output ' Настраиваем одну ножку порта на выход
Config Portd.3 = Output ' Настраиваем одну ножку порта на выход
Config Portd.4 = Output ' Настраиваем одну ножку порта на выход
Config Portd.5 = Output ' Настраиваем одну ножку порта на выход
Config Portd.6 = Output ' Настраиваем одну ножку порта на выход
Config Portd.7 = Output ' Настраиваем одну ножку порта на выход

' или так, кому, как больше нравится

Ddrd = &B11111111 ' Настройка каждого вывода всего порта (PORTD - разряды), в одну строчку

' ------------------------------------------------------------------------------

' Немного отвлечемся.
' Бытует мнение, что компилятор не дружит с кирилицей.
' Исходя из личного опыта могу сказать, конфликтов не наблюдалось.
' Единсвенное ограничение - количество символов в именах. Думаю Вам хватит с избытком.


'-------------------------------------------------------------------------------
'----------------- Определение переменных и констант -------------------
'-------------------------------------------------------------------------------
Начальные_настройки: ' Просто метка, для удобства
'-------------------------------------------------------------------------------

Dim Тип_индикатора_1_канал As Byte ' Переменная, для хранения значения типа индикатора
Тип_индикатора_1_канал = 0 ' Если тип_индикатора = 1 , то ОК , если Тип_индикатора = 0 , То ОA

Dim Тип_индикатора_2_канал As Byte ' Переменная, для хранения значения типа индикатора
Тип_индикатора_2_канал = 1 ' Если тип_индикатора = 1 , то ОK , если Тип_индикатора = 0 , То ОA

'-------------------------------------

Const Общее_количество_разрядов = 8 ' Константа, для хранения значения общего количества используемых разрядов

Const Скорость_изменения_переменной = 100 ' Константа , для хранения значения задержки "Waitms"
Const Значение_регистра_tcnt0_timer0 = 250 '  Константа, для хранения значения регистра TCNT0

'-------------------------------------------------------------------------------

Dim Цикл_led As Byte ' Переменная, для хранения количества выводимых разрядов (нужна для разбивки значения на разряды)
Dim Счетчик_миганий As Word ' Счетчик для обработки частоты и длительности мигания
Dim Частота_мигания As Word ' Переменная, для хранения значения частоты мигания при Флаг_мигание(n) = 1
Dim Счетчик_разрядов As Byte ' Счетчик перебора разрядов
Dim Переменная_word_1 As Word ' Переменная, которую будем менять
Dim Переменная_word_2 As Word ' Переменная, которую будем менять
Dim Выводимая_цифра_led As Byte ' Переменная, для загрузки цифр в порт
Dim Выводимые_данные_led As Word ' Переменная, для хранения выводимых данных
Dim Копия_выводимые_данные_led As Word ' Переменная, для временного хранения выводимых данных (нужна для разбивки значения на разряды)
Dim 1_канал_выводимые_данные_led As Word ' Переменная, для хранения выводимых данных
Dim 2_канал_выводимые_данные_led As Word ' Переменная, для хранения выводимых данных
Dim Длительность_горения_при_мигании As Word ' Переменная, для хранения значения длительности горения знакоместа при "Флаг_мигание(n) = 1"
Dim Цифра(общее_количество_разрядов) As Byte ' Значение разряда для 8-ми разрядов
Dim Флаг_точка(общее_количество_разрядов) As Byte ' Флаг точки для 8-ми разрядов
Dim Флаг_гашение(общее_количество_разрядов) As Byte ' Флаг гашения нужного разряда для 8-ми разрядов
Dim Флаг_мигание(общее_количество_разрядов) As Byte ' Флаг мигания нужного разряда для 8-ми разрядов
Dim Дополнительный_символ(общее_количество_разрядов) As Byte ' Переменная, для хранения значения дополнительного символа при "Флаг_дополнительный_символ(n) = 1"
Dim Флаг_дополнительный_символ(общее_количество_разрядов) As Byte ' Флаг сигнализирующий о выводе дополнительных символов для 8-ми разрядов

'-------------------------------------------------------------------------------
'---------------------- Определение подпрограмм ------------------------
'-------------------------------------------------------------------------------

Declare Sub Гашение_разрядов()
Declare Sub Индикация_7seg_led()
Declare Sub Обработка_прерывания_timer0()


'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'------------ Настройка таймера для обновления LED индикации -----------
'-------------------------------------------------------------------------------

Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 0

'-------------------------------------------------------------------------------

' Даём понять компилятору, что будем использовать таймер в режиме таймера (простите за каламбур),
' с предварительным делителем "PRESCALE = 1024".
' и что же мы имеем: f(тактовая частота - 4МГц) / 1024(настраиваемый делитель таймера
' (возможные варианты - 1 , 8 , 64 , 256 , 1024)) = 3906.25 тактов МК будет проходить,
'пока сработает прерывание от переполнения таймера. так, как перед этим мы проштудировали Datasheet
'и выяснили, что "TIMER0" , считает до 256, то 3 906,25 / 256 ~ 15,26 раз в секунду
'будет обновлятся наша Led индикация (при 8-ми разрядной динамической индикации мы получим ~ 15,26 / 8 = "пшик",
'Это Просто Катастрофа). К нашей великой радости, разработчики "Atmel" продумали этот момент,
'у таймера есть различные регистры, которыми можно манипулировать.
'В данном, конкретном случае, нас интересует регистр "TCNT0". Tcnt0 - 8-ми разрядный(от 0 До 255) регистр таймера - счетчика(TIMER0).
'именно он используетя таймером для счета. Вот его мы, и будем использовать.

'-------------------------------------------------------------------------------
' Настройка дополнительного делителя таймера для обновления LED индикации
'-------------------------------------------------------------------------------

Tcnt0 = Значение_регистра_tcnt0_timer0 ' Настройка дополнительного делителя таймера (значение = 250)

'--------------------------------------------------------------------------------

'И чего мы добились, да просто "TIMER0" будет считать не с "0", а с нашего значения.
'Посчитаем ещё раз: 4000000 / 1024 / (256-(значение Tcnt0)) = 3 906,25 / 6 ~ 651
'прерывание "TIMER0" в секунду, или 1000(ms) / 651 ~ 1,536 ms,
'это и будет частотой обновления нашей 7-seg LED индикации.

'Идем дальше.

'Итак, что мы имеем: порты настроены, периодичность обновления установлена,
'а вот, что будет происходить после прерывания "TIMER0", мы не написали,
'исправляемся.

'Назначим подпрограмму, которая будет выполняться после каждого прерывания таймера.

'-------------------------------------------------------------------------------
'----------- Подпрограмма выполняемая после прерывания TIMER0 ----------
'-------------------------------------------------------------------------------

On Timer0 Обработка_прерывания_timer0 ' Переход на подпрограмму после каждого прерывания TIMER0


'----------------------- Первоначальные установки -----------------------
'-------------------------------------------------------------------------------

Переменная_word_1 = 0 ' Значение, которое будем увеличивать
Переменная_word_2 = 50 ' Значение, которое будем уменьшать

Частота_мигания = 200 ' Значение частоты мигания знакоместа на LED дисплее при "Флаг_мигание(n) = 1"
Длительность_горения_при_мигании = Частота_мигания / 2 ' Значение длительности горения знакоместа на LED дисплее при "Флаг_мигание(n) = 1"

'-------------------------------------------------------------------------------
'------------------------ Работа с прерываниями ------------------------
'-------------------------------------------------------------------------------

Enable Timer0 ' Разрешаем работу прерывания по ПЕРЕПОЛНЕНИЮ таймера

Enable Interrupts ' Разрешаем работу всех прерываний

'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'-------------------------- Начало программы ---------------------------
'-------------------------------------------------------------------------------

Do : Nop ' Крутимся между Do и Loop, ожидая прерывания TIMER0, для обновления LED индикации

'--------------------------

Incr Переменная_word_1 ' Считаем, просто для примера
If Переменная_word_1 > 9999 Then Переменная_word_1 = 0 ' Если досчитали до 9999, сбрасываем счетчик
1_канал_выводимые_данные_led = Переменная_word_1 ' Будем выводить в 1 канал (первые 4 разряда)


Decr Переменная_word_2 ' Уменьшаем переменную
2_канал_выводимые_данные_led = Переменная_word_2 ' Будем выводить в 2 канал (первые 4 разряда)

If Переменная_word_2 = 0 Then ' Если досчитали до 0, выводим "stop", и мигаем
Флаг_дополнительный_символ(5) = 1 : Дополнительный_символ(5) = 5 ' символ "S"
Флаг_дополнительный_символ(6) = 1 : Дополнительный_символ(6) = 14 ' символ "t"
Флаг_дополнительный_символ(7) = 1 : Дополнительный_символ(7) = 15 ' символ "o"
Флаг_дополнительный_символ(8) = 1 : Дополнительный_символ(8) = 28 ' символ "P"


Флаг_мигание(5) = 1 ' Мигаем 5 разрядом
Флаг_мигание(6) = 1 ' Мигаем 6 разрядом
Флаг_мигание(7) = 1 ' Мигаем 7 разрядом
Флаг_мигание(8) = 1 ' Мигаем 8 разрядом

End If


Waitms Скорость_изменения_переменной ' Задержка, для частоты смены показаний индикаторов

'--------------------------
Loop
End

'-------------------------------------------------------------------------------
'*******************************************************************************
'***************** Подпрограмма обработки прерывания TIMER0 ****************
'***************** происходит каждые 1,536 ms ****************
'*******************************************************************************
'-------------------------------------------------------------------------------
Обработка_прерывания_timer0:
'-------------------------------------------------------------------------------

Rcall Индикация_7seg_led

'-------------------------------------------------------------------------------
' Делитель TIMER0 = 1000/(4000000/1024/(256-250))=1000/(3 906,25 / 6) = 1,536 ms
'-------------------------------------------------------------------------------

Tcnt0 = Значение_регистра_tcnt0_timer0

'-------------------------------------------------------------------------------
Return
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'*******************************************************************************
'***************** Подпрограмма для обработки LED индикации ****************
'*******************************************************************************
'-------------------------------------------------------------------------------
Индикация_7seg_led:
'-------------------------------------------------------------------------------
'---------- Смотрим, что будем выводить и делаем копию переменной ---------
'-------------------------------------------------------------------------------
Выводимые_данные_led = 1_канал_выводимые_данные_led 

Копия_выводимые_данные_led = Выводимые_данные_led

'-------------------------------------------------------------------------------
'------------------ В цикле разбиваем на разряды, с 4 по 1 -----------------
'-------------------------------------------------------------------------------
For Цикл_led = 4 To 1 Step -1 ' цикл в котором разбивается переменная на 4 числа
Выводимые_данные_led = Копия_выводимые_данные_led Mod 10
Цифра(цикл_led) = Выводимые_данные_led '
Копия_выводимые_данные_led = Копия_выводимые_данные_led / 10 '
Next

'-------------------------------------------------------------------------------
'---------- Смотрим, что будем выводить и делаем копию переменной ---------
'-------------------------------------------------------------------------------
 Выводимые_данные_led = 2_канал_выводимые_данные_led 

Копия_выводимые_данные_led = Выводимые_данные_led

'-------------------------------------------------------------------------------
'------------------ В цикле разбиваем на разряды, с 8 по 5 -----------------
'-------------------------------------------------------------------------------
For Цикл_led = 8 To 5 Step -1 ' цикл в котором разбивается переменная на 4 числа
Выводимые_данные_led = Копия_выводимые_данные_led Mod 10
Цифра(цикл_led) = Выводимые_данные_led '
Копия_выводимые_данные_led = Копия_выводимые_данные_led / 10 '
Next

'-------------------------------------------------------------------------------
'---------------------- Гасим все разряды индикатора -----------------------
'-------------------------------------------------------------------------------
 RCALL Гашение_разрядов ' Переход к подпрограмме гашения индикаторов
'-------------------------------------------------------------------------------
'---- Перебираем разряды, в каждом прерывании выводим следующий разряд -----
'-------------------------------------------------------------------------------
Incr Счетчик_разрядов
'-------------------------------------------------------------------------------
'----- Выбираем разряд для загрузки в обработчик вывода на 7-seg LED ------
'-------------------------------------------------------------------------------
If Счетчик_разрядов > Общее_количество_разрядов Then
Счетчик_разрядов = 1
End If

'------------------------------------------------------------------------------------
' Участок кода отвечающий за мигание, тушение разрядов и выводит точку в нужном месте
'------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'---------------------------- Подготовка к миганию --------------------------
'-------------------------------------------------------------------------------
Incr Счетчик_миганий

If Счетчик_миганий > Частота_мигания Then Счетчик_миганий = 1

'-------------------------------------------------------------------------------
'------------------ Если надо, то мигаем в нужных разрядах ------------------
'-------------------------------------------------------------------------------
If Флаг_мигание(счетчик_разрядов) = 1 And Счетчик_миганий > Длительность_горения_при_мигании Or Флаг_гашение(счетчик_разрядов) = 1 Then ' Если флаг мигания этого разряда выставлен и счетчик > 200
Select Case Счетчик_разрядов
Case 1 To 4
If Тип_индикатора_1_канал = 1 Then
Выводимая_цифра_led = Lookup(11 , Цифры_ok)
' Выводим пустое место в 1 - 4 разрядах
Else
Выводимая_цифра_led = Lookup(11 , Цифры_oa)
' Выводим пустое место в 1 - 4 разрядах
End If
Case 5 To 8
If Тип_индикатора_2_канал = 1 Then
Выводимая_цифра_led = Lookup(11 , Цифры_ok)
' Выводим пустое место в 5 - 8 разрядах
Else
Выводимая_цифра_led = Lookup(11 , Цифры_oa)
' Выводим пустое место в 5 - 8 разрядах
End If
End Select
Else

'-------------------------------------------------------------------------------
'----------------------- Выводим дополнительные симвоы ---------------------
'-------------------------------------------------------------------------------
If Флаг_дополнительный_символ(счетчик_разрядов) = 1 Then
Select Case Счетчик_разрядов
Case 1 To 4
If Тип_индикатора_1_канал = 1 Then
Выводимая_цифра_led = Lookup(дополнительный_символ(счетчик_разрядов)
, Цифры_ok) ' Выводим дополнительный_символ в 1 - 4 разрядах
Else
Выводимая_цифра_led = Lookup(дополнительный_символ(счетчик_разрядов)
, Цифры_oa) ' Выводим дополнительный_символ в 1 - 4 разрядах
End If
Case 5 To 8
If Тип_индикатора_2_канал = 1 Then
Выводимая_цифра_led = Lookup(дополнительный_символ(счетчик_разрядов)
, Цифры_ok) ' Выводим дополнительный_символ в 5 - 8 разрядах
Else
Выводимая_цифра_led = Lookup(дополнительный_символ(счетчик_разрядов)
, Цифры_oa) ' Выводим дополнительный_символ в 5 - 8 разрядах
End If
End Select
Else

'-------------------------------------------------------------------------------
'------- Если не мигаем и ничего другого не выводим, выводим основное ------
'-------------------------------------------------------------------------------
Выводимая_цифра_led = Цифра(счетчик_разрядов)
Select Case Счетчик_разрядов
Case 1 To 4
If Тип_индикатора_1_канал = 1 Then
Выводимая_цифра_led = Lookup(выводимая_цифра_led , Цифры_ok)
' Если не выводим дополнительную информацию, выводим основную в 1 - 4 разрядах
Else
Выводимая_цифра_led = Lookup(выводимая_цифра_led , Цифры_oa)
' Если не выводим дополнительную информацию, выводим основную в 1 - 4 разрядах
End If
Case 5 To 8
If Тип_индикатора_2_канал = 1 Then
Выводимая_цифра_led = Lookup(выводимая_цифра_led , Цифры_ok)
' Если не выводим дополнительную информацию, выводим основную в 5 - 8 разрядах
Else
Выводимая_цифра_led = Lookup(выводимая_цифра_led , Цифры_oa)
' Если не выводим дополнительную информацию, выводим основную в 5 - 8 разрядах
End If
End Select
End If

'-------------------------------------------------------------------------------
'------------- Если необходимо, выводим точку в нужном разряде -------------
'-------------------------------------------------------------------------------
br> style="color: rgb(255, 215, 0)">If Флаг_точка(счетчик_разрядов) = 1 Then
Выводимая_цифра_led = Выводимая_цифра_led Xor &H80 '&H80 или &B10000000 добавляем к выводимой цифре точку
End If
End If

'-------------------------------------------------------------------------------
'--------------------- Загружаем в порт код цифры ----------------------
'-------------------------------------------------------------------------------
' 'ТАК
' ----------------------------------------------------
A = Выводимая_цифра_led.0 ' Сегмент "А"
B = Выводимая_цифра_led.1 ' Сегмент "B"
C = Выводимая_цифра_led.2 ' Сегмент "C"
D = Выводимая_цифра_led.3 ' Сегмент "D"
E = Выводимая_цифра_led.4 ' Сегмент "E"
F = Выводимая_цифра_led.5 ' Сегмент "F"
G = Выводимая_цифра_led.6 ' Сегмент "G"
H = Выводимая_цифра_led.7 ' Сегмент "Точка"

' ----------------------------------------------------
'ИЛИ ТАК (работает чуть быстрее, но если сегменты подключены к разным портам, преимущество в скорости теряется)
' ----------------------------------------------------
' Portb = Выводимая_цифра_led ' Загружаем в порт код цифры
'-------------------------------------------------------------------------------
'--------------- Включаем соответствующий разряд индикатора ----------------
'-------------------------------------------------------------------------------
Select Case Счетчик_разрядов
'-------------------------------------------------------------------------------
'---------------------------- Можно написать так ---------------------------
'-------------------------------------------------------------------------------
Case 1 :
If Тип_индикатора_1_канал = 1 Then ' Если индикатор с ОК, тогда подадим "0" на разряд, а если с ОА, то подадим "1"
Reset Разряд_1
Else
Set Разряд_1
End If

'-------------------------------------------------------------------------------
'----------------- а можно так, работать будет одинаково -------------------
'-------------------------------------------------------------------------------
Case 2 : If Тип_индикатора_1_канал = 1 Then Reset Разряд_2 Else Set Разряд_2
Case 3 : If Тип_индикатора_1_канал = 1 Then Reset Разряд_3 Else Set Разряд_3
Case 4 : If Тип_индикатора_1_канал = 1 Then Reset Разряд_4 Else Set Разряд_4

Case 5 : If Тип_индикатора_2_канал = 1 Then Reset Разряд_5 Else Set Разряд_5
Case 6 : If Тип_индикатора_2_канал = 1 Then Reset Разряд_6 Else Set Разряд_6
Case 7 : If Тип_индикатора_2_канал = 1 Then Reset Разряд_7 Else Set Разряд_7
Case 8 : If Тип_индикатора_2_канал = 1 Then Reset Разряд_8 Else Set Разряд_8
End Select

'-------------------------------------------------------------------------------
Return
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
Гашение_разрядов:
'-------------------------------------------------------------------------------
If Тип_индикатор Константа, для хранения значения общего количества используемых разрядова_1_канал = 1 Then
'-------------------------------------------------------------------------------
'---------------------------- Можно написать так ---------------------------
'-------------------------------------------------------------------------------
 Set Разряд_1 : Set Разряд_2 : Set Разряд_3 : Set Разряд_4 ' Гасим индикаторы ОК,
'-------------------------------------------------------------------------------
'----------------- а можно так, работать будет одинаково -------------------
'-------------------------------------------------------------------------------
 Разряд_1 = 1 ' Гасим индикаторы ОК,
 Разряд_2 = 1
 Разряд_3 = 1
 Разряд_4 = 1

'-------------------------------------------------------------------------------
'------------------------- и так будет работать ----------------------------
'-------------------------------------------------------------------------------
Разряд_1 = 1 : Разряд_2 = 1 : Разряд_3 = 1 : Разряд_4 = 1 ' Гасим индикаторы ОК,
'-------------------------------------------------------------------------------
Else
Reset Разряд_1 : Reset Разряд_2 : Reset Разряд_3 : Reset Разряд_4 ' Гасим индикаторы ОА
End If

If Тип_индикатора_2_канал = 1 Then
Set Разряд_5 : Set Разряд_6 : Set Разряд_7 : Set Разряд_8 ' гасим индикаторы ОК
Else
Reset Разряд_5 : Reset Разряд_6 : Reset Разряд_7 : Reset Разряд_8 ' гасим индикаторы ОА
End If

'-------------------------------------------------------------------------------
Return
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------
Цифры_ok:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'---------------------------- Можно написать так ---------------------------
'-------------------------------------------------------------------------------
' Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7D , &H07 , &H7F , &H6F '0, 1, 2, 3, 4, 5, 6, 7, 8, 9
' Data &H40 , &H00 , &H63 , &H39 , &H78 , &H5C , &H38 , &H74 , &H5E , &H77 '"-", "", "значек градуса", "С", "t", "o", "L", "h", "d", "A"
' Data &H58 , &H31 , &H76 , &H79 , &H50 , &H71 , &H1C , &H73 , &H37 , &H80 '"c", "Г", "Н", "E", "r", "F", "U", "u", "P", "П". "."
' Data &H54 ', &H , &H , &H , &H , &H , &H , &H , &H , &H '"n", "", "", "", "", "", "", "", "", "". ""

'-------------------------------------------------------------------------------
'------- а можно так, выглядит нагляднее, но работать будет одинаково ------
'-------------------------------------------------------------------------------
Data &H3F ' 0 "0"
Data &H06 ' 1 "1"
Data &H5B ' 2 "2"
Data &H4F ' 3 "3"
Data &H66 ' 4 "4"
Data &H6D ' 5 "5"
Data &H7D ' 6 "6"
Data &H07 ' 7 "7"
Data &H7F ' 8 "8"
Data &H6F ' 9 "9"
Data &H40 ' 10 "_"
Data &H00 ' 11 "Пустое место"
Data &H63 ' 12 "Значек градуса"
Data &H39 ' 13 "С"
Data &H78 ' 14 "t"
Data &H5C ' 15 "o"
Data &H38 ' 16 "L"
Data &H74 ' 17 "h"
Data &H5E ' 18 "d"
Data &H77 ' 19 "A"
Data &H58 ' 20 "c"
Data &H31 ' 21 "Г"
Data &H76 ' 22 "H"
Data &H79 ' 23 "E"
Data &H50 ' 24 "r"
Data &H71 ' 25 "F"
Data &H3E ' 26 "U"
Data &H1C ' 27 "u"
Data &H73 ' 28 "P"
Data &H37 ' 29 "П"
Data &H80 ' 30 "Точка"
Data &H54 ' 31 "n"

'-------------------------------------------------------------------------------
Цифры_oa:
'-------------------------------------------------------------------------------
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 '0,1,2,3,4,5,6,7,8,9
Data &HBF , &HFF , &H9C , &HC6 , &H87 , &HA3 , &HC7 , &H8B , &HA1 , &H88 '"-", "", "значек градуса", "С", "t", "o", "L", "h", "d", "A"
Data &HA7 , &HCE , &H89 , &H86 , &HAF , &H8E , &HE3 , &H8C , &HC8 , &H7F '"c", "Г", "Н", "E", "r", "F", "U", "u", "P", "П", "."
Data &HAB ', &H , &H , &H , &H , &H , &H , &H , &H , &H '"n", "", "", "", "", "", "", "", "", "". ""

'-------------------------------------------------------------------------------
'*******************************************************************************
'-------------------------------------------------------------------------------


Видео

Эмуляция в "Протеус"

Исходник + готовая прошивка, Atmega8A

Исходник + готовая прошивка + эмуляция в "Протеус", Atmega88A


Документация ATmega8A

Документация ATmega48PA/88PA/168PA/328P


Продолжение описания вариантов вывода, в процессе!


span style=
Категория: Мои статьи | Добавил: sasha_1973 (05.07.2013) | Автор: Александр
Просмотров: 13353
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Radan Studio © 2024