INTERFACING KEYBOARD
AND DISPLAY WITH 8051:
The keyboard here we are interfacing
is a matrix keyboard. This key board is designed with a particular rows and
columns. These rows and columns are connected to the microcontroller through
its ports of the micro controller 8051.
Whenever a key is pressed, a row and a column gets shorted through that pressed
key and all the other keys are left open. When a key is pressed only a
bit in the port goes high,which indicates microcontroller, that the key is
pressed.
Once we are sure that one of key in the key board is pressed next our aim is to
identify that key. To do this we firstly check for particular row and
then we check the corresponding column the key board.
To check the row of the pressed key in the keyboard, one of the row is made
high by making one of bit in the output port of 8051 high. This is done
until the row is found out. Once we get the row next out job is to find
out the column of the pressed key. The column is detected by contents in
the input ports with the help of a counter. The content of the input port is
rotated with carry until the carry bit is set.
The contents of the counter is then compared and displayed in the
display. This display is designed using a seven segment display and a BCD
to seven segment decoder IC 7447.
The BCD equivalent number of counter is sent through output port of 8051 and
displays the number of pressed key.
PIN DIAGRAM OF 8279
Intel’s 8279 is a general purpose keyboard display controller
that simultaneously drives the display of a system and interfaces a keyboard
with the CPU.
The
keyboard display controller chip 8279 provides:
a)
A set of four scan lines and eight return lines for interfacing keyboards
b)
A set of eight output lines for interfacing display.
SL0-SL3-Scan Lines:
These lines are used to scan the key board matrix and display digits. These
lines can be programmed as encoded or decoded, using the mode control register.
RL0 - RL7 - Return Lines:
These are the input lines which are connected to one terminal of keys, while
the other terminal of the keys are connected to the decoded scan lines. These
are normally high, but pulled low when a key is pressed.
Algorithm:
1. The 8051 has 4 I/O ports P0
to P3 each with 8 I/O pins, P0.0 to P0.7,P1.0 to P1.7, P2.0 to P2.7, P3.0 to
P3.7. The one of the port P1 (it understood that P1 means P1.0 to P1.7) as an
I/P port for microcontroller 8051, port P0 as an O/P port of microcontroller
8051 and port P2 is used for displaying the number of pressed key.
2. Make all rows of port P0
high so that it gives high signal when key is pressed.
3. See if any key is pressed
by scanning the port P1 by checking all columns for non zero condition.
4. If any key is pressed, to
identify which key is pressed make one row high at a time.
5. Initiate a counter to hold
the count so that each key is counted.
6. Check port P1 for nonzero
condition. If any nonzero number is there in [accumulator], start column
scanning by following step 9.
7. Otherwise make next row
high in port P1.
8. Add a count of 08h to the
counter to move to the next row by repeating steps from step 6.
9. If any key pressed is
found, the [accumulator] content is rotated right through the carry until carry
bit sets, while doing this increment the count in the counter till carry is
found.
10. Move the content in
the counter to display in data field or to memory location
11. To repeat the
procedures go to step 2.
to check that whether any key is pressed
start:
mov a,#00h
mov p1,a
;making all rows of port p1 zero
mov a,#0fh
mov
p1,a
;making all rows of port p1 high
press:
mov a,p2
jz press
;check until any key is pressed
after making sure that any key is pressed
mov
a,#01h ;make one row high at a
time
mov r4,a
mov
r3,#00h ;initiating counter
next:
mov a,r4
mov
p1,a
;making one row high at a time
mov a,p2
;taking input from port A
jnz colscan
;after getting the row jump to check
column
mov a,r4
rl a
;rotate left to check next row
mov r4,a
mov a,r3
add
a,#08h ;increment counter by
08 count
mov r3,a
sjmp next
;jump to check next row
after identifying the row to check the colomn following steps
are followed
colscan: mov r5,#00h
in: rrc
a
;rotate right with carry until get the carry
jc out
;jump on getting carry
inc
r3
;increment one count
jmp in
out: mov a,r3
da
a
;decimal adjust the contents of counter
before display
mov p2,a
jmp start ;repeat
for check next key.
HARDWARE
FOR 8x4 MATRIX KEYBOARD INTERFACE
HARDWARE
FOR 8x8 MATRIX KEYBOARD INTERFACE