با سلام دوستان من یه برنامه تایمری دارم این برنامه تایمر با 7سگمنت اند مشترک هستش من این برنامه رو واسه کاتد مشترک نیاز داشتم ممنون میشم کمک کنین تا برنامه رو تغییر بدم برای کاتد مشترک
کد:
'*************************************
'Name : CMC Timer (ver 2.1)
'Type : 4-Digit - 7SEG-CA
'Date ; 1389/9/28
'Designer : ESMAEIL MOHAMMAD ZADEH
'Mobile : 09139545140
'Mail : TASVIRAN.ELECTRONIC@Gmail.com
'*************************************
$regfile = "m8def.dat" : $crystal = 8000000 : Enable Interrupts
Config Debounce = 30
Config Clock = Soft , Gosub = Sectic
Config Timer1 = Timer , Prescale = 64 : Enable Timer1 : On Ovf1 Blinker
'Declare Sub Program
Declare Sub Selector : Declare Sub Show_puse : Declare Sub Show_play
'Config I/O:
Config Portd = Output : 7seg Alias Portd
Config Portb.0 = Output : Dig1 Alias Portb.0
Config Portb.1 = Output : Dig2 Alias Portb.1
Config Portb.2 = Output : Dig3 Alias Portb.2
Config Portb.3 = Output : Dig4 Alias Portb.3
Config Portb.4 = Output : Motor Alias Portb.4
Config Portb.5 = Output : Seco Alias Portb.5
Config Portc.5 = Output : Dp Alias Portc.5
Config Pinc.0 = Input : Up Alias Pinc.0
Config Pinc.1 = Input : Dn Alias Pinc.1
Config Pinc.2 = Input : Set_ Alias Pinc.2
Config Pinc.4 = Input : Sw Alias Pinc.4
'Var:
Dim A As Byte , B As Byte , Puse As Byte , Sel As Byte , Run As Bit
Dim S As Byte , Button As Bit , Change As Bit
Dim M As Byte , H As Byte , I As Byte
Dim S2 As Byte , M2 As Byte , H2 As Byte
Dim Num As Byte , Yek As Byte , Dah As Byte
'Eram Var:
Dim Em As Eram Byte , Eh As Eram Byte
Dim Em2 As Eram Byte , Eh2 As Eram Byte
Dim Epuse As Eram Byte
'Defult:
If Em = 255 Then Em = 0 : If Eh = 255 Then Eh = 0
If Em2 = 255 Then Em2 = 0 : If Eh2 = 255 Then Eh2 = 0
If Epuse = 255 Then Epuse = 1
M = Em : H = Eh : M2 = Em2 : H2 = Eh2 : Puse = Epuse
S2 = 0 : A = 0 : B = 0 : Run = 0 : Sel = 0 : Button = 0
'************************************ MAIN PROGRAM *****************************
Begin:
Change = 0
Main:
Select Case Puse
Case 0:
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Case 1:
Call Show_puse
End Select
Gosub Check_key
If Sel <> 0 Then
Call Selector
A = 0
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Loop Until A = 1
End If
If Run = 1 Then Jmp Motor_driver
If M <> 0 Or H <> 0 Then
If S2 = 0 And M2 = 0 And H2 = 0 Then Jmp Motor_driver
End If
If B >= 10 Then : Sel = 0 : Change = 0 : End If
JMP Main
'************************************* CHECK KEY *******************************
Check_key:
If Puse = 0 Then
Debounce Set_ , 1 , Setting , Sub
Debounce Dn , 1 , Decrease , Sub
End If
Debounce Up , 1 , Increase , Sub
Return
'************************************* MINUTE **********************************
Minute:
Dah = Num / 10 : Yek = Dah * 10 : Yek = Num - Yek
Dig1 = 1 : Dp = 1
7seg = Lookup(yek , Dta)
Waitms 2
Dig1 = 0 : Dig2 = 1 : Dp = 1
7seg = Lookup(dah , Dta)
Waitms 2
Dig2 = 0
Return
'************************************* HOUR ************************************
Hour:
Dah = Num / 10 : Yek = Dah * 10 : Yek = Num - Yek
Dig3 = 1 : Dp = 0
7seg = Lookup(yek , Dta)
Waitms 2
Dig3 = 0 : Dig4 = 1 : Dp = 1
7seg = Lookup(dah , Dta)
Waitms 2
Dig4 = 0
Return
'************************************* MOTOR DRIVER ****************************
Motor_driver:
B = 0 : S2 = 0 : M2 = 0 : H2 = 0 : Run = 0
Waitms 4
Em2 = M2 : Waitms 4
Eh2 = H2
Motor = 1
If Sw = 0 Then
Do
If B >= 20 Then
S2 = 0 : Reset Motor : Gosub Setpoint : Goto Begin
End If
Call Show_play
Loop Until Sw = 1
S2 = 0 : M2 = 0 : H2 = 0 : Motor = 0 : Gosub Setpoint : Goto Begin
Else
Do
If B >= 15 Then
S2 = 0 : Reset Motor : Gosub Setpoint : Goto Begin
End If
Call Show_play
If S >= 3 Then : Button = 1 : End If
Loop Until Button = 1
Button = 0
End If
jmp Motor_driver
'************************************* DECREASE ********************************
Decrease:
B = 0
Select Case Sel
Case 0:
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
If B >= 3 Then
Puse = 1 : Waitms 3
Epuse = 1 : Exit Do
End If
Loop Until Dn = 0
Case 1:
Change = 1
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
If B >= 2 Then
B = 3
For I = 1 To 125 'WAITMS 500
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Next I
M = M - 1
If M = 255 Then M = 59 : M2 = M
End If
Loop Until Dn = 0
M = M - 1
If M = 255 Then M = 59 : M2 = M
Case 2:
Change = 1
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
If B >= 2 Then
B = 3
For I = 1 To 125 'WAITMS 500
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Next I
H = H - 1
If H = 255 Then H = 99 : H2 = H
End If
Loop Until Dn = 0
H = H - 1
If H = 255 Then H = 99 : H2 = H
End Select
Return
'************************************* INCREASE ********************************
Increase:
B = 0
Select Case Sel
Case 0:
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
If B >= 3 Then
If Puse = 1 Then
Puse = 0 : Waitms 3
Epuse = 0 : Exit Do
Else
Run = 1 : Exit Do
End If
End If
Loop Until Up = 0
Case 1:
Change = 1
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
If B >= 2 Then
B = 3
For I = 1 To 125 'WAITMS 500
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Next I
M = M + 1
If M > 59 Then M = 0 : M2 = M
End If
Loop Until Up = 0
M = M + 1
If M > 59 Then M = 0 : M2 = M
Case 2:
Change = 1
Do
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
If B >= 2 Then
B = 3
For I = 1 To 125 'WAITMS 500
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Next I
H = H + 1
If H > 99 Then H = 0 : H2 = H
End If
Loop Until Up = 0
H = H + 1
If H > 99 Then H = 0 : H2 = H
End Select
Return
'************************************* SETTING *********************************
Setting:
B = 0
Select Case Sel
Case 0:
Do
If B >= 3 Then : Sel = 1 : Exit Do : End If
Num = M2 : Gosub Minute
Num = H2 : Gosub Hour
Loop Until Set_ = 0
B = 0
Case Else:
Sel = Sel + 1
If Sel > 2 Then
Sel = 0
If Change = 1 Then
S2 = 0 : Sel = 0 : Change = 0 : Waitms 4
Em = M : Waitms 4
Eh = H
S2 = 0 : M2 = M : H2 = H
Waitms 4
Em2 = M2 : Waitms 4
Eh2 = H2
End If
End If
End Select
Return
'************************************* SETPOINT ********************************
Setpoint:
S2 = 0 : M2 = M : H2 = H
Waitms 4
Em2 = M2 : Waitms 4
Eh2 = H2
Return
'************************************* SUB PROGRAM *****************************
Sub Show_puse
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 1 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
7seg = &H8C 'P
Waitms 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 0 : Dig2 = 1 : Dig3 = 0 : Dig4 = 0 : Dp = 1
7seg = &HC0 'O
Waitms 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 1 : Dig4 = 0 : Dp = 1
7seg = &H87 't
Waitms 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 1 : Dp = 1
7seg = &H92 'S
Waitms 1
End Sub
Sub Show_play
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 1 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
7seg = &H91 'Y
Waitms 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 0 : Dig2 = 1 : Dig3 = 0 : Dig4 = 0 : Dp = 1
7seg = &H88 'A
Waitms 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 1 : Dig4 = 0 : Dp = 1
7seg = &HC7 'L
Waitms 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 0 : Dp = 1
Waitus 1
Dig1 = 0 : Dig2 = 0 : Dig3 = 0 : Dig4 = 1 : Dp = 1
7seg = &H8C 'P
Waitms 1
End Sub
'-------------------------------------------------------------------------------
Sub Selector
Select Case Sel
Case 1: 'Blink Minute
A = 0
Do
Dig1 = 0 : Dig2 = 0
Num = H2 : Gosub Hour : Gosub Check_key
Loop Until A = 1
Case 2: 'Blink Hour
A = 0
Do
Dig3 = 0 : Dig4 = 0
Num = M2 : Gosub Minute : Gosub Check_key
Loop Until A = 1
End Select
End Sub
'************************************* SECTIC **********************************
Sectic:
B = B + 1
If Sw = 0 Then : Incr S : Else : S = 0 : End If
If Sel = 0 And Puse = 0 Then
Toggle Seco
If M <> 0 Or H <> 0 Then
S2 = S2 + 1
If S2 > 59 Then
S2 = 0
If M2 => 0 Then
M2 = M2 - 1
If M2 = 255 Then
M2 = 59
If H2 > 0 Then H2 = H2 - 1
End If
End If
Waitms 2
Em2 = M2 : Waitms 2
Eh2 = H2
End If
End If
Else
Seco = 1
End If
Return
'*******************************************************************************
Blinker:
Incr A
If A = 2 Then A = 0
Return
'*******************************************************************************
Dta:
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90
'END END END END END END END END END END END END END END END END END END







دیدگاه