5x7 Display Experiments Page8

EXPERIMENT-20   ANIMATION-4
This experiment covers another sub-routine called WIPE-DOWN. It is very similar to WipeUp, except the effect is the reverse. The fully-lit screen gradually turns off from the top row to the bottom row.
In the program below, we have combined it with experiments 18 and 19 to get the 5-cell animation (fan-effect from right-hand corner), then WipeUp, then WipeDown. 
You may thing our programs are very long, but you need to remember you are "talking directly to the microcontroller" with each of the instructions and each instruction can only ask one thing to be done. 
If you introduce a HIGHER LEVEL language such as BASIC, or C or any language that requires a single line to perform a complex instruction, the language will have a set of instructions  (just like ours) hidden away in a routine, so that the operation can be performed. 
if you want to perform operations via a single line of code you can get a complete set of routines from our Library of Routines chapter. 
We have created sub-routines to toggles a line, produce a pulse, etc etc and these have been brought together in an enormous chapter called Library of Routines. 
Once you complete this project you will be able to advance to the next stage of programming, and these sub-routines will be very helpful. 
               Experiment-20 for "5x7 Display" Project
                               ;PIC16F84 and only F84 chip 
                                          ;
5-cell animation with WipeUp and WipeDown. 
 
Start      ORG 0x00
              BSF 03,5             ;Go to page1 for setting-up the ports
              MOVLW 00h        ;Put 00 into W 
              MOVWF 05h        ;to make port 5 (port A) all output
              MOVWF 06h        ;and make port 6 (port B) all output
              BCF 03,5              ;Go to page0 for programming
              GOTO Main

 Cell1   MOVLW 01h             ;place the 5 values into the 5 
            MOVWF 11h              ; files to produce the first cell
            MOVLW 01h              ; as shown above.
            MOVWF 12h
            MOVLW 01h
            MOVWF 13h
            MOVLW 01h
            MOVWF 14h
            MOVLW 01h
            MOVWF 15h
            GOTO Scan

 Cell2   MOVLW 08h        ;place the 5 values into the 5 
            MOVWF 11h        ; files to produce the second cell
            MOVLW 04h        ; as shown above.
            MOVWF 12h
            MOVLW 04h
            MOVWF 13h
            MOVLW 02h
            MOVWF 14h
            MOVLW 01h
            MOVWF 15h
            GOTO Scan

 Cell3   MOVLW 40h         ;place the 5 values into the 5 
            MOVWF 11h         ; files to produce the third cell
            MOVLW 20h         ; as shown above.
            MOVWF 12h
            MOVLW 08h
            MOVWF 13h
            MOVLW 04h
            MOVWF 14h
            MOVLW 01h
            MOVWF 15h
            GOTO Scan

 Cell4   MOVLW 00h           ;place the 5 values into the 5 
            MOVWF 11h           ; files to produce the fourth cell
            MOVLW 00h           ; as shown above.
            MOVWF 12h
            MOVLW 60h
            MOVWF 13h
            MOVLW 1Eh
            MOVWF 14h
            MOVLW 01h
            MOVWF 15h
            GOTO Scan

 Cell5   MOVLW 00h         ;place the 5 values into the 5 
            MOVWF 11h         ; files to produce the fifth cell
            MOVLW 00h         ; as shown above.
            MOVWF 12h
            MOVLW 00h
            MOVWF 13h
            MOVLW 00h
            MOVWF 14h
            MOVLW 7Fh
            MOVWF 15h
            GOTO Scan

 Scan   BSF 05,1               ;Reset 4017
            NOP
            BCF 05,1
            MOVF 11h,0           ;Move file 11 into W
            MOVWF 06h
            CALL DelD
            MOVF 12h,0          ;Move file 12 into W
            MOVWF 06h
            CALL DelD
            MOVF 13h,0          ;Move file 13 into W
            MOVWF 06h
            CALL DelD
            MOVF 14h,0           ;Move file 14 into W
            MOVWF 06h
            CALL DelD
            MOVF 15h,0           ;Move file 15 into W
            MOVWF 06h
            CALL DelD
            RETURN

 DelD    DECFSZ 1Bh,1
            GOTO DelD
            MOVLW 00h               ;Zero port B to prevent mirroring
            MOVWF 06
 Clk      BSF 05,0                     ;Clock the 4017
            NOP
            BCF 05,0
            RETURN

 WipeUp   MOVLW 0FFh
                 MOVWF 11h
                 MOVWF 12h
                 MOVWF 13h
                 MOVWF 14h
                 MOVWF 15h
                 MOVLW 80h
                 MOVWF 0Ch
                 GOTO YY
