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

ADDING PUSH-BUTTONS

Up to now, each of the programs has run as soon as the power was applied to the circuit.
In this section we add 3 push-buttons.
Push-buttons can also be called “Keys” or “input Devices” and to make sure they will be be read instantly, it is important they are “poled” (scanned) on a regular basis.
This involves putting the “Buttons” in a place where the micro is passing very often. A suitable position is inside a delay routine.
Adding push-buttons to a project gives you the capability of selecting, starting or stopping a routine as well as calling one up at any time during the running of another routine.
Writing the code for a set of push buttons can be quite complex as there are a number of things that must be taken into account, to get a push-button to work correctly.
The main problem is DEBOUNCING the button.
Suppose you are using a button to increment a number on a display. When the button is pressed, the program increments the display and returns to scan the button again. This all happens very quickly and the program thinks the button has been pushed again, so the display is incremented once more.
The micro generally goes through a routine so fast that the display can get incremented lots of times before you have time to release the button.
To prevent this from happening, the micro must look to see if the button has been released before another increment can occur.
But there’s still one more feature that has to be included in the program.
When the button is pushed, the contacts make and break a number of times before finally making contact.
The micro sees this as a number of presses and the counter can be advanced a number of counts on a single press.
This also occurs when the button is being released. In some of the experiments, you can see the effect of switch-bounce by pressing and releasing the button very slowly. The counter will count more than one digit or an animation will appear on the screen two times.
To prevent this, the program must have a “loop counter” or delay so that only one count is recorded in say 1/10th of a second.
This is called fully debouncing the switch and this type of routine should be included in all programs to prevent any type of “double-counting.”
The next series of programs in this test section will show how to interface a push-switch to a LED and test it.
The circuit diagram for the project is shown below so you can see how the push-buttons are connected to the microcontroller. When the button is not pressed, the input line sees a LOW. When the button is pressed, the input line sees a HIGH.

SWITCH PROGRAM-1
This program turns on a LED on the display when buttonA is pressed.
In this program there is no debouncing. The program sets up the ports with PortA as input and PortB as output. The program then loops around (poles) the switch looking for a keypress. The program then turns on a LED and loops.
There is an important point to note with the program.
For the 3rd, 4th, 5th and 6th instructions, the program is accessing a special bank of registers that are in a different part of the microcontroller to the programming and port files. We get into the “special section” via the instruction BSF 03,5 and get out of the “special section” via BCF 03,5.
The instruction on line 6: MOVLW 06h moves the “value in W” into a register called the IN/OUT CONTROL REGISTER. This register is called 06 and is not the register we call the PORT REGISTER.
The 8th instruction seems to do the same thing. BUT IT DOESN’T.
The micro has come out of page1 and is in the programming page. The programming page is Page0.
The 8th instruction takes the value in W (we put 00 into W in the 5th instruction) and put it into file 06. We call file 06 PORTB REGISTER. This time file 06 is PortB and the instruction will make all outputs of portB LOW.
The program only works once. You have to turn the power off and on again to re-test the program.

Switch-1 Program for 5x7 Display

;PIC16F84 and only F84 chip
;Detects ButtonA and illuminates a LED

Start  ORG 0x00
       BSF 03,5      ;Go to page1 for setting  IN/OUT
       MOVLW 1Ch     ;Make RA2, RA3 and RA4 inputs
       MOVWF 05h
       MOVLW 00h     ;Put 00 into W
       MOVWF 06h     ;Make all RB lines output
       BCF 03,5      ;Go to Page0 for programming
       MOVWF 06h     ;Put 00 into output port to turn off all LEDs

Loop1   BTFSS 05,2    ;Test button A
       GOTO Loop1    ; line is LOW
Loop2   MOVLW 01h     ;Line is HIGH. Put 1 into W
       MOVWF 06h     ;output 1 to the display
       GOTO Loop2    ;do-nothing in a loop

  END

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

:1000000083161C3085000030860083128600051997
:080010000728013086000928D1
:00000001FF

