Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

keypad interfacing problem plz help..

Status
Not open for further replies.

akhn_666

Newbie level 2
Newbie level 2
Joined
Aug 19, 2013
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Visit site
Activity points
30
kello im trying to display something on lcd when i press some specific button on keypad..the program i wrote compiles correctly but it doesnt work when i load it in Proteus plz help...
my program is as under






Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
char keypadPort at PORTC;
 
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;
 
 
void main()
              {
  
 
  
   unsigned char kp;
   keypad_Init();                     //keypad initializing
   ADCON1        = 0x0F;                    // Set AN pins to Digital I/O
   CMCON         = 0X01;                  // Disable comparators
 
   Lcd_Init();                             // Initialize LCD
   Lcd_Cmd(_LCD_CLEAR);                   // Clear display
   Lcd_Cmd(_LCD_CURSOR_OFF);             // Cursor off
 
 
   do
    {
   kp = 0;                                // Reset key code variable
 
    // Wait for key to be pressed and released
    do
    {
     //kp = Keypad_Key_Press();          // Store key code in kp variable
      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 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
    //case 11: kp = 48; break;  // '0'
    //case 12: kp = 35; break;  // '#'
    //default: kp += 48;
     case 1:kp=49; break;  // 1
    case 2:kp=50; break;  // 2
    case 3:kp=51; break;  // 3
    case 4:kp=52; break;  // 4
    case 5:kp=53; break;  // 5
    case 6:kp=54; break;  // 6
    case 7:kp=55; break;  // 7
    case 8:kp=56; break;  // 8
    case 9:kp=57; break;  // 9
    case 10:kp=48; break; // 0
    case 11:kp=42; break; // *
    case 12:kp=35; break; // #
    case 13:kp=65; break; // A
    case 14:kp=66; break; // B
    case 15:kp=67; break; // C
    case 16:kp=68; break; // D
 
           }
 
 
 
      if
      (kp = 48 )
       {
       lcd_out(1,1,"waiting");
          }
       //delay_ms(100);
      // displ[] = "waiting";
       //oldstate = kp;
 
 
        if
       (kp = 42 )
          {
       lcd_out(1,1,"calling");
       }
       //displ[] = "calling";
 
        if
       (kp = 35 )
              {
       lcd_out(1,1,"end call");
       }
 
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
       Lcd_Cmd(_LCD_CURSOR_OFF);
 
 
         }
       while(1);
            }

 
Last edited by a moderator:

the condition will always true, "=" is assignment operator.
Code:
if(kp=48)

we have to use comparison operator "==" for compare the values.
Code:
if(kp==48)
 
Last edited by a moderator:

And also you are clearing and Turning OFF the LCD after every write then how you could see them???

Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if
      (kp == 48 )
       {
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
 
       lcd_out(1,1,"waiting");
       }
 
 
        if
       (kp == 42 )
        {
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
 
       lcd_out(1,1,"calling");
       }
 
        if
       (kp == 35 )
       {
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
 
       lcd_out(1,1,"end call");
       }


turn ON the lcd in lcd_init
 

kello im trying to display something on lcd when i press some specific button on keypad..the program i wrote compiles correctly but it doesnt work when i load it in Proteus plz help...
my program is as under






Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
char keypadPort at PORTC;
 
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;
 
 
void main()
              {
  
 
  
   unsigned char kp;
   keypad_Init();                     //keypad initializing
   ADCON1        = 0x0F;                    // Set AN pins to Digital I/O
   CMCON         = 0X01;                  // Disable comparators
 
   Lcd_Init();                             // Initialize LCD
   Lcd_Cmd(_LCD_CLEAR);                   // Clear display
   Lcd_Cmd(_LCD_CURSOR_OFF);             // Cursor off
 
 
   do
    {
   kp = 0;                                // Reset key code variable
 
    // Wait for key to be pressed and released
    do
    {
     //kp = Keypad_Key_Press();          // Store key code in kp variable
      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 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
    //case 11: kp = 48; break;  // '0'
    //case 12: kp = 35; break;  // '#'
    //default: kp += 48;
     case 1:kp=49; break;  // 1
    case 2:kp=50; break;  // 2
    case 3:kp=51; break;  // 3
    case 4:kp=52; break;  // 4
    case 5:kp=53; break;  // 5
    case 6:kp=54; break;  // 6
    case 7:kp=55; break;  // 7
    case 8:kp=56; break;  // 8
    case 9:kp=57; break;  // 9
    case 10:kp=48; break; // 0
    case 11:kp=42; break; // *
    case 12:kp=35; break; // #
    case 13:kp=65; break; // A
    case 14:kp=66; break; // B
    case 15:kp=67; break; // C
    case 16:kp=68; break; // D
 
           }
 
 
 
      if
      (kp = 48 )
       {
       lcd_out(1,1,"waiting");
          }
       //delay_ms(100);
      // displ[] = "waiting";
       //oldstate = kp;
 
 
        if
       (kp = 42 )
          {
       lcd_out(1,1,"calling");
       }
       //displ[] = "calling";
 
        if
       (kp = 35 )
              {
       lcd_out(1,1,"end call");
       }
 
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
       Lcd_Cmd(_LCD_CURSOR_OFF);
 
 
         }
       while(1);
            }


