simulation of Keypad_Read()

General discussion on mikroC.
Post Reply
Author
Message
msgiri
Posts: 10
Joined: 09 Nov 2009 05:42

simulation of Keypad_Read()

#1 Post by msgiri » 21 Nov 2009 09:55

Keypad_Init() is configured in PORTB
Is it possible to simulate the keypad entry during debugging b changing the bits of PORTB?

zidane86
Posts: 27
Joined: 13 Oct 2009 06:42

#2 Post by zidane86 » 22 Nov 2009 08:43

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

User avatar
anikolic
mikroElektronika team
Posts: 1775
Joined: 17 Aug 2009 16:51
Location: Belgrade
Contact:

#3 Post by anikolic » 25 Nov 2009 11:20

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
Web Department Manager

msgiri
Posts: 10
Joined: 09 Nov 2009 05:42

#4 Post by msgiri » 01 Dec 2009 10:12

Thank you very much, but I could not achieve it.

alexiumus
Posts: 2
Joined: 05 Aug 2010 15:08

Re: simulation of Keypad_Read()

#5 Post by alexiumus » 05 Aug 2010 15:15

Am also working on 4*4 keypad interface and PIC16F877A and LCD display....where do i find these routines keypad_read() ...and all??

User avatar
tihomir.losic
mikroElektronika team
Posts: 2138
Joined: 02 Dec 2009 14:16
Location: Serbia
Contact:

Re: simulation of Keypad_Read()

#6 Post by tihomir.losic » 06 Aug 2010 09:08

Hello,

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);
}
Best regards,

Losic Tihomir
mikroElektronika [Support team]

Post Reply

Return to “mikroC General”