با سلام دوستان من یه برنامه تایمری دارم این برنامه تایمر با 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
دیدگاه