Example 2: Program written in mikroBasic PRO for PIC
program Keypad_Test
dim kp, cnt, oldstate as byte
txt as char[7]
' Keypad module connections
dim keypadPort as byte at PORTD
' End Keypad module connections
' Lcd module connections
dim LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections
main:
oldstate = 0
cnt = 0
Keypad_Init()
ANSEL = 0
ANSELH = 0
Lcd_Init()
Lcd_Cmd(_LCD_CLEAR)
Lcd_Cmd(_LCD_CURSOR_OFF)
Lcd_Out(1, 1, "Key :")
Lcd_Out(2, 1, "Times:")
while TRUE
kp = 0
' Wait for key to be pressed and released
while ( kp = 0 )
kp = Keypad_Key_Click()
wend
' Prepare value for output, transform key to it"s ASCII value
select case kp
'case 10: kp = 42 ' "*"
'case 11: kp = 48 ' "0"
'case 12: kp = 35 ' "#"
'default: kp += 48
MikroElektronika
' Reset counter
' Initialize Keypad
' Configure AN pins as digital I/O
' Initialize LCD
' Clear display
' Cursor off
' Write message text on LCD
' Reset key code variable
' Store key code in kp variable
' Uncomment this block for keypad4x3
case 1
kp = 49 ' 1
' Uncomment this block for keypad4x4
case 2
kp = 50 ' 2
case 3
kp = 51 ' 3
case 4
kp = 65 ' A
case 5
kp = 52 ' 4
case 6
kp = 53 ' 5
case 7
kp = 54 ' 6
case 8
kp = 66 ' B
case 9
kp = 55 ' 7
case 10
kp = 56 ' 8
case 11
kp = 57 ' 9
case 12
kp = 67 ' C
case 13
kp = 42 ' *
case 14
kp = 48 ' 0
case 15
kp = 35 ' #
case 16
kp = 68 ' D
end select
if (kp <> oldstate) then
' Pressed key differs from previous
cnt = 1
oldstate = kp
else
' Pressed key is same as previous
Inc(cnt)
end if
Lcd_Chr(1, 10, kp)
' Print key ASCII value on LCD
if (cnt = 255) then
' If counter varialble overflow
cnt = 0
Lcd_Out(2, 10, "
")
end if
WordToStr(cnt, txt)
' Transform counter value to string
Lcd_Out(2, 10, txt)
' Display counter value on LCD
wend
end.
Keypad 4x4
Need help?
Do you have a question about the Keypad 4x4 and is the answer not in the manual?