Writing and changing digits on LED display
This program is only an extended verson of the previous one. There is only one digit active- the first one on the right, and there is no use of multiplexing. Unlike the previous example, all decimal numbers are displayed (0-9). In order to enable digits to change at reasonable pace, a soubroutine L2 which causes a short time delay is executed prior to each change occurs. Basically, the whole process is very simple and takes place in the main loop called LOOP which looks as follows:- R3 is copied to Accumulator and subroutine for masking digits Disp is executed;
- Accumulator is copied to the port and displayed;
- The contents of the R3 register is incremented;
- It is checked whether 10 cycles are counted or not. If it is, register R3 is reset in order to enable counting to start from 0; and
- Instruction labeled as L2 within subroutine is executed.
;************************************************************************ ;* PROGRAM NAME: 7Seg2.ASM ;* DESCRIPTION: Program writes numbers 0-9 on 7-segment LED display ;************************************************************************ ;BASIC DIRECTIVES $MOD53 $TITLE(7SEG2.ASM) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING ;STACK DSEG AT 03FH STACK_START: DS 040H ;RESET VECTORS CSEG AT 0 JMP XRESET ; Reset vector ORG 100H XRESET: MOV SP,#STACK_START ; Define Stack pointer MOV R3,#0 ; Counter initial value MOV P1,#0 ; Turn off all display segments MOV P3,#20h ; Activate display D4 LOOP: MOV A,R3 LCALL Disp ; Perform appropriate masking for number in ; Accumulator MOV P1,A INC R3 ; Increment number in register by 1 CJNE R3,#10,L2 ; Check whether the number 10 is in R3 MOV R3,#0 ; If it is, reset counter L2: MOV R2,#20 ; 500 mS time delay F02: MOV R1,#50 ; 25 mS F01: MOV R0,#230 DJNZ R0,$ DJNZ R1,F01 DJNZ R2,F02 SJMP LOOP Disp: ; Subroutine for writing digits INC A MOVC A,@A+PC RET DB 3FH ; Digit 0 mask DB 06H ; Digit 1 mask DB 5BH ; Digit 2 mask DB 4FH ; Digit 3 mask DB 66H ; Digit 4 mask DB 6DH ; Digit 5 mask DB 7DH ; Digit 6 mask DB 07H ; Digit 7 mask DB 7FH ; Digit 8 mask DB 6FH ; Digit 9 mask END ; End of program