The next program: Switch-2, is also a very simple program. It tests buttons A, B, C and puts a LED on the screen for each button.

Switch-2 Program for 5x7 Display

;PIC16F84 and only F84 chip ;Detects Buttons A, B and C and illuminates LEDs

 Start  ORG 0x00
        BSF 03,5
        MOVLW 1Ch   ;Make RA2, RA3 and RA4 inputs
        MOVWF 05h
        MOVLW 00h   ;Put 00 into W
        MOVWF 06h   ;Make all RB lines output
        BCF 03,5    ;Go to Page0 for programming
        MOVWF 06h   ;Put 00 into output port to  turn off all LEDs

Loop1   BTFSS 05,2  ;Test button A to see if line is HIGH
        GOTO Loop2  ;
        MOVLW 01h   ;Put 1 into W to turn on lower LED
        MOVWF 06h   ;output 1 to the display
Loop2   BTFSS 05,3  ;Test button B to see if line is HIGH
        GOTO Loop3
        MOVLW 08h   ;Put 08 into W to turn on middle LED
        MOVWF 06h   ;Output 08 to display
Loop3   BTFSS 05,4  ;Test button C to see if line is HIGH
        GOTO Loop1
        MOVLW 40h   ;Put 40h into W to turn on top LED
        MOVWF 06h
        GOTO Loop1  ;Loop all the switches again

    END

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

:1000000083161C3085000030860083128600051997
:100010000B280130860085190F2808308600051A44
:08002000072840308600072884
:00000001FF

Switch-3 Program has debounce. It detects the 3 switches and puts a flashing LED on the screen for each switch. To do this requires a lot of programming. The micro has to scan the keys, toggle the LEDs ON or OFF and flash the LEDs.

Switch-3 Program for 5x7 Display

;PIC16F84 and only F84 chip
;Detects Buttons A, B and C (with debounce) and flashes LEDs

Start   ORG 0x00
        BSF 03,5
        MOVLW 1Ch     ;Make RA2, RA3 and RA4 inputs
        MOVWF 05h
        MOVLW 00h     ;Put 00 into W
        MOVWF 06h     ;Make all RB lines output
        BCF 03,5      ;Go to Page0 for programming

        MOVWF 06h     ;Put 00 into output port to turn off all LEDs
        MOVWF 1Dh     ;zero the debounce file
        MOVWF 1Eh     ;Zero the flag file

Scan1   MOVLW 0FFh
        MOVWF 1Ah
        MOVLW 080h
        MOVWF 1Bh
Scan2   BTFSC 05,2    ;Test if Button A pressed. (Not pressed, line = LOW)
        GOTO AA       ;Button A is pressed
        BTFSS 1E,5    ;A not pressed. Check to see if flag bit 5 is SET
        GOTO Scan3    ;Not SET
        MOVF 1Dh,0    ;Bit 5 SET. Copy 1D into W
        XORLW 00
        BTFSC 03,2    ;Is file 1D = 0?
        GOTO Scan5    ;Debounce file is zero
        DECFSZ 1Dh,1  ;Decrement debounce file
        GOTO Scan5
        BCF 1E,5
Scan3   BTFSC 05,3    ;Test if button B pressed
        GOTO BB       ;B pressed
        BTFSS 1E,6    ;B not pressed. Check to see if flag bit 6 is SET
        GOTO Scan4    ;Not SET
        MOVF 1Dh,0    ;Bit 6 SET. Copy 1D into W
        XORLW 00
        BTFSC 03,2    ;Is file 1D = 0?
        GOTO Scan5    ;Debounce file is zero
        DECFSZ 1Dh,1  ;Decrement debounce file
        GOTO Scan5
        BCF 1E,6
Scan4   BTFSC 05,4    ;Test if button C pressed.
        GOTO CC       ;C pressed
        BTFSS 1E,7    ;C not pressed. Check to see if flag bit 7 is SET
        GOTO Scan5    ;Not SET
        MOVF 1Dh,0    ;Bit 7 SET. Copy 1D into W
        XORLW 00
        BTFSC 03,2    ;Is file 1D = 0?
        GOTO Scan5    ;Debounce file is zero
        DECFSZ 1Dh,1  ;Decrement debounce file
        GOTO Scan5
        BCF 1E,7
