Подскажите как соединить этот код с семисегментником.
Заранее благодарен.
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Config Portd = Output
Config Portb = Output
'Config Portc = Output
'Config Portb.7 = Input
A Alias Portd.5
B Alias Portd.0
C Alias Portd.3
D Alias Portb.1
E Alias Portd.7
F Alias Portd.6
G Alias Portd.4
Dp Alias Portd.2 'Тут вписываем порты к которым подключены сегменты индикатора
Dig1 Alias Portb.2
Dig2 Alias Portd.1
Dim W As Byte , Z As Byte , Y As Byte , I As Byte , Chislo(8) As Long , Viv_peremennaya As Long , Temp_print As Long ' задаем переменные
Config Timer0 = Timer , Prescale = 8 : On Timer0 Pulse : ' конфигурируем таймер 0 и назначаем подпрограмму которая выполняется при переполнении таймера
Enable Interrupts : Enable Timer0 ' разрешаем прерывания и таймер 0
'Sub Tahometer
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising 'Stop Timer1 'задание начальных усло
'Stop Timer1
Timer1 = 0
Compare1a = 2
Dim Wtime As Byte
Dim Rpm As Single
Dim Rpm2 As Integer
On Capture1 Captmr 'Captmr
Enable Interrupts
Enable Capture1
Wtime = 100
Do
Waitms Wtime
'Locate 1 , 1
'If Pinb.7 = 1 Then
'Rpm = Locate 7
Rpm = Capture1 * 0.008
Rpm = Rpm / 0.008
Rpm = 60 / Rpm
Rpm2 = Rpm / 0.000008
Incr Temp_print ' переменная, которая будет отображатся на семисегментнике.
'Waitms 100
'End If
Loop
Captmr:
'Stop Timer1
Timer1 = 0
Return
End 'Sub
Pulse:
Stop Timer0
Temp_print = Rpm2
For I = 1 To 4 ' цикл в котором разбивается переменная на отдельные числа от 0 до 9
Chislo(i) = Temp_print Mod 10 ' заносим в масив последнюю цифру от числа Temp_print(12345678 mod 10 = 8)
Temp_print = Temp_print / 10 ' отсекаем последнюю цифру от числа Temp_print (12345678/10=1234567)
Next ' останавливаем таймер 0
Set Dig1 : Set Dig2
Incr W : If W > 4 Then W = 1 ' выбираем какую цифру сейчас включать
Y = 0
Gosub Look : A = Z ' переходим к подпрограмме Look, которая определяет нужно ли сейчас загорется сегменту А
Gosub Look : B = Z
Gosub Look : C = Z
Gosub Look : D = Z
Gosub Look : E = Z
Gosub Look : F = Z
Gosub Look : G = Z
Select Case W ' включаем цифру которую выбрали (w). Подаем минус на общий провод конкретной цифры
Case 1 : Reset Dig1
Case 2 : Reset Dig2
End Select
Start Timer0 ' запускаем таймер0
Return ' возвращаемся к выполнению основной программы
Look: ' подпрограмма которая определяет нужно ли сейчас гореть сегменту, который вызвал эту подпрограмму
Z = Chislo(w) * 7 : Z = Y + Z ' определяем порядковый номер числа из таблици DATA. W - это цифра которую будем выводить 0..1..2..3.......9, Y это номер сегмента (A=0 B=1 C=2...G=7)
Z = Lookup(z , Cifri) ' выбираем из таблици включить или выключить нужный сегмент
Incr Y 'Y это номер сегмента (A=0 B=1 C=2...)
Return 'возвращаемся на место откуда сюда прислали
Cifri:
Data 1 , 1 , 1 , 1 , 1 , 1 , 0 '0
Data 0 , 1 , 1 , 0 , 0 , 0 , 0 '1
Data 1 , 1 , 0 , 1 , 1 , 0 , 1 '2
Data 1 , 1 , 1 , 1 , 0 , 0 , 1 '3
Data 0 , 1 , 1 , 0 , 0 , 1 , 1 '4
Data 1 , 0 , 1 , 1 , 0 , 1 , 1 '5
Data 1 , 0 , 1 , 1 , 1 , 1 , 1 '6
Data 1 , 1 , 1 , 0 , 0 , 0 , 0 '7
Data 1 , 1 , 1 , 1 , 1 , 1 , 1 '8
Data 1 , 1 , 1 , 1 , 0 , 1 , 1 '9