Experiment1: 50% High Level Width
Code:
ORG 0000H //student number is 41075043
MOV DPTR, #LOOK
MOV R0, #3 //so the cycle count is 3
LOOP:
MOV R5, #4 //first four digits
MOV R4, #1
MOV R3, #0
MOV R2, #7
ACALL UPDATE
MOV R5, #1 //shift left
MOV R4, #0
MOV R3, #7
MOV R2, #5
ACALL UPDATE
MOV R5, #0 //shift left
MOV R4, #7
MOV R3, #5
MOV R2, #0
ACALL UPDATE
MOV R5, #7 //shift left
MOV R4, #5
MOV R3, #0
MOV R2, #4
ACALL UPDATE
MOV R5, #5 //shift left
MOV R4, #0
MOV R3, #4
MOV R2, #3
ACALL UPDATE
DJNZ R0, CONTI //In order to show just until the
//last digit, a stop condition is
SETB P2.3 //added here
SETB P2.2
SETB P2.1
SETB P2.0
STOP: SJMP STOP
CONTI: //continue if haven’t cycle 3 time
MOV R5, #0 //shift left
MOV R4, #4
MOV R3, #3
MOV R2, #4
ACALL UPDATE
MOV R5, #4 //shift left
MOV R4, #3
MOV R3, #4
MOV R2, #1
ACALL UPDATE
MOV R5, #3 //shift left
MOV R4, #4
MOV R3, #1
MOV R2, #0
ACALL UPDATE
LJMP LOOP
UPDATE: //update the 7-segment display
MOV 40H, #1 //use 40H, 41H to set delay time
MEDIUM: MOV 41H, #200
AGAIN:
CPL P2.4
CLR P2.3 //set first digit
SETB P2.2
SETB P2.1
SETB P2.0
MOV A, R5
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
SETB P2.3 //set second digit
CLR P2.2
SETB P2.1
SETB P2.0
MOV A, R4
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
SETB P2.3 //set third digit
SETB P2.2
CLR P2.1
SETB P2.0
MOV A, R3
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
SETB P2.3 //set last digit
SETB P2.2
SETB P2.1
CLR P2.0
MOV A, R2
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
CPL P2.4
ACALL SHORT
DJNZ 41H, AGAIN
DJNZ 40H, MEDIUM
RET
SHORT: //1264 cycles
MOV R6, #42
SHERE: MOV R7, #13
SHERE2: DJNZ R7, SHERE2
DJNZ R6, SHERE
RET
LOOK: //decimal 0~9 of 7-segment display
DB 11000000B, 11111001B, 10100100B, 10110000B,
10011001B, 10010010B, 10000010B, 11111000B, 10000000B,
10010000B
END //end program
Waveform: 101.317Hz
Video:
https://www.youtube.com/watch?v=0MLOokAuRfA
Experiment 2: 80% High Level Width
Code:
ORG 0000H //student number is 41075043
MOV DPTR, #LOOK
MOV R0, #3 //so the cycle count is 3
LOOP:
MOV R5, #4 //first four digits
MOV R4, #1
MOV R3, #0
MOV R2, #7
ACALL UPDATE
MOV R5, #1 //shift left
MOV R4, #0
MOV R3, #7
MOV R2, #5
ACALL UPDATE
MOV R5, #0 //shift left
MOV R4, #7
MOV R3, #5
MOV R2, #0
ACALL UPDATE
MOV R5, #7 //shift left
MOV R4, #5
MOV R3, #0
MOV R2, #4
ACALL UPDATE
MOV R5, #5 //shift left
MOV R4, #0
MOV R3, #4
MOV R2, #3
ACALL UPDATE
DJNZ R0, CONTI //In order to show just until the
last digit, a stop condition is
SETB P2.3 added here
SETB P2.2
SETB P2.1
SETB P2.0
STOP: SJMP STOP
CONTI: //continue if haven’t cycle 3 time
MOV R5, #0 //shift left
MOV R4, #4
MOV R3, #3
MOV R2, #4
ACALL UPDATE
MOV R5, #4 //shift left
MOV R4, #3
MOV R3, #4
MOV R2, #1
ACALL UPDATE
MOV R5, #3 //shift left
MOV R4, #4
MOV R3, #1
MOV R2, #0
ACALL UPDATE
LJMP LOOP
UPDATE: //update the 7-segment display
MOV 40H, #1 //use 40H, 41H to set delay time
MEDIUM: MOV 41H, #200
AGAIN:
CPL P2.4
CLR P2.3 //set first digit
SETB P2.2
SETB P2.1
SETB P2.0
MOV A, R5
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
SETB P2.3 //set second digit
CLR P2.2
SETB P2.1
SETB P2.0
MOV A, R4
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
SETB P2.3 //set third digit
SETB P2.2
CLR P2.1
SETB P2.0
MOV A, R3
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
SETB P2.3 //set last digit
SETB P2.2
SETB P2.1
CLR P2.0
MOV A, R2
MOVC A, @A+DPTR
MOV P1, A
ACALL SHORT
CPL P2.4
ACALL SHORT
DJNZ 41H, AGAIN
DJNZ 40H, MEDIUM
RET
SHORT: //2020 cycles
MOV R6, #42
SHERE: MOV R7, #22
SHERE2: DJNZ R7, SHERE2
DJNZ R6, SHERE
RET
LOOK: //decimal 0~9 of 7-segment display
DB 11000000B, 11111001B, 10100100B, 10110000B,
10011001B, 10010010B, 10000010B, 11111000B, 10000000B,
10010000B
END //end program
Waveform: 100.654Hz
Video:
https://www.youtube.com/watch?v=ijmuMXLw8aI
Breadboard Circuit Layout: