Схема подключение 4-разрядного семисегментного индикатора к
микроконтроллеру.
Программа на BASCOM-AVR
для микроконтроллера ATtiny2313
'Счётчик обратного счёта
'Индикатор: 4-разрядный семисегментный
'Микроконтроллер: ATtiny2313
'В исполнении блогера - технолога 178654.blogspot.ru
$Regfile="attiny2313.dat" 'Адрес файла библиотеки
$Crystal=4000000 'Частота
$hwstack=40 'Стек аппаратный
$swstack=16 'Стек программный
$framesize=32 'Размер фрейма
'------------------------------------------------------------------
Dim W As Integer
Dim N1 As Byte
Dim N2 As Byte
Dim N3 As Byte
Dim N4 As Byte
Dim M1 As Integer
Dim M2 As Integer
Dim M3 As Integer
Dim M4 As Integer
Dim i1 As Integer
Dim B1 As Byte
Dim W_Minute As Integer
Dim W_Seconds As Integer
W_Minute = 10
W_Seconds = 0
i1 = 0
'------------------------------------------------------------------
Config PortA.0 = Output
Config PortA.1 = Output
Config PortA.2 = Input
Config Portb = Output 'Установка PB7..PB0 на выход (LED a,b,c,d,e,f,g)
Config PortD = Output 'Установка PD7..PD0 на выход (Вкл/выкл индикаторов)
'------------------------------------------------------------------
'!При симуляции таймера не забудьте установить галочку Sim Timers
Config Timer0 = Timer , Prescale = 1024, Clear Timer = 0 'Таймер
B1 = 15 'Мягкая настройка хода времени.Скорость счёта от 0 до 255
Timer0 = B1 'Чем ближе к 255 тем быстрее он будет срабатывать.
On Timer0 Timer_0_int: 'при 255 переход к подпрограмме
Enable Timer0 'разрешить прерывание
Start Timer0 'Старт таймера
Enable Interrupts 'Разрешить все прерывания
' Основной цикл программы--------------------------------------------------------
Do
M1 = W_Minute
M2 = M1
M3 = W_Seconds
M4 = M3
If W_Seconds >= 0 Then
M1 = M1 Mod 100 'обработка первого числа
M1 = M1 / 10
N1 = Abs(m1)
'Print N1
M2 = M2 Mod 10 'обработка второго числа
N2 = Abs(m2)
'Print N2
M3 = M3 Mod 100 ' обработка третьего числа
M3 = M3 / 10
N3 = Abs(m3)
'Print N3
M4 = M4 Mod 10 ' обработка четвертого числа
N4 = Abs(m4)
'Print N4
else
W_Seconds = 59
DECR W_Minute 'Уменьшить переменную на единицу.
End If
'ВЫВОД ДАННЫЕ В ПОРТЫ
PortD = &B00001000 'четвертое число
Portb= Lookup(N4,DTA)
'Print Portb
Waitms 1
PortD = &B00000100 'третье число
Portb= Lookup(N3,DTA)
'Print Portb
Waitms 1
PortD = &B00000010 'второе число
Portb= Lookup(N2,DTA)
'Print Portb
Waitms 1
PortD = &B00000001 'первое число
Portb= Lookup(N1,DTA)
'Print Portb
Waitms 1
Loop
End
'Подпрограмма таймера
Timer_0_int:
Timer0 = B1
INCR i1
If i1 >= 4 Then 'Грубая настройка хода времени
DECR W_Seconds 'Уменьшить переменную на единицу.
i1 = 0
End If
If W_Minute =< 0 and W_Seconds =< 0 Then STOP TIMER0
Return
'блок непосредственных данных в памяти команд
DTA:
Data &H3F,&H06,&H5B,&H4F,&H66,&H6D,&H7D,&H07,&H7F,&H6F '0, 1, 2, 3, 4, 5, 6, 7, 8, 9
!100% рабочая программа.
Dim W As Integer - Удалите переменную. Ненужная. Только память занимает!
ОтветитьУдалить