XX            RLF 11h,1
                 BCF 11h,0 
                 RLF 12h,1
                 BCF 12h,0 
                 RLF 13h,1
                 BCF 13h,0 
                 RLF 14h,1
                 BCF 14h,0 
                 RLF 15h,1
                 BCF 15h,0
                 BTFSS 15h,7
                 RETURN
 YY           DECFSZ 0Ch,1
                 GOTO ZZ
                 MOVLW 80h
                 MOVWF 0Ch
                 GOTO XX
 ZZ           CALL Scan
                 GOTO YY 

 WDown   MOVLW 0FFh
                 MOVWF 11h
                 MOVWF 12h
                 MOVWF 13h
                 MOVWF 14h
                 MOVWF 15h
                 MOVLW 80h
                 MOVWF 0Ch
                 GOTO BB
 AA          RRF 11h,1
                 BCF 11h,7 
                 RRF 12h,1
                 BCF 12h,7 
                 RRF 13h,1
                 BCF 13h,7 
                 RRF 14h,1
                 BCF 14h,7 
                 RRF 15h,1
                 BCF 15h,7 
 BB           DECFSZ 0Ch,1
                 GOTO CC
                 MOVLW 80h
                 MOVWF 0Ch
                 BTFSS 15h,0
                 RETURN
                 GOTO AA
 CC           CALL Scan
                 GOTO BB 

 Main       MOVLW 0F0h ;Each 10h represents 100mS 
               MOVWF 0Ch
 Main1     CALL Cell1 ;Display Cell 1 for 1/2 sec
               DECFSZ 0Ch,1
               GOTO Main1

               MOVLW 40h ;Each 10h represents 100mS 
               MOVWF 0Ch
 Main2     CALL Cell2 ;Display Cell 2 for 400mS
               DECFSZ 0Ch,1
               GOTO Main2

               MOVLW 30h ;Each 10h represents 100mS 
               MOVWF 0Ch
 Main3     CALL Cell3 ;Display Cell 3 for 300mS
               DECFSZ 0Ch,1
               GOTO Main3

               MOVLW 20h ;Each 10h represents 100mS 
               MOVWF 0Ch
 Main4     CALL Cell4 ;Display Cell 4 for 200mS
               DECFSZ 0Ch,1
               GOTO Main4

               MOVLW 80h ;Each 10h represents 100mS 
               MOVWF 0Ch
 Main5    CALL Cell5 ;Display Cell 5 for 800mS
               DECFSZ 0Ch,1
               GOTO Main5
               CALL WipeUp
               CALL WDown
               GOTO Main

               END

    


