| ??? 10/07/11 11:14 Read: times Msg Score: -1 -1 Message Not Useful |
#184124 - Speed control of running adancing LEDs |
Hi Friends
Actually, I have a program in Assembly and want to include up/down buttons to change the speed of running. I tried with calling differet delay routines but not getting success please suggest some idea. Thank u for responding on my above problem through chat board. It is learned that such type of problems should not be raised throgh Chat board hence I shifted from chat board to 8052 forum. Now, I am with clear cut problem and well commented code. Please look into the code and we can modidify the code to run with UP/DN buttons.
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;PROGRAM FOR DANCING LED
;With control of running or dancing speed
;Three speeds UP & DOWN;
;Using three tactile switches at P0.0 & P0.1 for up & down buttons
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ORG 0000H
L1 EQU P3.4 ;L1 to L11 are LEDs for dancing effect of light
L2 EQU P3.1
L3 EQU P3.0
L4 EQU P1.7
L5 EQU P1.6
L6 EQU P1.5
L7 EQU P1.4
L8 EQU P1.3
L9 EQU P1.2
L10 EQU P1.1
L11 EQU P1.0
MOV R4,#03H ;Selected count for three speeds
FNAUTO: MOV R3,#05 ;Selected count for five times play of same light effect
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
D1: CALL DESGN1 ;nine different dancing patterns/ effect, called one by one
DJNZ R3,D1
MOV R3,#05
D2: CALL DESGN2
DJNZ R3,D2
MOV R3,#05
D3: CALL DESGN3
DJNZ R3,D3
MOV R3,#05
D4: CALL DESGN4
DJNZ R3,D4
MOV R3,#05
D5: CALL DESGN5
DJNZ R3,D5
MOV R3,#05
D6: CALL DESGN6
DJNZ R3,D6
MOV R3,#05
D7: CALL DESGN7
DJNZ R3,D7
MOV R3,#05
D8: CALL DESGN8
DJNZ R3,D8
MOV R3,#05
D9: CALL DESGN9
DJNZ R3,D9
MOV R3,#05
JMP FNAUTO
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;Sub Routines for Nine patterns
;*******************************************
DESGN1: CLR L1 ;sub Routine for pattern1
SETB L2
CLR L3
SETB L4
CLR L5
SETB L6
CLR L7
SETB L8
CLR L9
SETB L10
CLR L11
CALL DELAY
CLR L2
SETB L1
CLR L4
SETB L3
CLR L6
SETB L5
CLR L8
SETB L7
CLR L10
SETB L9
SETB L11
CALL DELAY
RET
DESGN2: CALL CLEAR ;Sub Routine for pattern2
CLR L1
CALL DELAY
CALL CLEAR
CLR L2
CALL DELAY
CALL CLEAR
CLR L3
CALL DELAY
CALL CLEAR
CLR L4
CALL DELAY
CALL CLEAR
CLR L5
CALL DELAY
CALL CLEAR
CLR L6
CALL DELAY
CALL CLEAR
CLR L7
CALL DELAY
CALL CLEAR
CLR L8
CALL DELAY
CALL CLEAR
CLR L9
CALL DELAY
CALL CLEAR
CLR L10
CALL DELAY
CALL CLEAR
CLR L11
CALL DELAY
RET
DESGN3: CALL CLEAR ;Sub Routine for pattern3
CLR L11
CALL DELAY
CALL CLEAR
CLR L10
CALL DELAY
CALL CLEAR
CLR L9
CALL DELAY
CALL CLEAR
CLR L8
CALL DELAY
CALL CLEAR
CLR L7
CALL DELAY
CALL CLEAR
CLR L6
CALL DELAY
CALL CLEAR
CLR L5
CALL DELAY
CALL CLEAR
CLR L4
CALL DELAY
CALL CLEAR
CLR L3
CALL DELAY
CALL CLEAR
CLR L2
CALL DELAY
CALL CLEAR
CLR L1
CALL DELAY
RET
DESGN4: CALL CLEAR ;Sub Routine for pattern4
CLR L1
CALL DELAY
CALL CLEAR
CLR L2
CALL DELAY
CALL CLEAR
CLR L3
CALL DELAY
CALL CLEAR
CLR L4
CALL DELAY
CALL CLEAR
CLR L5
CALL DELAY
CALL CLEAR
CLR L6
CALL DELAY
CALL CLEAR
CLR L7
CALL DELAY
CALL CLEAR
CLR L8
CALL DELAY
CALL CLEAR
CLR L9
CALL DELAY
CALL CLEAR
CLR L10
CALL DELAY
CALL CLEAR
CLR L11
CALL DELAY
CALL CLEAR
CLR L11
CALL DELAY
CALL CLEAR
CLR L10
CALL DELAY
CALL CLEAR
CLR L9
CALL DELAY
CALL CLEAR
CLR L8
CALL DELAY
CALL CLEAR
CLR L7
CALL DELAY
CALL CLEAR
CLR L6
CALL DELAY
CALL CLEAR
CLR L5
CALL DELAY
CALL CLEAR
CLR L4
CALL DELAY
CALL CLEAR
CLR L3
CALL DELAY
CALL CLEAR
CLR L2
CALL DELAY
CALL CLEAR
CLR L1
CALL DELAY
RET
DESGN5: CALL CLEAR ;Sub Routine for pattern5
CLR L1
CLR L11
CALL DELAY
CALL CLEAR
CLR L2
CLR L10
CALL DELAY
CALL CLEAR
CLR L3
CLR L9
CALL DELAY
CALL CLEAR
CLR L4
CLR L8
CALL DELAY
CALL CLEAR
CLR L5
CLR L7
CALL DELAY
CALL CLEAR
CLR L6
CALL DELAY
CALL CLEAR
CLR L7
CLR L5
CALL DELAY
CALL CLEAR
CLR L8
CLR L4
CALL DELAY
CALL CLEAR
CLR L9
CLR L3
CALL DELAY
CALL CLEAR
CLR L10
CLR L2
CALL DELAY
CALL CLEAR
CLR L11
CLR L1
CALL DELAY
CALL CLEAR
RET
DESGN6: CALL ALLON ;Sub Routine for pattern6
CALL DELAY
CALL CLEAR
CALL DELAY
RET
DESGN7: CALL ALLON ;Sub Routine for pattern7
SETB L1
CALL DELAY
CALL ALLON
SETB L2
CALL DELAY
CALL ALLON
SETB L3
CALL DELAY
CALL ALLON
SETB L4
CALL DELAY
CALL ALLON
SETB L5
CALL DELAY
CALL ALLON
SETB L6
CALL DELAY
CALL ALLON
SETB L7
CALL DELAY
CALL ALLON
SETB L8
CALL DELAY
CALL ALLON
SETB L9
CALL DELAY
CALL ALLON
SETB L10
CALL DELAY
CALL ALLON
SETB L11
CALL DELAY
RET
DESGN8: CALL ALLON ;Sub Routine for pattern8
SETB L11
CALL DELAY
CALL ALLON
SETB L10
CALL DELAY
CALL ALLON
SETB L9
CALL DELAY
CALL ALLON
SETB L8
CALL DELAY
CALL ALLON
SETB L7
CALL DELAY
CALL ALLON
SETB L6
CALL DELAY
CALL ALLON
SETB L5
CALL DELAY
CALL ALLON
SETB L4
CALL DELAY
CALL ALLON
SETB L3
CALL DELAY
CALL ALLON
SETB L2
CALL DELAY
CALL ALLON
SETB L1
CALL DELAY
RET
DESGN9: CALL ALLON ;Sub Routine for pattern9
SETB L11
SETB L1
CALL DELAY
CALL ALLON
SETB L10
SETB L2
CALL DELAY
CALL ALLON
SETB L9
SETB L3
CALL DELAY
CALL ALLON
SETB L8
SETB L4
CALL DELAY
CALL ALLON
SETB L7
SETB L5
CALL DELAY
CALL ALLON
SETB L6
CALL DELAY
CALL ALLON
SETB L5
SETB L7
CALL DELAY
CALL ALLON
SETB L4
SETB L8
CALL DELAY
CALL ALLON
SETB L3
SETB L9
CALL DELAY
CALL ALLON
SETB L2
SETB L10
CALL DELAY
CALL ALLON
SETB L1
SETB L11
CALL DELAY
RET
;********************************************************
;Sub routine for OFF all the LEDs
;********************************************************
CLEAR: SETB L1 ;Sub routine for OFF all the LEDs
SETB L2
SETB L3
SETB L4
SETB L5
SETB L6
SETB L7
SETB L8
SETB L9
SETB L10
SETB L11
RET
;*******************************************************
;Sub routine for ON all the LEDs
;********************************************************
ALLON: CLR L1 ;Sub routine for ON all the LEDs
CLR L2
CLR L3
CLR L4
CLR L5
CLR L6
CLR L7
CLR L8
CLR L9
CLR L10
CLR L11
RET
;****************************************************
; My idea was that delay sub routine poll the switches in each cycle
; If UP butn is pressed then R4 should be increased & compare with normal
; speed value as #03.
; Accordingly it should select the appropriate delay constants forever
;till the reset or on any other button press.
; But I am failing here that it works in first cycle of execution and after that it is not working !
;******************************************************
DELAY:
JNB P0.0, CHECK ;check for UP button press
NOP
;JB P0.0,NOR_DEL
JNB P0.1,CHECK1
NOP
;JB P0.1,NOR_DEL
CHECK:
INC R4 ;
MOV A,#03H
SUBB A,R4 ;Compare contents of R4 with #03 i.e nomal speed value
JZ NOR_DEL ; if equal run with normal delay parameters
JC INCR ; If R4>03 then check whether it is #04
JNC DECR
CHECK1:
DEC R4
MOV A,#03H
SUBB A,R4
JZ NOR_DEL
JC INCR
JNC DECR
NOR_DEL:MOV R0,#0FFH
MOV R1,#0FFH
INLOP: MOV R2,#01H
DJNZ R2,$
DJNZ R1,$
DJNZ R0,INLOP
RET
INCR:
CJNE R4,#04H,NXT1 ;check whether it is #04
MOV R0,#80h ;if it is #04 take the delay constant as #80h in R0 MOV R1,#0FFH ;ie. we have decreased the delay time or increased ;dancing speed
AJMP INLOP
NXT1: CJNE R4,#05H,NXT2 ;check whether it is #05
MOV R0,#01H ;if it is #05 take the delay constant as #01h in R0 and #80h in R1
MOV R1,#80H ;ie. further decreased the delay time or increased the dancing speed
AJMP INLOP
NXT2: CJNE R4,#06H,NXT3 ;check whether it is #06 i.e for maximum speed
LAST: MOV R0,#01H ;if it is #05 take the delay constant as #01h in R0 and #81h in R1
MOV R1,#01H ;further decreased the delay time or increased the dancing speed
AJMP INLOP
NXT3: MOV A,#06H ; If some pressees more UP button the last speed
SUBB A, R4 ; should remai valid
CJNE A,#00H,NXT2
AJMP LAST
DECR: ; MUST REQUIRED RST BUTTON TO AVOID CRASH
CJNE R4,#02H, NXT4 ; Similarly we have tried for decreasing the dancing speed.
MOV R0,#36H ;Speed-
AJMP INLOP
NXT4: CJNE R4,#01H, NXT5
MOV R0,#80H ;Speed--
AJMP INLOP
NXT5: CJNE R4,#00H, NXT5
MOV R0,#0FFH ;Speed---
AJMP NXT5
END
|



