HomeArticlesProjectsBlogContact
Articles
5x7 Display
Colin Mitchell
Colin Mitchell
Make sure to subscribe to our newsletter and be the first to know the news.

Table Of Contents

01
Experiments
02
EXPERIMENT-26 LED Dice

Experiments

Page9


EXPERIMENT-26 LED Dice

This experiment is very similar to some of the LED Dice programs you have seen in other magazines - only it’s BETTER!
Instead of using a single LED to indicate the numbers on the face of a dice (actually a single Dice is called a Die!), we have used a group of LEDs. It’s difficult to get a good pattern for the spots on a 5x7 matrix but we have done a reasonable job. Your challenge is to improve the layout or produce a special display.
Once the pattern for the numbers has been worked out on paper (as shown in the diagram below), the values can be put into a table or set of sub-routines. Five values are needed for each of the six numbers as the display shows the complete face of the dice.
The next thing is to decide on the random number generator. We have already explained the two ways of generating random numbers; via a computer program or via a table. On a previous page we generated random numbers via a computer program for a tumbling dice and found the program was heavily biased towards two of the numbers. We then had to “weight” or modify the program to create an even distribution.
By producing a table, you can adjust any value to suit a particular outcome and not have to worry about the “accuracy of statistics” to come to your rescue thousands of tosses down the track!
So, where do you start? I simply looked at the previous experiments and in Expt 18, found exactly what I needed. It shows how to scan 5 cells of an animation. So, I copied the 100 lines of code and got a very good start. From the diagram below, the value for each file was placed in each sub-routine and a sixth sub-routine included in the program. The Main program was changed to allow the six Face sub-routines to be called and the project was run and tested to see the result on the display.

The instruction for Button A was then added to Main6 and a sub-routine (called XX) was added that CALLed table1. The result from the table is a number from 1 to 7. This is where a clever feature comes in. If the table value is “1”, the result after decrementing is zero and this indicates the end of table. The “table pointer” (also called a Jump Value) is zeroed (file 1C) so that the program starts at the top of the table again. This gives us 6 remaining values and by decrementing the result from the table the program can be sent to Face 1, 2, 3,4 5, or 6.
Each of the Face sub-routines loads 5 files with values that will illuminate the required LEDs on the display and the micro is sent to the Scan routine to provide one pass of the display. To scan the display for 1/10th of a second, for example, requires a number of loops of the Scan routine and this is achieved in the Main routine. The “on time” for each number can be adjusted by the value loaded into file 0C. We have progressively increased this time to give the effect of the dice slowing down.
The main routine displays 5 brief numbers on the display then settles in a loop with the sixth value. Pressing button A will take the micro out of the loop.
The Jump Value for the table is incremented in the Main routine.
The number of values in the table is not divisible by 6 so that the program will go through the table a number of times before the same sequence is repeated.

Experiment-26 for “5x7 Display” Project
;PIC16F84 and only F84 chip
;LED Dice

Start   ORG 0x00  
        BSF 03,5    ;Go to page1 for setting-up the ports  
        MOVLW 04h   ;Put 04 into W   
        MOVWF 05h   ; to make RA2 input for button A   
        MOVLW 00h   ;Put 00 into W   
        MOVWF 06h   ;and make port 6 (port B) all output  
        BCF 03,5    ;Go to page0 for programming  
        MOVWF 1Ch  
        GOTO Main  
  
Table1  ADDWF 02h,1  ;Add W to Program Counter  
        RETLW 03h  
        RETLW 07h  
        RETLW 06h  
        RETLW 04h  
        RETLW 02h  
        RETLW 06h  
        RETLW 07h  
        RETLW 03h  
        RETLW 05h  
        RETLW 02h  
        RETLW 02h  
        RETLW 03h  
        RETLW 05h  
        RETLW 04h  
        RETLW 02h  
        RETLW 07h  
        RETLW 06h  
        RETLW 07h  
        RETLW 04h  
        RETLW 03h  
        RETLW 02h  
        RETLW 05h  
        RETLW 07h  
        RETLW 06h  
        RETLW 03h  
        RETLW 02h  
        RETLW 02h  
        RETLW 03h  
        RETLW 04h  
        RETLW 05h  
        RETLW 04h  
        RETLW 03h  
        RETLW 07h  
        RETLW 04h  
        RETLW 06h  
        RETLW 07h  
        RETLW 02h  
        RETLW 03h  
        RETLW 04h  
        RETLW 05h  
        RETLW 01h  
  
Face1   MOVLW 00h   ;place the 5 values into the 5   
        MOVWF 11h   ; files to produce the first face  
        MOVLW 08h  
        MOVWF 12h  
        MOVLW 1Ch  
        MOVWF 13h  
        MOVLW 08h  
        MOVWF 14h  
        MOVLW 00h  
        MOVWF 15h  
        GOTO Scan  
  
Face2   MOVLW 03h    ;place the 5 values into the 5   
        MOVWF 11h    ; files to produce the second face  
        MOVLW 03h    
        MOVWF 12h  
        MOVLW 00h  
        MOVWF 13h  
        MOVLW 60h  
        MOVWF 14h  
        MOVLW 60h  
        MOVWF 15h  
        GOTO Scan  
  
Face3   MOVLW 03h   ;place the 5 values into the 5   
        MOVWF 11h   ; files to produce the third face  
        MOVLW 0Bh    
        MOVWF 12h  
        MOVLW 1Ch  
        MOVWF 13h  
        MOVLW 68h  
        MOVWF 14h  
        MOVLW 60h  
        MOVWF 15h  
        GOTO Scan  
  
Face4   MOVLW 63h    ;place the 5 values into the 5   
        MOVWF 11h    ; files to produce the fourth face  
        MOVLW 63h   
        MOVWF 12h  
        MOVLW 00h  
        MOVWF 13h  
        MOVLW 63h  
        MOVWF 14h  
        MOVLW 63h  
        MOVWF 15h  
        GOTO Scan  
  
Face5   MOVLW 63h    ;place the 5 values into the 5   
        MOVWF 11h    ; files to produce the fifth face  
        MOVLW 6Bh    
        MOVWF 12h  
        MOVLW 1Ch  
        MOVWF 13h  
        MOVLW 6Bh  
        MOVWF 14h  
        MOVLW 63h  
        MOVWF 15h  
        GOTO Scan  
  
Face6   MOVLW 6Bh    ;place the 5 values into the 5   
        MOVWF 11h     ; files to produce the sixth face  
        MOVLW 6Bh    
        MOVWF 12h  
        MOVLW 00h  
        MOVWF 13h  
        MOVLW 6Bh  
        MOVWF 14h  
        MOVLW 6Bh  
        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  
  
XX      MOVF 1Ch,0    ;Move 1C to W  
        CALL Table1  
        MOVWF 1Dh     ;Move W to 1D for decrementing  
        DECFSZ 1Dh,1  
        GOTO XX1  
        MOVLW 00      ;Detects end of table  
        MOVWF 1Ch     ;Zero 1C to start at top of table  
        GOTO XX  
XX1     DECFSZ 1Dh,1  
        GOTO XX2  
        GOTO Face1  
XX2     DECFSZ 1Dh,1  
        GOTO XX3  
        GOTO Face2  
XX3     DECFSZ 1Dh,1  
        GOTO XX4  
        GOTO Face3  
XX4     DECFSZ 1Dh,1  
        GOTO XX5  
        GOTO Face4  
XX5     DECFSZ 1Dh,1   
        GOTO Face6   
        GOTO Face5  
  
Main    MOVLW 30h     ;Each 10h represents 100mS   
        MOVWF 0Ch  
Main1   CALL XX   
        DECFSZ 0Ch  
        GOTO Main1  
        INCF 1C  
  
        MOVLW 40h     ;Each 10h represents 100mS   
        MOVWF 0Ch  
Main2   CALL XX       ;Display Face for 400mS  
        DECFSZ 0Ch  
        GOTO Main2  
        INCF 1C  
        
        MOVLW 50h     ;Each 10h represents 100mS   
        MOVWF 0Ch  
Main3   CALL XX       ;Display Face for 500mS  
        DECFSZ 0Ch  
        GOTO Main3  
        INCF 1C  
  
        MOVLW 60h     ;Each 10h represents 100mS   
        MOVWF 0Ch  
Main4   CALL XX       ;Display Face for 600mS  
        DECFSZ 0Ch  
        GOTO Main4  
        INCF 1C  
        
        MOVLW 70h     ;Each 10h represents 100mS   
        MOVWF 0Ch  
Main5   CALL XX       ;Display Face for 700mS  
        DECFSZ 0Ch  
        GOTO Main5  
        INCF 1C  
  
Main6   CALL XX       ;Display until button A pressed  
        BTFSS 05,2    ;Test for button A  
        GOTO Main6  
        GOTO Main  
  
  END  


The DICE

The block of numbers below is the HEX file for Experiment-26. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-26.hex

:100000008316043085000030860083129C00A628E9
:1000100082070334073406340434023406340734C8
:100020000334053402340234033405340434023416
:1000300007340634073404340334023405340734F7
:1000400006340334023402340334043405340434F3
:1000500003340734043406340734023403340434DC
:100060000534013400309100083092001C309300B8
:10007000083094000030950074280330910003305C
:100080009200003093006030940060309500742836
:10009000033091000B3092001C30930068309400C4
:1000A0006030950074286330910063309200003016
:1000B000930063309400633095007428633091009E
:1000C0006B3092001C3093006B30940063309500CD
:1000D00074286B3091006B309200003093006B30CD
:1000E00094006B3095007428851400008510110869
:1000F0008600872012088600872013088600872044
:1001000014088600872015088600872008009B0BAE
:1001100087280030860005140000051008001C0820
:1001200008209D009D0B972800309C008F289D0B78
:100130009A2832289D0B9D283D289D0BA0284828F1
:100140009D0BA32853289D0B69285E2830308C0016
:100150008F208C0BA8289C0A40308C008F208C0BA1
:10016000AE289C0A50308C008F208C0BB4289C0A3F
:1001700060308C008F208C0BBA289C0A70308C0069
:100180008F208C0BC0289C0A8F20051DC428A62810
:00000001FF

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



Colin Mitchell

Colin Mitchell

Expertise

electronics
writing
PIC-Chips

Social Media

instagramtwitterwebsite

Related Posts

TODO
Transistor Test
© 2021, All Rights Reserved.

Quick Links

Advertise with usAbout UsContact Us

Social Media