Advertisement
sparky44

atmega8clock_CA.bas

Jun 27th, 2014
4,446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ' Исходник для индикатора с общим анодом (ОА)
  2. $regfile = "m8def.dat" ' Работаем С Atmega8
  3. $crystal = 8000000 'работаем На Частоте 8 Мгц
  4.  Config Portb = Output
  5.  Config Portd = Output
  6.  Config Portc = Input
  7.  Set Portc.5                                                'Поддтягиваем вход Portc.5 и Portc.4 резисторами к Vcc
  8.  Set Portc.4
  9.  Dim X As Byte , Y As Byte , Cifri(4) As Byte , Cifra As Byte , Tochka As Byte 'рабочие переменные
  10.  
  11. Config Clock = Soft 'Включаем софтовые часы
  12.  _sec = 0 : _min = 0 : _hour = 0 'Вводим время с которого будет производиться отчёт времени
  13.  Config Timer0 = Timer , Prescale = 8 'Включаем таймер0, применяем делитель на 8
  14.  Config Timer1 = Counter , Edge = Falling , Prescale = 1 'Включаем таймер1, назначаем его работу по спаду от кварца 32768 Гц, делитель на 1
  15.  On Timer0 Pulse 'При срабатывании таймера0, переходим на вклатку Pulse
  16.  Enable Interrupts 'Разрешаем все прерывания
  17.  Enable Timer0 'Разрешаем прерывания таймера0
  18.  Config Debounce = 20 'Ставим задержку при нажатии на кнопки в 20 м.Сек.
  19.  
  20. Do 'Основной цикл
  21.  Debounce Pinc.4 , 0 , Minuti , Sub '
  22.  Debounce Pinc.5 , 0 , Chasi , Sub 'Проверяем на нажатие кнопок, если кнопка нажата переходим на соответствуюшую вкладку
  23.  
  24. If _hour = 24 Then _hour = 00 '
  25.  If _min = 60 Then _min = 00 'Проверяем переменные с временем, при переполнении обнуляем их
  26.  
  27. Tochka = _sec Mod 2 '
  28.  Loop 'Конец основного цикла
  29.  
  30. Pulse:
  31.  Incr X 'Увеличиваем переменную Х на еденицу (была 0, стала 1)
  32.  
  33. Cifri(1) = _hour \ 10                                       'Разбиваем двузначное число часов на два однозначных (21 / 10 = 2)
  34.  'Cifri(2) = Cifri(1) * 10                                  ' < Обычные операторы деления и умножения здесь не нужны
  35.  Cifri(2) = _hour Mod 10                                    ' Целочисленное деление рулит, у нас тут не пентиум
  36.  
  37. Cifri(3) = _min \ 10                                        'Проделываем тоже самое с минутами (56 / 10 = 5)
  38.  'Cifri(4) = Cifri(3) * 10                                   '5 * 10 = 50
  39.  Cifri(4) = _min Mod 10                                     '56 – 50 = 6
  40.  
  41. 'Portd = &H00
  42.  Portd = &HFF 'Гасим индикатор
  43.  If X = 1 Then 'Проверяем значение Х, если оно рано 1, выполняем дествие ниже
  44.  'Portb = &H77
  45.  Portb = &H8
  46.  Cifra = Cifri(1)
  47.  End If 'Конец проверки
  48.  If X = 2 Then 'Опять проверяем Х
  49.  'Portb = &H7B
  50.  Portb = &H4 '
  51.  Cifra = Cifri(2) '
  52.  End If '
  53.  If X = 3 Then
  54.  'Portb = &H7D
  55.  Portb = &H2
  56.  Cifra = Cifri(3)
  57.  End If
  58.  If X = 4 Then
  59.  'Portb = &H7E
  60.  Portb = &H1
  61.  Cifra = Cifri(4)
  62.  End If
  63.  If X > 4 Then X = 0 'Последняя проверка, если Х больше 4, обнуляем его
  64.  
  65. 'Select Case Cifra
  66.  'Case 0 : Y = &HEF
  67.  'Case 1 : Y = &H8C
  68.  'Case 2 : Y = &HB7
  69.  'Case 3 : Y = &HBE
  70.  'Case 4 : Y = &HDC
  71.  'Case 5 : Y = &H7E
  72.  'Case 6 : Y = &H7F
  73.  'Case 7 : Y = &HAC
  74.  'Case 8 : Y = &HFF
  75.  'Case 9 : Y = &HFE
  76.  'End Select
  77.  
  78. Select Case Cifra 'Начинаем выбор переменной Cifra
  79.  Case 0 : Y = &H10 'Если Cifra = 0, Y равен &H10 (Dec 16 ; Bin 00010000)
  80.  Case 1 : Y = &H73 '
  81.  Case 2 : Y = &H48 '
  82.  Case 3 : Y = &H41 '
  83.  Case 4 : Y = &H23 '
  84.  Case 5 : Y = &H81 '
  85.  Case 6 : Y = &H80 '
  86.  Case 7 : Y = &H53 '
  87.  Case 8 : Y = &H00 '
  88.  Case 9 : Y = &H1 '
  89.  End Select 'Конец выбора
  90.  Portd = Y 'Приравниваем значение переменной Y к Portb
  91.  'If Portb.2 = 0 And Tochka = 0 Then Set Portd.2 Else Reset Portd.2
  92.  If Portb.2 = 1 And Tochka = 0 Then Reset Portd.2 Else Set Portd.2 'Прверяем условие, если совпало — зажигаем точку, если нет — гасим
  93.  Return ' Возврашаемся
  94.  
  95. Minuti: 'При нажатии кнопки «минуты» обнуляем секунды и увеличиваем переменную _min на 1
  96.  Incr _min
  97.  _sec = 00
  98.  If _min = 60 Then _min = 00
  99.  Return 'Возврашаемся
  100.  
  101. Chasi: 'Тоже, что с минутами
  102.  Incr _hour
  103.  _sec = 00
  104.  If _hour > 23 Then _hour = 00
  105.  Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement