Прошу прощения со своими ламерскими вопросами. Только начал разбираться с программированием. По нужде. Делаю преамп с управлением на АМега8515. Исходники на буржуйском форуме нашел. Под свою схему пытаюсь адаптировать, но никак не могу победить следующее. При включении индикатор показывает "исходное положение": верхняя строка - выбранный вход, нижняя строка - уровень громкости. После нажатия кнопки меню - вызывается подпрограмма и на этом месте как бы "зависает". Т.е. хочу чтоб из любого места любой подпрограммы через сек.5 выходило обратно в "исходное положение". Как организовать?
If Pwr = 1 Then Getrc5(address , Command) 'read if we have remote ir command If Address = 8 Then Command = Command And &B01111111 End If Select Case Command '---- this codes are for my remote , change code to your suit ! ---------------- Case 32 : Call Shiftlf 'remote command code for CH up Case 33 : Call Shiftrt 'remote command code for CH down Case 17 : Call Volup 'remote command code for Vol + Case 16 : Call Voldn 'remote command code for Vol - Case 13 : Call Mute 'remote command code for Mute Case 12 : Call Pwr_onof 'remote command code for On/Off End Select A = Pind.0 'On/Off button B = Pind.4 'Menu button If A = 0 Then 'now we read the push buttons for command Waitms 2 Call Pwr_onof 'button On/Off presed End If If B = 0 Then Waitms 2 Call Menu 'button Menu presed End If End If
If Pwr = 0 Then A = Pind.0 'On/Off button Getrc5(address , Command) 'read if we have remote ir command If Address = 8 Then Command = Command And &B01111111 End If Select Case Command '---- this codes are for my remote , change code to your suit ! ---------------- Case 12 : Call Pwr_onof 'remote command code for On/Off End Select If A = 0 Then 'now we read the push buttons for command Waitms 2 Call Pwr_onof 'button On/Off presed End If End If Loop End '-------------------Int_0------------------------ Int_0: Disable Int0 If Encb = 0 Then If G = 0 Then Call Volup End If If G = 1 Then Call Shiftlf End If Else If G = 0 Then Call Voldn End If If G = 1 Then Call Shiftrt End If End If Enable Int0 Gifr = 64 'asta e cea mai mare smecherie ! Return '-----------Pwr_onof----------------- Sub Pwr_onof: Pwr = Not Pwr If Pwr = 1 Then Call Poweron Else Call Poweroff End If End Sub '------Poweron------------------------ Sub Poweron: Set Portb.3 'unmute PGA2310 Set Portd.6 'power relay on Set Portd.5 Display On 'turn display on Cls Lcd " Power On ! " Waitms 500 Cls Porta = Inp_sel Call Af_sel Home Lowerline If L > 192 Then Lcd "Volume +" ; Gain1 ; " dB " Else Lcd "Volume " ; Gain1 ; " dB " End If Wait 2 Enable Int0 End Sub '-------Poweroff---------------------- Sub Poweroff: Reset Portb.3 'mute PGA2310 Reset Portd.6 'power relay off Reset Portd.5 Display Off 'turn display off Porta = &B00000000 ' mute Waitms 500 Disable Int0 End Sub '---------shift input Left---------- Sub Shiftlf: If Inp_sel >= 1 And Inp_sel < 8 Then Rotate Inp_sel , Left End If Porta = Inp_sel Call Af_sel Waitms 200 End Sub '--------shift input right---------- Sub Shiftrt: If Inp_sel >= 2 And Inp_sel < 9 Then Rotate Inp_sel , Right End If Porta = Inp_sel Call Af_sel Waitms 200 End Sub '-------bring volume up----------- Sub Volup: If L >= 86 Then If L = 256 Then L = 255 End If If R = 256 Then R = 255 End If Call Spio L = L + 1 R = R + 1 Gain = L / 2 Gain1 = -96 + Gain Else Call Spio L = L + 5 R = R + 5 Gain = L / 2 Gain1 = -96 + Gain End If Home Lowerline If L > 192 Then Lcd "Volume +" ; Gain1 ; " dB " Else Lcd "Volume " ; Gain1 ; " dB " End If Waitms 1 End Sub '--------bring volume down---------- Sub Voldn: If L <= 86 Then If L = 1 Then L = 6 End If If R = 1 Then R = 6 End If Call Spio L = L - 5 R = R - 5 Gain = L / 2 Gain1 = -96 + Gain Else Call Spio L = L - 1 R = R - 1 Gain = L / 2 Gain1 = -96 + Gain End If Home Lowerline If L > 192 Then Lcd "Volume +" ; Gain1 ; " dB " Else Lcd "Volume " ; Gain1 ; " dB " End If Waitms 1 End Sub '------Af_sel--------------------------- Sub Af_sel: Home Upper If Inp_sel = 1 Then Lcd "PC selected" End If If Inp_sel = 2 Then Lcd "CD selected" End If If Inp_sel = 4 Then Lcd "AUX selected" End If End Sub '------- Mute ---------- Sub Mute: Mut = Not Mut If Mut = 1 Then Set Portb.3 Porta = Inp_sel Home Lowerline If L > 192 Then Lcd "Volume +" ; Gain1 ; " dB " Else Lcd "Volume " ; Gain1 ; " dB " End If Wait 1 Else Porta = &B00000000 Reset Portb.3 Home Lowerline Lcd " MUTING " Wait 1 End If End Sub '-----Send data to PGA2310------ Sub Spio: Spiinit Spiout L , 1 Spiout R , 1 End Sub '-----------Menu----------------- Sub Menu: G = G + 1 If G > 1 Then G = 0 End If If G = 0 Then Cls Home Lower Lcd " Level Volume " Waitms 200 End If If G = 1 Then Cls Home Upper Lcd " Select Input " Waitms 200 End If End Sub
Сообщение отредактировал discar - Вторник, 16.07.2013, 07:11