Srccodetst
From MCS Wiki
'-------------------------------------------------------------- ' Thomas Jensen | uCtrl.net '-------------------------------------------------------------- ' file: KEYPAD_v.1.0 ' date: 17/11/2007 '-------------------------------------------------------------- $regfile = "attiny2313.dat" $crystal = 8000000 Config Portd = Input Config Portb = Output Config Watchdog = 1024 Dim Lifesignal As Byte , Number As Byte , Row As Byte , Button As Byte Dim Code1 As Integer , Code2 As Integer , Code3 As Byte , Code4 As Byte , Nr As Byte Dim Redled As Byte , Greenled As Byte , Amberled As Byte , Code As Integer Dim Code_p As Integer , Kanal1 As Byte , Kanal2 As Byte , Timeout As Byte , Feil As Integer Dim Eeprom As Eram Integer , Program As Byte , Feil_a As Byte 'Inputs 'PD2 Keypad R1 'PD3 Keypad R2 'PD4 Keypad R3 'PD5 Keypad R4 'Outputs 'PB0 Keypad K1 'PB1 Keypad K2 'PB2 Keypad K3 'PB3 Mode 1 signal 'PB4 Mode 2 signal 'PB5 Green LED indicator 'PB6 Red LED indicator 'PB7 Lifesignal Code_p = Eeprom 'Get stored code If Code_p < 0 Then Code_p = 1234 'If no code use default Number = 255 'Boot Portb = 0 Start Watchdog Main: 'Read keypad If Button = 0 And Feil = 0 And Number = 255 Then If Row = 0 Then 'Keyboard row 1 Portb.0 = 1 If Pind.5 = 1 Then Number = 10 If Pind.4 = 1 Then Number = 7 If Pind.3 = 1 Then Number = 4 If Pind.2 = 1 Then Number = 1 Portb.0 = 0 End If If Row = 1 Then 'Keyboard row 2 Portb.1 = 1 If Pind.5 = 1 Then Number = 0 If Pind.4 = 1 Then Number = 8 If Pind.3 = 1 Then Number = 5 If Pind.2 = 1 Then Number = 2 Portb.1 = 0 End If If Row = 2 Then 'Keyboard row 3 Portb.2 = 1 If Pind.5 = 1 Then Number = 11 If Pind.4 = 1 Then Number = 9 If Pind.3 = 1 Then Number = 6 If Pind.2 = 1 Then Number = 3 Portb.2 = 0 End If Row = Row + 1 'Next row If Row > 2 Then Row = 0 End If 'Reset button status Portb.0 = 1 Portb.1 = 1 Portb.2 = 1 If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 Then Button = 0 Portb.0 = 0 Portb.1 = 0 Portb.2 = 0 'Get code If Number <> 255 Then Button = 1 Select Case Nr Case 0 'Digit 1 Code1 = Number Code1 = Code1 * 1000 Code = Code1 + Code Amberled = 4 Case 1 'Digit 2 Code2 = Number Code2 = Code2 * 100 Code = Code2 + Code Amberled = 4 Case 2 'Digit 3 Code3 = Number Code3 = Code3 * 10 Code = Code3 + Code Amberled = 4 Case 3 'Digit 4 Code4 = Number Code = Code4 + Code Amberled = 4 Case 4 If Program = 1 Then 'Program new code Select Case Number Case 11 'Accept Code_p = Code Eeprom = Code_p Greenled = 60 Case Else 'Reject Redled = 30 End Select Number = 255 Program = 0 Gosub Reset_code_read Goto Main End If If Code = Code_p Then 'Code correct Feil_a = 0 Select Case Number Case 0 'New code Program = 1 Amberled = 40 Case 10 'Channel 1 Kanal1 = 20 Greenled = 20 Case 11 'Channel 2 Kanal2 = 20 Greenled = 40 Case Else 'Reject Redled = 30 End Select Else 'Code failed Redled = 30 Feil_a = Feil_a + 1 End If Timeout = 0 Number = 255 Gosub Reset_code_read Goto Main End Select Nr = Nr + 1 Number = 255 End If 'Timeout when entering code If Nr > 0 And Timeout = 0 Then Timeout = 201 If Timeout > 0 Then Timeout = Timeout - 1 If Timeout = 1 And Nr <> 0 Then Gosub Reset_code_read Number = 255 Redled = 30 End If 'Error handling, 3 wrong codes If Feil_a > 3 And Feil = 0 Then Feil = 1200 Feil_a = 0 End If If Feil > 0 And Redled = 0 Then Redled = 4 If Feil > 0 Then Feil = Feil - 1 'AmberLED If Amberled > 0 Then Greenled = Amberled Redled = Amberled Amberled = 0 End If 'GreenLED If Greenled > 2 Then Portb.5 = 1 If Greenled = 2 Then Portb.5 = 0 If Greenled > 0 Then Greenled = Greenled - 1 'RedLED If Redled > 2 Then Portb.6 = 1 If Redled = 2 Then Portb.6 = 0 If Redled > 0 Then Redled = Redled - 1 'Channel1 If Kanal1 = 20 Then Portb.3 = 1 If Kanal1 = 1 Then Portb.3 = 0 If Kanal1 > 0 Then Kanal1 = Kanal1 - 1 'Channel2 If Kanal2 = 20 Then Portb.4 = 1 If Kanal2 = 1 Then Portb.4 = 0 If Kanal2 > 0 Then Kanal2 = Kanal2 - 1 'Lifesignal If Lifesignal > 0 Then Lifesignal = Lifesignal - 1 If Lifesignal = 12 Then Portb.7 = 1 If Lifesignal = 1 Then Portb.7 = 0 If Lifesignal = 0 Then Lifesignal = 41 Reset Watchdog Waitms 50 Goto Main 'Loop cycle End Reset_code_read: 'Reset code param. Nr = 0 Code = 0 Code1 = 0 Code2 = 0 Code3 = 0 Code4 = 0 Return End