Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ' Исходник для индикатора с общим анодом (ОА)
- $regfile = "m8def.dat" ' Работаем С Atmega8
- $crystal = 8000000 'работаем На Частоте 8 Мгц
- Config Portb = Output
- Config Portd = Output
- Config Portc = Input
- Set Portc.5 'Поддтягиваем вход Portc.5 и Portc.4 резисторами к Vcc
- Set Portc.4
- Dim X As Byte , Y As Byte , Cifri(4) As Byte , Cifra As Byte , Tochka As Byte 'рабочие переменные
- Config Clock = Soft 'Включаем софтовые часы
- _sec = 0 : _min = 0 : _hour = 0 'Вводим время с которого будет производиться отчёт времени
- Config Timer0 = Timer , Prescale = 8 'Включаем таймер0, применяем делитель на 8
- Config Timer1 = Counter , Edge = Falling , Prescale = 1 'Включаем таймер1, назначаем его работу по спаду от кварца 32768 Гц, делитель на 1
- On Timer0 Pulse 'При срабатывании таймера0, переходим на вклатку Pulse
- Enable Interrupts 'Разрешаем все прерывания
- Enable Timer0 'Разрешаем прерывания таймера0
- Config Debounce = 20 'Ставим задержку при нажатии на кнопки в 20 м.Сек.
- Do 'Основной цикл
- Debounce Pinc.4 , 0 , Minuti , Sub '
- Debounce Pinc.5 , 0 , Chasi , Sub 'Проверяем на нажатие кнопок, если кнопка нажата переходим на соответствуюшую вкладку
- If _hour = 24 Then _hour = 00 '
- If _min = 60 Then _min = 00 'Проверяем переменные с временем, при переполнении обнуляем их
- Tochka = _sec Mod 2 '
- Loop 'Конец основного цикла
- Pulse:
- Incr X 'Увеличиваем переменную Х на еденицу (была 0, стала 1)
- Cifri(1) = _hour \ 10 'Разбиваем двузначное число часов на два однозначных (21 / 10 = 2)
- 'Cifri(2) = Cifri(1) * 10 ' < Обычные операторы деления и умножения здесь не нужны
- Cifri(2) = _hour Mod 10 ' Целочисленное деление рулит, у нас тут не пентиум
- Cifri(3) = _min \ 10 'Проделываем тоже самое с минутами (56 / 10 = 5)
- 'Cifri(4) = Cifri(3) * 10 '5 * 10 = 50
- Cifri(4) = _min Mod 10 '56 – 50 = 6
- 'Portd = &H00
- Portd = &HFF 'Гасим индикатор
- If X = 1 Then 'Проверяем значение Х, если оно рано 1, выполняем дествие ниже
- 'Portb = &H77
- Portb = &H8
- Cifra = Cifri(1)
- End If 'Конец проверки
- If X = 2 Then 'Опять проверяем Х
- 'Portb = &H7B
- Portb = &H4 '
- Cifra = Cifri(2) '
- End If '
- If X = 3 Then
- 'Portb = &H7D
- Portb = &H2
- Cifra = Cifri(3)
- End If
- If X = 4 Then
- 'Portb = &H7E
- Portb = &H1
- Cifra = Cifri(4)
- End If
- If X > 4 Then X = 0 'Последняя проверка, если Х больше 4, обнуляем его
- 'Select Case Cifra
- 'Case 0 : Y = &HEF
- 'Case 1 : Y = &H8C
- 'Case 2 : Y = &HB7
- 'Case 3 : Y = &HBE
- 'Case 4 : Y = &HDC
- 'Case 5 : Y = &H7E
- 'Case 6 : Y = &H7F
- 'Case 7 : Y = &HAC
- 'Case 8 : Y = &HFF
- 'Case 9 : Y = &HFE
- 'End Select
- Select Case Cifra 'Начинаем выбор переменной Cifra
- Case 0 : Y = &H10 'Если Cifra = 0, Y равен &H10 (Dec 16 ; Bin 00010000)
- Case 1 : Y = &H73 '
- Case 2 : Y = &H48 '
- Case 3 : Y = &H41 '
- Case 4 : Y = &H23 '
- Case 5 : Y = &H81 '
- Case 6 : Y = &H80 '
- Case 7 : Y = &H53 '
- Case 8 : Y = &H00 '
- Case 9 : Y = &H1 '
- End Select 'Конец выбора
- Portd = Y 'Приравниваем значение переменной Y к Portb
- 'If Portb.2 = 0 And Tochka = 0 Then Set Portd.2 Else Reset Portd.2
- If Portb.2 = 1 And Tochka = 0 Then Reset Portd.2 Else Set Portd.2 'Прверяем условие, если совпало — зажигаем точку, если нет — гасим
- Return ' Возврашаемся
- Minuti: 'При нажатии кнопки «минуты» обнуляем секунды и увеличиваем переменную _min на 1
- Incr _min
- _sec = 00
- If _min = 60 Then _min = 00
- Return 'Возврашаемся
- Chasi: 'Тоже, что с минутами
- Incr _hour
- _sec = 00
- If _hour > 23 Then _hour = 00
- Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement