5x7 Display
Experiments
Page 9
EXPERIMENT-23
This experiment shows how to display
a feature (such as an animation) AFTER
a button has been pressed.
Press button "A" and SPLASH will show once:
To test the de-bounce feature, press and release the button very slowly.
Notice that the animation only appears once. This is because the button must
be released for 40h loops before it is recognised again. Try 20h loops
(or less) and the animation will occur twice on some occasions. This proves
how fast the micro is executing the program - it is performing 20h loops of
the program in the time the button is released and the micro picks up the
"bounce-pulses" at the end of the button-release to show SPLASH
the second time.
|
Experiment-23
for "5x7 Display" Project
;PIC16F84 and only F84 chip
;Press
button A
for SPLASH! -
with debounce
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
MOVLW 00h
;Put 00 into W
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
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 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
Splash MOVLW 50h
;Each 10h represents 100mS
MOVWF 0Ch
Splash1 CALL Cell1
;Display Cell 1 for 1/2 sec
DECFSZ 0Ch
GOTO Splash1
MOVLW 10h
;Each 10h represents 100mS
MOVWF 0Ch
Splash2 CALL Cell2
;Display Cell 2 for 100mS
DECFSZ 0Ch
GOTO Splash2
MOVLW 10h
;Each 10h represents 100mS
MOVWF 0Ch
Splash3 CALL Cell3
;Display Cell 3 for 100mS
DECFSZ 0Ch
GOTO Splash3
MOVLW 10h
;Each 10h represents 100mS
MOVWF 0Ch
Splash4 CALL Cell4
;Display Cell 4 for 100mS
DECFSZ 0Ch
GOTO Splash4
MOVLW 08h ;Each 10h represents 100mS
MOVWF 0Ch
Splash5 CALL Cell5
;Display Cell 5 for 50mS
DECFSZ 0Ch
GOTO Splash5
RETURN
Main MOVLW 40h
MOVWF 1Dh
Main1 BTFSC 05,2
;Test for button A. NOT pressed line = LOW
GOTO Main2
;Pressed
MOVF 1Dh,0
;Not pressed
XORLW 00
BTFSC 03,2
;Is file 1D = 0?
GOTO Main1
;Yes
DECF 1Dh,1
;No. Decrement Debounce file
GOTO Main1
Main2 MOVF 1Dh,0
;Move file 1D to W
XORLW 00
BTFSS 03,2
;Is file 1D = 0? Is the zero-flag SET?
GOTO Main1
;No
CALL Splash
;Yes
GOTO Main
END
|
|
|
The block of
numbers below is the HEX file for Experiment-23. Copy and paste
it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-23.hex
|
|
|
:100000008316043085000030860083127328003088
:1000100091000030920008309300003094000030CE
:1000200095003E28003091001C309200143093005F
:100030001C309400003095003E283E309100223064
:10004000920022309300223094003E3095003E28EA
:100050004130910041309200413093004130940092
:10006000413095003E280030910000309200003071
:10007000930000309400003095003E288514000065
:10008000851011088600512012088600512013089F
:100090008600512014088600512015088600512042
:1000A00008009B0B51280030860005140000051045
:1000B000080050308C0007208C0B5B2810308C001F
:1000C00012208C0B602810308C001D208C0B6528B2
:1000D00010308C0028208C0B6A2808308C003320CC
:1000E0008C0B6F28080040309D00051D7D281D08E1
:1000F000003A031975289D0375281D08003A031D51
:0601000075285920732848
:00000001FF |
EXPERIMENT-24
This is an extension of experiment 23. Press button A to start and stop SPLASH
animation. Button A becomes a TOGGLE BUTTON - with START/STOP feature.
It is important to label the flags so that you know exactly what they are
indicating.
The two flags in this experiment detect the same thing (button-press) but
their position in the program makes them detect different features.
Flag 1E,5 send s the micro to the SPLASH routine while 1E,4 detects when the
button is NOT pressed so that the program can determine when a toggle action
has occurred with the button.
Creating a toggle feature takes a lot of thought as the instructions must be
placed in the right places in the program to achieve the desired result.
|
Experiment-24
for "5x7 Display" Project
;PIC16F84 and only F84 chip
;Press button A to START/STOP Splash animation
Start ORG 0x00
BSF 03,5
;Go to page1 to set-up the ports
MOVLW 04h
;Put 04 into W
MOVWF 05h
; to make RA2 input
MOVLW 00h
;Put 00 into W
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
;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 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 BTFSC 05,2
;A pushed? Pushed = HIGH
GOTO Del1
BCF 1E,4
;Clear the button-pushed flag
GOTO Del2
Del1 BSF 1E,4
;Set the button-pushed flag
Del2 DECFSZ 1Bh,1
GOTO Del2
MOVLW 00h
;Zero port B to prevent mirroring
MOVWF 06
Clk BSF 05,0
;Clock the 4017
NOP
BCF 05,0
BTFSS 05,2
;A pushed?
RETURN
;A not pushed
BTFSC 1E,4
;Has the button been released?
RETURN
;No.
BCF 1E,5
;Yes. Don't send Micro to SPLASH
RETURN
Splash MOVLW 50h
;Each 10h represents 100mS
MOVWF 0Ch
Splash1 CALL Cell1
;Display Cell 1 for 1/2 sec
DECFSZ 0Ch
GOTO Splash1
MOVLW 10h
;Each 10h represents 100mS
MOVWF 0Ch
Splash2 CALL Cell2
;Display Cell 2 for 100mS
DECFSZ 0Ch
GOTO Splash2
MOVLW 10h
;Each 10h represents 100mS
MOVWF 0Ch
Splash3 CALL Cell3
;Display Cell 3 for 100mS
DECFSZ 0Ch
GOTO Splash3
MOVLW 10h
;Each 10h represents 100mS
MOVWF 0Ch
Splash4 CALL Cell4
;Display Cell 4 for 100mS
DECFSZ 0Ch
GOTO Splash4
MOVLW 08h
;Each 10h represents 100mS
MOVWF 0Ch
Splash5 CALL Cell5
;Display Cell 5 for 50mS
DECFSZ 0Ch
GOTO Splash5
RETURN
Main BCF 1E,5
;This flag sends micro to SPLASH
BCF 1E,4
;This flag detects button NOT pressed
Main1 BTFSS 05,2 ;Is button A pushed? Pushed = HIGH
GOTO Main2
;Not pressed
BSF 1E,5
;Pressed. Set 1E,5 flag
CALL Splash
GOTO Main1
Main2 BTFSS 1E,5
GOTO Main1
CALL Splash
GOTO Main1
END
|
|
|
The block of
numbers below is the HEX file for Experiment-24. Copy and
paste it into a text program such as TEXTPAD or NOTEPAD and
call it: Expt-24.hex
|
|
|
:100000008316043085000030860083127D2800307E
:1000100091000030920008309300003094000030CE
:1000200095003E28003091001C309200143093005F
:100030001C309400003095003E283E309100223064
:10004000920022309300223094003E3095003E28EA
:100050004130910041309200413093004130940092
:10006000413095003E280030910000309200003071
:10007000930000309400003095003E288514000065
:10008000851011088600512012088600512013089F
:100090008600512014088600512015088600512042
:1000A0000800051955281E1256281E169B0B5628A7
:1000B00000308600051400000510051D08001E1AFA
:1000C00008009E12080050308C0007208C0B652819
:1000D00010308C0012208C0B6A2810308C001D20F0
:1000E0008C0B6F2810308C0028208C0B7428083063
:1000F0008C0033208C0B792808009E121E12051DDF
:1001000084289E1663207F289E1E7F2863207F28D8
:00000001FF |
EXPERIMENT- 25
"BULL'S
EYE"
This is a simple "Hit the LED" game. The LEDs flash randomly on
the screen and the player is required to press button B when the centre LED
is illuminated. When the "Bull's Eye" is hit, a siren sound
will be produced from the piezo.
The program has a number of interesting features.
One of the biggest problems with computers is the generating of random
numbers. Computers are not very good at doing this. In this program we
need to produce random numbers for the LEDs on the screen, and every 6th
to 8th LED needs to be the centre LED. There are two ways to do
this. One is a random number generator and the other is to produce a
long table. If the table is long enough, the player will not
be aware of any pattern or repetition. This is the simplest
approach as we need the centre LED illuminated at regular
intervals.
The second feature is the co-inciding of the button-press with the
illuminated LED. This sounds complicated but it can be done with a
simple sub-routine. To make sure the button is pressed ONLY when the
LED is illuminated, the routine has to check the button is NOT PRESSED
before the centre LED is lit.
This program has only one cycle of operation. You are required to add
more "Bull's Eye's" and make it more complex. The
"Bull's Eye" section in the Main routine is identified. Simply
copy the random LEDs sections (the sets of four instructions in the Main
routine), then add another Bull's
Eye section. Make sure the GOTO statement is anything other than
"x"
The Siren routine has been taken from "Library of Routines"
with a couple of changes.
The Delay routine has been taken from a previous experiment and the
clocking of the "shift register" has been explained
previously.
Even though this program consists of over 100 lines of code, many are
repetitions and other lines of code have been produced previously.
The Delay routine determines the length of time the LED is illuminated
on the screen. Three routines are provided: short, medium and
long.
"Row" sub-routine clocks the shift register (4017) to the
desired row then the required LED is turned on.
If you want to produce a more-complex game, the main program will become
very large. The only alternative is to produce the LEDs via a random
number generator. After every 6 - 10 random number, a "Bull's
Eye" code is generated and in this way an infinite, random game
will be created.
For the moment we will stick to simple, "Linear Programming"
and you can change and improve the "Bull's Eye" program.
|
Experiment-25
for "5x7 Display" Project
;PIC16F84 and only F84 chip
;"Bull's Eye"
Start ORG 0x00
BSF 03,5
;Go to page1 for setting-up the ports
MOVLW 08h
;Put 08 into W
MOVWF 05h
; to make RA3 input
MOVLW 00h
;Put 00 into W
MOVWF 06h
;and make port 6 (port B) all output
BCF 03,5
;Go to page0 for programming
BCF 1E,7
;Clear the flag bit
GOTO Main
Delay1 MOVLW 01
MOVWF 1Ah
Del1A DECFSZ 1Bh,1
GOTO Del1A
DECFSZ 1Ch,1
GOTO Del1A
DECFSZ 1Ah,1
GOTO Del1A
RETURN
Delay2 MOVLW 02
MOVWF 1Ah
Del2A DECFSZ 1Bh,1
GOTO Del2A
DECFSZ 1Ch,1
GOTO Del2A
DECFSZ 1Ah,1
GOTO Del2A
RETURN
Delay3 MOVLW 03
MOVWF 1Ah
Del3A DECFSZ 1Bh,1
GOTO Del3A
DECFSZ 1Ch,1
GOTO Del3A
DECFSZ 1Ah,1
GOTO Del3A
RETURN
Siren MOVLW 01h
; = 1 loop
MOVWF 1Ch
; of Siren sound
SirnD MOVLW 10h
;No of on-off cycles
MOVWF 0Eh
MOVWF 10h
MOVLW 30h
;No of steps
MOVWF 0Fh
MOVLW 50h
;Determines frequency
MOVWF 0Ch
Repeat MOVF 0C,0
MOVWF 0D
On BSF 06,7
DECFSZ 0D,1
GOTO On
MOVWF 0D
Off BCF 06,7
DECFSZ 0D,1
GOTO Off
DECFSZ 10h,1
GOTO Repeat
DECF 0C,1
INCF 0E,1
MOVF 0E,0
MOVWF 10h
DECFSZ 0F,1
GOTO Repeat
DECFSZ 1C,1
;1 cycle of Siren sound
GOTO SirnDel
RETURN
Row1 BSF 05,1 ;The row routine clocks
the 4017 to the required row
NOP
BCF 05,1
Return
Row2 BSF 05,1
NOP
BCF 05,1
NOP
BSF 05,0
NOP
BCF 05,0
Return
Row3 BSF 05,1
NOP
BCF 05,1
NOP
BSF 05,0
NOP
BCF 05,0
NOP
BSF 05,0
NOP
BCF 05,0
Return
Row4 BSF 05,1
NOP
BCF 05,1
NOP
BSF 05,0
NOP
BCF 05,0
NOP
BSF 05,0
NOP
BCF 05,0
NOP
BSF 05,0
NOP
BCF 05,0
RETURN
Row5 BSF 05,1
NOP
BCF 05,1
NOP
BSF 05,0
NOP
BCF 05,0
NOP
BSF 05,0
NOP
BCF 05,0
NOP
BSF 05,0
NOP
BCF 05,0
NOP
BSF 05,0
NOP
BCF 05,0
RETURN
Main CALL Row1
MOVLW 01
MOVWF 06
CALL Delay1
CALL Row5
MOVLW 08
MOVWF 06
CALL Delay2
CALL Row3
MOVLW 20
MOVWF 06
CALL Delay3
CALL Row4
MOVLW 10
MOVWF 06
CALL Delay1
CALL Row1
MOVLW 01
MOVWF 06
CALL Delay1
CALL Row3
MOVLW 20
MOVWF 06
CALL Delay1
CALL Row1
MOVLW 02
MOVWF 06
CALL Delay1
CALL Row2
MOVLW 04
MOVWF 06
CALL Delay1
BTFSC 05,3
;Button B pressed? This is the "Bull's Eye" section
BSF 1E,7
CALL Row3
MOVLW 08
MOVWF 06
CALL Delay1
BTFSS 05,3
GOTO x
BTFSC 1E,7
GOTO x
CALL Siren
x CALL Row5
MOVLW 02
MOVWF 06
CALL Delay1
CALL Row4
MOVLW 08
MOVWF 06
CALL Delay3
CALL Row5
MOVLW 04
MOVWF 06
CALL Delay2
CALL Row5
MOVLW 20
MOVWF 06
CALL Delay2
CALL Row2
MOVLW 10
MOVWF 06
CALL Delay2
CALL Row3
MOVLW 40
MOVWF 06
CALL Delay1
CALL Row3
MOVLW 20
MOVWF 06
CALL Delay1
CALL Row2
MOVLW 40
MOVWF 06
CALL Delay3
BCF 1E,7
GOTO Main
END
|
|
|
The block of
numbers below is the HEX file for Experiment-25. Copy and paste
it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-25.hex
|
|
|
:100000008316083085000030860083129E137B28FB
:1000100001309A009B0B0A289C0B0A289A0B0A288D
:10002000080002309A009B0B13289C0B13289A0B94
:100030001328080003309A009B0B1C289C0B1C28DB
:100040009A0B1C28080001309C0010308E00900094
:1000500030308F0050308C000C088D0086178D0BCF
:100060002E288D0086138D0B3228900B2C288C03A4
:100070008E0A0E0890008F0B2C289C0B2528080058
:1000800085140000851008008514000085100514F3
:1000900000000510080085140000851000000514FC
:1000A000000005100000051400000510080085146C
:1000B0000000851000000514000005100000051464
:1000C000000005100000051400000510080085144C
:1000D0000000851000000514000005100000051444
:1000E00000000510000005140000051000000514B4
:1000F000000005100800402001308600082067201D
:100100000830860011204B20203086001A2057200E
:1001100010308600082040200130860008204B2047
:10012000203086000820402002308600082044202D
:1001300004308600082085199E174B200830860061
:100140000820851DA6289E1BA62823206720023094
:10015000860008205720083086001A2067200430C7
:1001600086001120672020308600112044201030A6
:10017000860011204B204030860008204B20203084
:10018000860008204420403086001A209E137B28D9
:1001900040200830860008205720103086001120AB
:1001A0004B20043086001120672002308600112089
:1001B0004B2020308600082067200430860008206D
:0201C0007B289A
:00000001FF
|
Go to the next
page of experiments:
5x7
EXPERIMENTS: Page-10 |