Code:
char keypadPort at PORTC;
 
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;
 
 
void main()
              {
  
 
  
   unsigned char kp;
   keypad_Init();                     //keypad initializing
   ADCON1        = 0x0F;                    // Set AN pins to Digital I/O
   CMCON         = 0X01;                  // Disable comparators
 
   Lcd_Init();                             // Initialize LCD
   Lcd_Cmd(_LCD_CLEAR);                   // Clear display
   Lcd_Cmd(_LCD_CURSOR_OFF);             // Cursor off
 
 
   do
    {
   kp = 0;                                // Reset key code variable
 
    // Wait for key to be pressed and released
    do
    {
     //kp = Keypad_Key_Press();          // Store key code in kp variable
      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 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
    //case 11: kp = 48; break;  // '0'
    //case 12: kp = 35; break;  // '#'
    //default: kp += 48;
     case 1:kp=49; break;  // 1
    case 2:kp=50; break;  // 2
    case 3:kp=51; break;  // 3
    case 4:kp=52; break;  // 4
    case 5:kp=53; break;  // 5
    case 6:kp=54; break;  // 6
    case 7:kp=55; break;  // 7
    case 8:kp=56; break;  // 8
    case 9:kp=57; break;  // 9
    case 10:kp=48; break; // 0
    case 11:kp=42; break; // *
    case 12:kp=35; break; // #
    case 13:kp=65; break; // A
    case 14:kp=66; break; // B
    case 15:kp=67; break; // C
    case 16:kp=68; break; // D
 
           }
 
 
 
      if
      (kp == 48 )
       {
       lcd_out(1,1,"waiting");
          }
       //delay_ms(100);
      // displ[] = "waiting";
       //oldstate = kp;
 
 
        if
       (kp == 42 )
          {
       lcd_out(1,1,"calling");
       }
       //displ[] = "calling";
 
        if
       (kp == 35 )
              {
       lcd_out(1,1,"end call");
       }
 
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
       Lcd_Cmd(_LCD_CURSOR_OFF);
 
 
         }
       while(1);
            }
 

Code:
char keypadPort at PORTC;
 
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;
 
 
void main()
              {
  
 
  
   unsigned char kp;
   keypad_Init();                     //keypad initializing
   ADCON1        = 0x0F;                    // Set AN pins to Digital I/O
   CMCON         = 0X01;                  // Disable comparators
 
   Lcd_Init();                             // Initialize LCD
   Lcd_Cmd(_LCD_CLEAR);                   // Clear display
   Lcd_Cmd(_LCD_CURSOR_OFF);             // Cursor off
 
 
   do
    {
   kp = 0;                                // Reset key code variable
 
    // Wait for key to be pressed and released
    do
    {
     //kp = Keypad_Key_Press();          // Store key code in kp variable
      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 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
    //case 11: kp = 48; break;  // '0'
    //case 12: kp = 35; break;  // '#'
    //default: kp += 48;
     case 1:kp=49; break;  // 1
    case 2:kp=50; break;  // 2
    case 3:kp=51; break;  // 3
    case 4:kp=52; break;  // 4
    case 5:kp=53; break;  // 5
    case 6:kp=54; break;  // 6
    case 7:kp=55; break;  // 7
    case 8:kp=56; break;  // 8
    case 9:kp=57; break;  // 9
    case 10:kp=48; break; // 0
    case 11:kp=42; break; // *
    case 12:kp=35; break; // #
    case 13:kp=65; break; // A
    case 14:kp=66; break; // B
    case 15:kp=67; break; // C
    case 16:kp=68; break; // D
 
           }
 
 
 
      if
      (kp == 48 )
       {
       lcd_out(1,1,"waiting");
          }
       //delay_ms(100);
      // displ[] = "waiting";
       //oldstate = kp;
 
 
        if
       (kp == 42 )
          {
       lcd_out(1,1,"calling");
       }
       //displ[] = "calling";
 
        if
       (kp == 35 )
              {
       lcd_out(1,1,"end call");
       }
 
       Lcd_Cmd(_LCD_CLEAR);                   // Clear display
       Lcd_Cmd(_LCD_CURSOR_OFF);
 
 
         }
       while(1);
            }

still not working :(

- - - Updated - - -

still not working :(
 

this working code of keypad and lcd. I upload schematic in proteus and project in mikroc. This from help of mikroC. It displays the pressed button on lcd and also display times of pressing button. Be free to ask any question.
 

Attachments

  • display pressed button on lcd.rar
    61.9 KB · Views: 75

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top