The block of numbers below is the HEX file for Experiment-20. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-20.hex   
:10000000831600308500860083129028013091000D
:1000100001309200013093000130940001309500CE
:100020003D280830910004309200043093000230E3
:100030009400013095003D2840309100203092001E
:100040000830930004309400013095003D280030C2
:10005000910000309200603093001E309400013017
:1000600095003D2800309100003092000030930050
:10007000003094007F3095003D28851400008510E5
:1000800011088600502012088600502013088600B0
:1000900050201408860050201508860050200800C3
:1000A0009B0B502800308600051400000510080046
:1000B000FF309100920093009400950080308C00F6
:1000C0006D28910D1110920D1210930D1310940DB7
:1000D0001410950D1510951F08008C0B7228803098
:1000E0008C0061283D206D28FF3091009200930024
:1000F0009400950080308C008728910C9113920C0D
:100100009213930C9313940C9413950C95138C0BDE
:100110008E2880308C00151C08007D283D20872803
:10012000F0308C0006208C0B922840308C0011207F
:100130008C0B972830308C001C208C0B9C28203096
:100140008C0027208C0BA12880308C0032208C0B57
:08015000A62858207420902815
:00000001FF

 

 
EXPERIMENT-21             ANIMATION-5
This is another sub-routine that can be incorporated into your own routines. It is called SLASH. The sub-routine puts a diagonal on the screen as shown in the diagram below. It takes 11 frames for the diagonal to pass from the bottom left-hand corner to the top right-hand corner. When this routine is incorporated in one of your own routines, you will already have Scan sub-routine in your program. To run "Slash," add the Slash sub-routine and ShiftUp sub-routine and add CALL Slash in the Main routine.  

 The speed of the routine is determined by the value loaded into file 0C. In our case the value is 20h. For a faster action, reduce this value. At 80h, the animation is four times slower than the program below. 
Here's how the program works:
The first 7 instructions set up the ports as outputs. Port A (port 05) resets and clocks the 4017 shift-register. The first 5 outputs of the 4017 are connected to transistors and these sink the cathodes of each column of LEDs. 
The 7 rows of LEDs are connected to port B (port 6) via small current limiting resistors and the 8th output of this port is connected to a piezo diaphragm. 
The 8th instruction in the program sends the processor to Main where a loop is created for the "Slash" sub-routine. 
At the Slash sub-routine the first instruction clears the carry bit (the CARRY FLAG). This is to prevent  junk in the carry bit appearing on the screen when a shift instruction is executed.   
The five files are loaded with zero and the first bit in file 11 is set so that the bottom left-hand corner will be illuminated.
The program then calls a sub-routine called ShiftUp that firstly calls Scan sub-routine a number of times (the value loaded into file 0C), the rotates each of the files "LEFT." This effectively moves the illuminated LEDs up the display. 
The bottom LED of the next column is turned on and the display sub-routine executed. In this way the LEDs rise up the display. 
When a LED reaches the top, it must be turned off (BCF) so that it does not appear at the bottom of the display (via the rotate instruction). This is done by the 4 BCF instructions.
The shiftUp sub-routine calls the Scan sub-routine and this performs two operations. Firstly it resets the 4017 shift register (actually a counter chip, but used as a shift device) and then moves the value in each file to the output port (port 6) and calls a delay routine so that the appropriate LEDs will be seen. 
The sub-routine then clocks the 4017 so that the next sinking transistor will be activated and when the value in the next file is passed to the output port, the second row of LEDs are activated. This continues for the 5 columns and the micro returns to the ShiftUp sub-routine to repeat the sequence so that the whole screen appears to be lit at the same time. 
After 20 hex passes of the Scan routine the micro turns on the next lowest bit in a column and repeats the sequence.
    
               Experiment-21 for "5x7 Display" Project
                                      ;PIC16F84 and only F84 chip 
                                                ;SLASH  animation   

 Start   ORG 0x00
            BSF 03,5          ;Go to page1 for setting-up the ports
            MOVLW 00h    ;Put 00 into W 
            MOVWF 05h    ;to make port 5 (port A) all output
            MOVWF 06h    ;and make port 6 (port B) all output
            BCF 03,5          ;Go to page0 for programming
            GOTO Main

 Slash   BCF 03h,0       ;Clear the carry bit
            MOVLW 00h
            MOVWF 11h
            MOVWF 12h
            MOVWF 13h
            MOVWF 14h
            MOVWF 15h
            BSF 11h,0
            CALL ShiftUp
            BSF 12h,0
            CALL ShiftUp
            BSF 13h,0
            CALL ShiftUp
            BSF 14h,0
            CALL ShiftUp
            BSF 15h,0
            CALL ShiftUp
            CALL ShiftUp
            CALL ShiftUp
            BCF 11h,7
            CALL ShiftUp
            BCF 12h,7
            CALL ShiftUp
            BCF 13h,7
            CALL ShiftUp
            BCF 14h,7
            CALL ShiftUp
            RETURN


 ShiftUp  MOVLW 20h
              MOVWF 0Ch
 Shift1    DECFSZ 0Ch,1
              GOTO Shift2
              RLF 11h,1
              RLF 12h,1
              RLF 13h,1
              RLF 14h,1
              RLF 15h,1
              RETURN
 Shift2    CALL Scan
              GOTO Shift1

 Scan   BSF 05,1               ;Reset 4017
            NOP
            BCF 05,1
            MOVF 11h,0          ;Move file 11 into W
            MOVWF 06h
            CALL DelD
            MOVF 12h,0          ;Move file 12 into W
            MOVWF 06h
            CALL DelD
            MOVF 13h,0          ;Move file 13 into W
            MOVWF 06h
            CALL DelD
            MOVF 14h,0          ;Move file 14 into W
            MOVWF 06h
            CALL DelD
            MOVF 15h,0         ;Move file 15 into W
            MOVWF 06h
            CALL DelD
            RETURN

 DelD    DECFSZ 1Bh,1
            GOTO DelD
            MOVLW 00h      ;Zero port B to prevent mirroring
            MOVWF 06
 Clk      BSF 05,0           ;Clock the 4017
            NOP
            BCF 05,0
            RETURN



 Main    CALL Slash         ;Display Slash 
            GOTO Main 

            END

         
              