Scan5   NOP
Del1    DECFSZ 1Ah,1   ;Delay section
        GOTO Del1
        DECFSZ 1Bh,1
        GOTO Scan2
        BTFSS 1E,2     ;Test for LED A active
        GOTO Scan8
        MOVLW 01
        XORWF 06h,1    ;Toggle LED A
Scan6   BTFSS 1E,3     ;Test for LED B active
        GOTO Scan9
        MOVLW 08
        XORWF 06h,1    ;Toggle LED B
Scan7   BTFSS 1Eh,4    ;Test for LED C active
        GOTO Scan10
        MOVLW 40h
        XORWF 06h,1    ;Toggle LED C
        GOTO Scan1
Scan8   BCF 06h,0
        GOTO Scan6
Scan9   BCF 06h,3
        GOTO Scan7
Scan10  BCF 06h,6
        GOTO Scan1

AA      MOVLW 00
        XORWF 1D,0    ;Is 1D = 0?
        BTFSS 03,2
        GOTO Scan5    ;1D is not zero
        BSF 1E,5      ;1D is zero. Put a flag in 1E for button A
        MOVLW 04h     ;Toggle LED A ON/OFF
        XORWF 1E,1
        MOVLW 10h     ;Put 10h into debounce file 1D
        MOVWF 1Dh
        GOTO Scan5

BB      MOVLW 00
        XORWF 1D,0    ;Is 1D = 0?
        BTFSS 03,2
        GOTO Scan5    ;1D is not zero
        BSF 1E,6      ;1D is zero. Put a flag in 1E for button B
        MOVLW 08h     ;Toggle LED B ON/OFF
        XORWF 1E,1
        MOVLW 10h     ;Put 10h into debounce file 1D
        MOVWF 1Dh
        GOTO Scan5

CC      MOVLW 00
        XORWF 1D,0    ;Is 1D = 0?
        BTFSS 03,2
        GOTO Scan5    ;1D is not zero
        BSF 1E,7      ;1D is zero. Put a flag in 1E for button C
        MOVLW 10h     ;Toggle LED C ON/OFF
        XORWF 1E,1
        MOVLW 10h     ;Put 10h into debounce file 1D
        MOVWF 1Dh
        GOTO Scan5

  END

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

:1000000083161C30850000308600831286009D0018
:100010009E00FF309A0080309B00051D46289E1EE2
:1000200018281D08003A03192E289D0B2E289E1211
:10003000851D50281E1F23281D08003A03192E284D
:100040009D0B2E281E13051E5A289E1F2E281D08A4
:10005000003A03192E289D0B2E289E1300009A0BA0
:100060002F289B0B0D281E1D4028013086069E1D43
:100070004228083086061E1E44284030860609287D
:100080000610372886113B280613092800301D0664
:10009000031D2E289E1604309E0610309D002E282B
:1000A00000301D06031D2E281E1708309E06103036
:1000B0009D002E2800301D06031D2E289E1710308F
:0800C0009E0610309D002E2861
:00000001FF

All the testing has now been done. We have checked the wiring of the microcontroller to the LEDs, the scanning provided by the 4017 chip, the connection of the buttons and the debounce routine. We are now ready for the REAL THING! The programs for the 5x7.
The 5x7 is like a beautifully-bound BLANK notebook. In it you can write anything you like. It can be a murder mystery, poem, short story or complete novel.
Exactly the same applies with this project. You can write one program, 10 programs, add more input or output devices, or join it up with other modules to create a larger screen.
In fact, almost anything is possible and although the screen is only 5 pixels wide by 7 pixels high, it represents a module or “window” that can be expanded to a “Las Vegas” billboard by simply adding more modules.
Without any more discussion, let’s go to the Programs Page: 5x7 EXPERIMENTS: Page-1.



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