logo

Select Sidearea

Populate the sidearea with useful widgets. Itโ€™s simple to add images, categories, latest post, social media icon links, tag clouds, and more.
[email protected]
+1234567890
 

2.8.2. Display Keypad 4 x 4 with LCD Character 2 x16

After doing lesson 2.8.1. you can see that how easy to scan keypad and read data out to LED. In this lesson it’s look like lesson 2.8.2. but the data will read out with LCD Character 2 x16.

Figure 2.8.3.Keypad Connection to Microcontroller

Step 1st
Build the circuit as shown in figure 2.8.3. As you seen on figure 2.8.2 P3.0 trough P3.7 is connected to keypad 4 x 4 and LCD Character 2×16 to read keypad data, connected to P0.0 trough P0.7., P2.0 and P2.1 connected to RS and EN each.

Step 2nd
In this step, you must tipe the assembly program to scan your keypad data, we assume that you have already known the editor, we used MIDE-51 to edit the program. ( Download File : exp282.zip , Download Complete Circuit File : Keypad4x4.pdf)

;the following experiment is used to scan  
;keypad 4x4 and result of scan will be released 
;to LCD Character
row1 bit P2.4 
row2 bit P2.5
row3 bit P2.6
row4 bit P2.7
col1 bit P2.0
col2 bit P2.1
col3 bit P2.2
col4 bit P2.3
;
keydata   equ 70h
keybounc  equ 71h
keyport   equ P2
       org 0h
start: call keypad4x4    ;calling subroutine keypad4x4
       Mov A,keydata     ;A = keydata  
       Cjne A,#0FFh,WrLCD;
       sjmp start        ;LOOPING FOREVER PART 1
;
WrLCD: Mov R1,#80h       ;Pick DDRAM 1st row and 1st col
       call write_inst
       Mov R1,A
       call write_data   ;write data
       Sjmp start        ;LOOPING FOREVER PART 2
;
Init_lcd:
    mov r1,#00000001b ;Display clear
    acall write_inst  ;
    mov r1,#00111000b ;Function set,
                      ;Data 8 bit,2 line font 5x7
    acall write_inst  ;
    mov r1,#00001100b ;Display on, 
                      ;cursor off,cursor blink off
    acall write_inst
    mov r1,#00000110b ;Entry mode, Set increment
    acall write_inst
    ret
;
Write_inst:
    clr P2.0  ; RS = P2.0 = 0, write mode instruction
    mov P0,R1 ; D7 s/d D0 = P0 = R1
    setb P2.1 ; EN = 1 = P2.1 
    call delay; call delay time
    clr P2.1  ; EN = 0 = P2.1
    ret
;
Write_data:
    setb P2.0 ; RS = P2.0 = 1, write mode data
    mov P0,R1 ; D7 s/d D0 = P0 = R1
    setb P2.1 ; EN = 1 = P2.1
    call delay; call delay time
    clr p2.1  ; EN = 0 = P2.1
    ret
;
delay: mov R0,#0
delay1:mov R2,#50
       djnz R2,$
       djnz R0,delay1
       ret
;
;====================================
; subroutine scan keypad 4x4
;====================================
Keypad4x4:
       mov keybounc,#50    ;keybounc = 50          
       mov keyport,#0FFh   ;keyport=P2= FF
       clr col1            ;col1= P3.0 = 0
Detect:jb row1,key1        ;jump to Key1 if row1=1
       djnz keybounc,Detect
       mov keydata,#00h    ;Keydata =00h
       ret
;
key1: jb row2,key2         ;jump to key2 if row2=1
      djnz keybounc,key1
      mov keydata,#04h     ;Keydata = 04h
      ret
;
key2: jb row3,key3         ; idem
      djnz keybounc,key2
      mov keydata,#08h
      ret
;
key3: jb row4,key4         ; idem
      djnz keybounc,key3
      mov keydata,#0Ch
      ret
;
key4: setb col1
      clr col2
      jb row1,key5
      djnz keybounc,key4
      mov keydata,#01h
      ret
;
key5: jb row2,key6
      djnz keybounc,key5
      mov keydata,#05h
      ret
;
key6: jb row3,key7
      djnz keybounc,key6
      mov keydata,#09h
      ret
;
key7: jb row4,key8
      djnz keybounc,key7
      mov keydata,#0Dh
      ret
;
key8: setb col2
      clr col3
      jb row1,key9
      djnz keybounc,key8
      mov keydata,#02h
      ret
;
key9: jb row2,keyA
      djnz keybounc,key9
      mov keydata,#06h
      ret
;
keyA: jb row3,keyB
      djnz keybounc,keyA
      mov keydata,#0Ah
      ret
;
keyB: jb row4,keyC
      djnz keybounc,keyB
      mov keydata,#0Eh
      ret
;
keyC: setb col3
      clr col4
      jb row1,keyD
      djnz keybounc,keyC
      mov keydata,#03h
      ret
;
keyD: jb row2,keyE
      djnz keybounc,keyD
      mov keydata,#07h
      ret
;
keyE: jb row3,keyF
      djnz keybounc,keyE
      mov keydata,#0Bh
      ret
;
keyF: jb row4,Nokey
      djnz keybounc,keyF
      mov keydata,#0Fh
      ret
Nokey:mov keydata,#0FFh    
      ret
;================================
;The end of Keypad 4x4 subroutine
;================================
end

Step 3rd
Safe your assembly program above, and name it with key2.asm (for example) Compile the program that you have been save by using MIDE-51, see the software instruction.

Step 4th
Download your hex file ( key2.hex ) into the microcontroller by using Microcontroller ATMEL ISP software, see the instruction.After download this hex file you’ll see the action of Keypad 4 x 4 ( of course if your cable connection and your program are corrected )