The block of numbers below is the HEX file for Experiment-21. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-21.hex   
:1000000083160030850086008312492803100030D3
:100010009100920093009400950011142220121474
:10002000222013142220141422201514222022200E
:100030002220911322209213222093132220941322
:100040002220080020308C008C0B2C28910D920D62
:10005000930D940D950D08002E2024288514000082
:1000600085101108860041201208860041201308DF
:100070008600412014088600412015088600412092
:1000800008009B0B41280030860005140000051075
:06009000080006204928CB
:00000001FF

  
EXPERIMENT-22             ANIMATION-6
Here's a 5-cell animation that uses sub-routines from experiment 18. It's called SPLASH. 

The first thing you have to do is work out how you are going to write the program. Look at the sequence of cells and see if a pattern is present where the LEDs can be "rotate" instruction. If this is not possible, you will have to work out the hex value of each LED and use our animation program from experiment 18. Try this program it is very effective!
               Experiment-22 for "5x7 Display" Project
                                      ;PIC16F84 and only F84 chip 
                                                ;SPLASH

 Start   ORG 0x00
            BSF 03,5          ;Go to page1 for setting-up the ports
            MOVLW 00h    ;Put 00 into W 
            MOVWF 05h    ;to make port 5 (port A) all output
            MOVWF 06h    ;and make port 6 (port B) all output
            BCF 03,5          ;Go to page0 for programming
            GOTO Main

 Cell1   MOVLW 00h          ;place the 5 values into the 5 
            MOVWF 11h          ; files to produce the first cell
            MOVLW 00h          ; as shown above.
            MOVWF 12h
            MOVLW 08h
            MOVWF 13h
            MOVLW 00h
            MOVWF 14h
            MOVLW 00h
            MOVWF 15h
            GOTO Scan

 Cell2   MOVLW 00h         ;place the 5 values into the 5 
            MOVWF 11h         ; files to produce the second cell
            MOVLW 1Ch         ; as shown above.
            MOVWF 12h
            MOVLW 14h
            MOVWF 13h
            MOVLW 1Ch
            MOVWF 14h
            MOVLW 00h
            MOVWF 15h
            GOTO Scan

 Cell3   MOVLW 3Eh         ;place the 5 values into the 5 
            MOVWF 11h         ; files to produce the third cell
            MOVLW 22h         ; as shown above.
            MOVWF 12h
            MOVLW 22h
            MOVWF 13h
            MOVLW 22h
            MOVWF 14h
            MOVLW 3Eh
            MOVWF 15h
            GOTO Scan

 Cell4    MOVLW 41h          ;place the 5 values into the 5 
            MOVWF 11h           ; files to produce the fourth cell
            MOVLW 41h           ; as shown above.
            MOVWF 12h
            MOVLW 41h
            MOVWF 13h
            MOVLW 41h
            MOVWF 14h
            MOVLW 41h
            MOVWF 15h
            GOTO Scan

 Cell5   MOVLW 00h        
            MOVWF 11h         ;The fifth cell is blank
            MOVLW 00h        
            MOVWF 12h
            MOVLW 00h
            MOVWF 13h
            MOVLW 00h
            MOVWF 14h
            MOVLW 00h
            MOVWF 15h
            GOTO Scan

 Scan   BSF 05,1             ;Reset 4017
            NOP
            BCF 05,1
            MOVF 11h,0       ;Move file 11 into W
            MOVWF 06h
            CALL DelD
            MOVF 12h,0        ;Move file 12 into W
            MOVWF 06h
            CALL DelD
            MOVF 13h,0        ;Move file 13 into W
            MOVWF 06h
            CALL DelD
            MOVF 14h,0        ;Move file 14 into W
            MOVWF 06h
            CALL DelD
            MOVF 15h,0        ;Move file 15 into W
            MOVWF 06h
            CALL DelD
            RETURN

 DelD    DECFSZ 1Bh,1
            GOTO DelD
            MOVLW 00h         ;Zero port B to prevent mirroring
            MOVWF 06
 Clk      BSF 05,0               ;Clock the 4017
            NOP
            BCF 05,0
            RETURN


 Main    MOVLW 50h            ;Each 10h represents 100mS 
            MOVWF 0Ch
 Main1  CALL Cell1               ;Display Cell 1 for 1/2 sec
            DECFSZ 0Ch
            GOTO Main1

            MOVLW 10h            ;Each 10h represents 100mS 
            MOVWF 0Ch
 Main2  CALL Cell2               ;Display Cell 2 for 100mS
            DECFSZ 0Ch
            GOTO Main2

            MOVLW 10h             ;Each 10h represents 100mS 
            MOVWF 0Ch
 Main3  CALL Cell3               ;Display Cell 3 for 100mS
            DECFSZ 0Ch
            GOTO Main3

            MOVLW 10h             ;Each 10h represents 100mS 
            MOVWF 0Ch
 Main4  CALL Cell4               ;Display Cell 4 for 100mS
            DECFSZ 0Ch
            GOTO Main4

            MOVLW 80h             ;Each 10h represents 100mS 
            MOVWF 0Ch
 Main5  CALL Cell5                ;Display Cell 5 for 800mS
            DECFSZ 0Ch
            GOTO Main5
            GOTO Main

            END


The block of numbers below is the HEX file for Experiment-22. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-22.hex   
:100000008316003085008600831258280030910046
:1000100000309200083093000030940000309500CA
:100020003D28003091001C309200143093001C30A9
:100030009400003095003D283E309100223092001F
:1000400022309300223094003E3095003D2841300C
:100050009100413092004130930041309400413092
:1000600095003D2800309100003092000030930050
:1000700000309400003095003D2885140000851064
:1000800011088600502012088600502013088600B0
:1000900050201408860050201508860050200800C3
:1000A0009B0B502800308600051400000510080046
:1000B00050308C0006208C0B5A2810308C001120F8
:1000C0008C0B5F2810308C001C208C0B64281030A7
:1000D0008C0027208C0B692880308C0032208C0B00
:0400E0006E28582806
:00000001FF

 Go to the next page of experiments:    5x7 EXPERIMENTS: Page-9