Keypad_Init() is configured in PORTB
Is it possible to simulate the keypad entry during debugging b changing the bits of PORTB?
simulation of Keypad_Read()
u mean simulating the pressing the key by programming instead of connecting it and pressing it for real ?
emm that i am curios also u can call a output pin high by using PORTB.F0 = 1
but input pin i dont think u can make it so
if for the purpose of testing why no take the supply voltage thru a resistor and then connect to the 2 pin u want directly to see the result
emm that i am curios also u can call a output pin high by using PORTB.F0 = 1
but input pin i dont think u can make it so
if for the purpose of testing why no take the supply voltage thru a resistor and then connect to the 2 pin u want directly to see the result
Hi,
This is a bit tricky to do, bu it can be done. If you are using just software simulator, and for example the kp = Keypad_Read(); command to read the key. When you reach this line in debugging, you have to enter the assembly level with ALT+D and follow the path of execution. Suppose the keypad port is PORTC, in certain moment, the scanning lines are set to 1, which means they are output. When PORTC is set to 0xF0, you should select the right combination as if the key is pressed, and continue with program execution. For example, for the first key on the first line set PORTC to 0xF1. When will you have to intervene and manually set PORTC depends on how you organize your program. So analyze a little bit how library works, by following assembly, and you might be able to simulate a key press.
Best regards,
Aleksandar
This is a bit tricky to do, bu it can be done. If you are using just software simulator, and for example the kp = Keypad_Read(); command to read the key. When you reach this line in debugging, you have to enter the assembly level with ALT+D and follow the path of execution. Suppose the keypad port is PORTC, in certain moment, the scanning lines are set to 1, which means they are output. When PORTC is set to 0xF0, you should select the right combination as if the key is pressed, and continue with program execution. For example, for the first key on the first line set PORTC to 0xF1. When will you have to intervene and manually set PORTC depends on how you organize your program. So analyze a little bit how library works, by following assembly, and you might be able to simulate a key press.
Best regards,
Aleksandar
Web Department Manager
Re: simulation of Keypad_Read()
Am also working on 4*4 keypad interface and PIC16F877A and LCD display....where do i find these routines keypad_read() ...and all??
- tihomir.losic
- mikroElektronika team
- Posts: 2138
- Joined: 02 Dec 2009 14:16
- Location: Serbia
- Contact:
Re: simulation of Keypad_Read()
Hello,
please, try this code (mikroC PRO for PIC, PIC16F877A, EasyPIC6):Best regards,
Losic Tihomir
please, try this code (mikroC PRO for PIC, PIC16F877A, EasyPIC6):
Code: Select all
/* NOTES:
- Pull-down PORTD.*/
unsigned short kp, cnt, oldstate = 0;
char txt[6];
// Keypad module connections
char keypadPort at PORTD;
// End Keypad module connections
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
void main() {
cnt = 0; // Reset counter
Keypad_Init(); // Initialize Keypad
ADCON1 = 0x06;
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "Key :"); // Write message text on LCD
Lcd_Out(2, 1, "Times:");
do {
kp = 0; // Reset key code variable
// Wait for key to be pressed and released
do
kp = Keypad_Key_Click(); // Store key code in kp variable
while (!kp);
// Prepare value for output, transform key to it's ASCII value
switch (kp) {
case 1: kp = 49; break; // 1
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
case 16: kp = 68; break; // D
}
if (kp != oldstate) { // Pressed key differs from previous
cnt = 1;
oldstate = kp;
}
else { // Pressed key is the same as previous
cnt++;
}
Lcd_Chr(1, 10, kp); // Print key ASCII value on LCD
if (cnt == 255) { // If counter variable overflow
cnt = 0;
Lcd_Out(2, 10, " ");
}
WordToStr(cnt, txt); // Transform counter value to string
Lcd_Out(2, 10, txt); // Display counter value on LCD
} while (1);
}
Losic Tihomir
mikroElektronika [Support team]