Page11
This experiment adds sound to the LED Dice experiment from Page 10. You should have already carried out the Piezo experiments from Piezo Experiments Page1 and Piezo Experiments Page2.
Adding sound to a project needs a little bit of thought. The micro cannot do two things at the same time unless they are multiplexed. In other words they have to be interleaved together so that the micro can jump from one routine to the other very quickly.
Essentially, the micro’s time is completely taken up by scanning the display in all the programs we have presented, and the same applies to creating a tone. There is however, a short delay in the heart of each routine where the micro can go to another routine, carry out a task and return before the delay needs to be ended.
In this way the micro can jump from one sub-routine to another and effectively carry out both operations.
The one thing that has to be remembered is TIMING. In other words the time-interval when the micro is being sent away to another routine, must be accurately worked-out. If not, the sound will not be the correct tone and/or the display will not have the same brightness overall.
In this experiment we have used the existing Scan routine to turn the piezo on and off by setting or clearing the piezo bit. We are just fortunate that the scan-rate is very similar to the tone-rate from a piezo experiment.
The only extra sub-routine we added was Face6B. It turns on the piezo when the “piezo-bit” (Bit 7 of file 1F) is SET.

<!-- //TODO FIX ME: 'cannot find file at images'-->
Experiment-27 for “5x7 Display” Project
;PIC16F84 and only F84 chip
;LED Dice with Sound-1
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
BCF 1F,7 ;Bit for tone
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 BTFSS 1F,7
GOTO Face6B
MOVLW 0EBh ;place the 5 values into the 5
MOVWF 11h ; files to produce the sixth face
MOVLW 80h
MOVWF 13h
Face6A MOVLW 6Bh
MOVWF 12h
MOVLW 6Bh
MOVWF 14h
MOVLW 6Bh
MOVWF 15h
GOTO Scan
Face6B MOVLW 6B ;This sub-routine only allows the
MOVWF 11h ;tone to be produced
MOVLW 00 ;when the final face6 appears on
MOVWF 13h ;the screen.
GOTO Face6A
Scan BSF 05,1 ;Reset 4017
NOP
BCF 05,1
MOVF 11h,0 ;Move file 11 into W
MOVWF 06h
CALL DelD
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
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 BSF 1F,7
CALL XX ;Display until button A pressed
BTFSS 05,2 ;Test for button A
GOTO Main6
BCF 1F,7
GOTO Main
END
The block of numbers below is the HEX file for Experiment-27. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-27.hex
:100000008316043085000030860083129C009F1305 :10001000AE2882070334073406340434023406342D :100020000734033405340234023403340534043411 :1000300002340734063407340434033402340534FC :1000400007340634033402340234033404340534F0 :1000500004340334073404340634073402340334DC :1000600004340534013400309100083092001C3013 :10007000930008309400003095007C2803309100F4 :10008000033092000030930060309400603095009F :100090007C28033091000B3092001C3093006830B4 :1000A0009400603095007C286330910063309200AA :1000B0000030930063309400633095007C286330F7 :1000C00091006B3092001C3093006B3094006330D1 :1000D00095007C289F1F7728EB309100803093009B :1000E0006B3092006B3094006B3095007C286B3045 :1000F00091000030930070288514000085101108CD :1001000086008F20120886008F20130886008F201B :10011000140886008F20150886008F2008009B0B8E :100120008F280030860005140000051008001C0808 :1001300009209D009D0B9F2800309C0097289D0B57 :10014000A22833289D0BA5283E289D0BA8284928C6 :100150009D0BAB2854289D0B6A285F2830308C00FB :1001600097208C0BB0289C0A40308C0097208C0B79 :10017000B6289C0A50308C0097208C0BBC289C0A17 :1001800060308C0097208C0BC2289C0A70308C0049 :1001900097208C0BC8289C0A9F179720051DCC28F8 :0401A0009F13AE28D3 :00000001FF
This is an extension of experiment 27. In this experiment we add sound as a separate sub-routine (called Tone) so you can see how to add it to your own programs. The display represents the face of a dice. The numbers flicker and change and come to rest on a random number. When the face shows “six,” the tone is produced. Press button “A” for the next “throw.”
The program is complete and runs satisfactorily but two areas need improvement.
Experiment-28 for “5x7 Display” Project
;PIC16F84 and only F84 chip
;LED Dice with Sound-2
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
MOVWF 0Fh ;Zero the number of cycles for Tone
BCF 1F,7 ;Bit for tone
GOTO Main
able1 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 06h
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 BTFSC 1F,7
GOTO Face6B
Face6A 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
Face6B DECFSZ 0Fh,1 ;Decrement the tone cycles
GOTO Face6C
INCF 0Fh,1
GOTO Face6A
Face6C BSF 05,1 ;Reset 4017
NOP
BCF 05,1
MOVLW 6Bh ;
MOVWF 06h
CALL Tone
MOVLW 6Bh ;
MOVWF 06h
CALL Tone
MOVLW 00 ;
MOVWF 06h
CALL Tone
MOVLW 6Bh ;
MOVWF 06h
CALL Tone
MOVLW 6Bh ;
MOVWF 06h
CALL Tone
RETURN
Tone MOVLW 0Ah ;The number of cycles
MOVWF 0Dh
Tone1 MOVLW 60h ;the ON and OFF time for the tone
MOVWF 0Eh
MOVLW 80h ;Toggle the piezo line
XORWF 06h,1
Tone2 DECFSZ 0Eh,1
GOTO Tone2
DECFSZ 0Dh,1
GOTO Tone1
GOTO Clk
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 MOVLW 04h ;A 2-file delay routine
MOVWF 0Dh ;to give sufficient time
DelE DECFSZ 0Eh,1 ;for the tone routine
GOTO DelE
DECFSZ 0Dh,1
GOTO DelE
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 BSF 0Fh,5 ;Set 32 cycles for tone
MOVLW 05 ;5 faces before final face
MOVWF 1E
Main1 MOVLW 10h
MOVWF 0Ch
Main2 CALL XX
DECFSZ 0Ch
GOTO Main2
INCF 1C,1
DECFSZ 1Eh,1
GOTO Main1
BSF 1F,7 ;tone will only sound during final display
Main3 CALL XX ;Display until button A pressed
BTFSS 05,2 ;Test for button A
GOTO Main3
BCF 1Fh,7
GOTO Main
END
The block of numbers below is the HEX file for Experiment-28. Copy and paste it into a text program such as TEXTPAD or NOTEPAD and call it: Expt-28.hex
:100000008316043085000030860083129C008F0028 :100010009F13D12882070334073406340434023492 :10002000063407340334053402340234033405340F :1000300004340234073406340734043403340234FD :1000400005340734063403340234023403340434F0 :1000500005340434033407340434063407340234DA :100060000334043405340634013400309100083080 :1000700092001C30930008309400003095009B28BB :100080000330910003309200003093006030940000 :10009000603095009B28033091000B3092001C309B :1000A000930068309400603095009B286330910085 :1000B0006330920000309300633094006330950009 :1000C0009B28633091006B3092001C3093006B30A2 :1000D0009400633095009B289F1B79286B3091001A :1000E0006B309200003093006B3094006B309500C1 :1000F0009B288F0B7D288F0A6E28851400008510A1 :100100006B30860090206B30860090200030860097 :1001100090206B30860090206B3086009020080085 :100120000A308D0060308E00803086068E0B962857 :100130008D0B9228B62885140000851011088600C2 :10014000AE2012088600AE2013088600AE201408E8 :100150008600AE2015088600AE20080004308D0011 :100160008E0BB0288D0BB0280030860005140000DF :10017000051008001C080A209D009D0BC2280030B5 :100180009C00BA289D0BC52835289D0BC8284028FF :100190009D0BCB284B289D0BCE2856289D0B6C28F9 :1001A00061288F1605309E0010308C00BA208C0B11 :1001B000D6289C0A9E0BD4289F17BA20051DDD283F :0401C0009F13D12890 :00000001FF
Go to the next page of experiments: 5x7 PIEZO EXPERIMENTS: Page-1
Quick Links
Legal Stuff
Social Media