Counting down while gradually flashing and waiting for a button push.


Results 1 to 12 of 12

Threaded View

  1. #3
    Join Date
    May 2010
    Posts
    26


    Did you find this post helpful? Yes | No

    Default One Version

    This code waits for one of 3 buttons to be pushed. Depending on which button is being pushed zaehler (equals z) changes.

    "If Timerzaehler = 781 AND Zeit = 400 Then" means that 781 times interrupt timer0 should be close to 400ms being elapsed.

    Having done all the counting, a song is being played which should be stopped by pressing a button.

    Code:
      Starten:
        'PICProg-Einstellungen
          DEFINE OSC 4
          INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System
          INCLUDE "ReEnterPBP.bas"     ' Include if using PBP interrupts
          INCLUDE "Elapsed_INT.bas"    ' Elapsed Timer Routines
        'Initialisierung
          INTCON = 0
          CMCON = 7
          TRISB = %01111000
          TRISA = %11111111
        'Variablen
          Position VAR WORD
          TimerZaehler VAR WORD
          Lied_Zuende VAR BIT
          Zaehler VAR WORD
          Zeit VAR WORD
          Prozent VAR WORD
          Zaehlervariable VAR Word
          LiedPausenzeit Var Word
          WH Var Word
          AePosition Var Word
          LED_Lied VAR BIT
        'Hardwarezuweisungen
          Aufnahme_Taster VAR PORTA.2
          Stop_Taster VAR PORTA.3
          Abspielen_Taster VAR PORTA.4
          LED_Aufnahme VAR PORTB.0
          LED_Stop VAR PORTB.1
          LED_Start VAR PORTB.2
          Lautsprecher VAR PORTB.7
        'Konstanten
          Ja CON 1
          Nein CON 0
          Gedrueckt CON 0
          Frei CON 1
          Aus CON 0
          An CON 1 
          LED CON 0
          Lied CON 1   
    
    ASM
    INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
            INT_Handler   TMR0_INT,  _LEDAnAus,   PBP,  yes
        endm
        INT_CREATE               ; Creates the interrupt processor
    ENDASM
    
    'T1CON = $1                ; Prescaler = 4, TMR0ON
    OPTION_REG = $80
    
    
            
    
    Einschalten:
    	while Ja = Ja
    		Beginn:
    		'Warten auf Start, Aufnahme oder Stop
    		Position = 1
    		Lied_Zuende = Nein
    		LED_Lied = LED
    		
    		if Abspielen_Taster = Gedrueckt then
                Pause 500
            	Zaehler = 1260
            	Gosub Gleichbleibend
            	LED_Aufnahme = Aus
    			GOSUB RedRedWine
    		else
    			if Stop_Taster = Gedrueckt then
                    Pause 500
        			Zaehler = 180
        			Gosub Gleichbleibend
        			LED_Aufnahme = Aus
        			GOSUB RedRedWine
    			else
    				if Aufnahme_Taster = Gedrueckt then
                        Pause 500				
    					Zaehler = 7200
            			Gosub Gleichbleibend
            			LED_Aufnahme = Aus
            			GOSUB RedRedWine
     				EndIf
    			EndIf
    		EndIf
    		
    	WenD
    	END
    	
    Inhalt:
        Toggle LED_Aufnahme
        Timerzaehler = 0
        WH = WH - 1
    Return
    	
    LEDAnAus:
        TimerZaehler = TimerZaehler + 1
        If Timerzaehler = 781 AND Zeit = 400 Then
            Gosub Inhalt
        ELSE
            If Timerzaehler = 391 AND Zeit = 200 Then
                Gosub Inhalt    
            Else
                If Timerzaehler = 195 AND Zeit = 100 Then
                    Gosub Inhalt    
                Else    
                    If Timerzaehler = 98 AND Zeit = 50 Then
                        Gosub Inhalt  
                    EndIf
                EndIf
            EndIf
        EndIf  
    @ INT_RETURN  	
    
    Abspielen:
    Zaehler = Zaehler * 1000
    
    WH = DIV32 Zeit
    WH = WH / 4
    TimerZaehler = 0
    @ INT_ENABLE  TMR0_INT     
    WHILE WH >= 1
        if Abspielen_Taster = Gedrueckt OR Aufnahme_Taster = Gedrueckt OR Stop_Taster = Gedrueckt then
    @ INT_DISABLE  TMR0_INT         
        	Pause 500
        	WHILE Abspielen_Taster = Frei AND Aufnahme_Taster = Frei AND Stop_Taster = Frei
        	WEND
        	Pause 500
    @ INT_ENABLE  TMR0_INT        	
        EndIf
    Wend
    @ INT_DISABLE  TMR0_INT     
    Zaehler = Zaehler / 1000
    Return
        
    Liedpause:
        Return      
    
    RedRedWine:
        LED_Lied = Lied
    	'While Lied_Zuende = Nein And Abspielen_Taster = Frei And Aufnahme_Taster = Frei And Stop_Taster = Frei 
    	While Abspielen_Taster = Frei And Aufnahme_Taster = Frei And Stop_Taster = Frei 
            Sound Lautsprecher,[0,0,104,44,0,8,109,44,0,8,110,94,0,13,106,94,0,120,112,39,0,0,114,39,0,0,0,26,0,0,114,46,0,0,110,39,0,0,106,114]
            Sound Lautsprecher,[0,127,112,33,0,0,114,39,0,0,0,26,0,0,114,39,0,0,110,39,0,0,110,71,0,170,106,39,0,0,104,39,0,0,101,26,0,0,104,39]
            Sound Lautsprecher,[0,0,106,12,0,0,104,147]
    	Wend
    	High LED_Aufnahme  
        Pause 1000
        PORTB.7 = 0 'LS aus
        Low LED_Aufnahme
    RETURN
    
    Gleichbleibend:
    	Zeit = 400
    	Sound Lautsprecher,[90,74]
    	GOSUB Abspielen
    	Zeit = 200
    	Sound Lautsprecher,[97,74]
    	GOSUB Abspielen
    	Zeit = 100
        Sound Lautsprecher,[103,74]
    	GOSUB Abspielen
    	Zeit = 50
        Sound Lautsprecher,[109,74]
    	GOSUB Abspielen
    Return
    Last edited by IAmTheAnswer; - 12th May 2010 at 08:24.

Members who have read this thread : 0

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts