Счётчик обратного счёта с использованием 4-разрядного семисегментного индикатора

Схема подключение 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% рабочая программа.

1 комментарий:

  1. Dim W As Integer - Удалите переменную. Ненужная. Только память занимает!

    ОтветитьУдалить