# keypad reader

Discussion in 'Programmer's Corner' started by eessoo, Feb 11, 2012.

Thread Status:
Not open for further replies.
1. ### eessoo Thread Starter New Member

Jan 29, 2012
23
0
i need some help with this program
if i input 13.3 on the screen and give output 10?
it should give the same output as the input
i wanna take the input from the lcd and do some calculation to it
i'm using pic16f877a
mikroc pro forpic
the input in the lcd is in char
so i take each digit and add it the equation

for example if the user enter (127)

(output=(output*10)+input)
( kp = kp * 10 + kp1)
0 = 0 * 10 + 1 >>kp=1
1 = 1 * 10 + 2 >> kp = 12
12 = 12*10 + 7 >> kp=127
u get it?!

( kp=kp1/10+kp)<<< this only works if u add (.) to your number

Code ( (Unknown Language)):
1.
2. int key=0;
3. float x;
4. int h=10;
5. char txt[15];
6. float kpt=0;
7.
8.  int keypad(int key)
9.  {
10.            switch (key)
11.              {case 9:
12.              key=49;
13.              break;
14.               case 10:
15.               key=50;
16.              break;
17.               case 11:
18.               key=51;
19.              break;
20.               case 5:
21.               key=52;
22.              break;
23.               case 6:
24.               key=53;
25.              break;
26.               case 7:
27.               key=54;
28.              break;
29.               case 1:
30.               key=55;
31.              break;
32.               case 2:
33.               key=56;
34.              break;
35.               case 3:
36.               key=57;
37.              break;
38.              case 13:
39.              key=13;
40.              break;
41.               case 14:
42.               key=48;
43.               break;
44.               case 15:
45.               key=46;
46.               }
47.               return (key);
48.  }
49. char keypadPort at PORTD;
50. // Lcd pinout settings
51. sbit LCD_RS at RB4_bit;
52. sbit LCD_EN at RB5_bit;
53. sbit LCD_D7 at RB3_bit;
54. sbit LCD_D6 at RB2_bit;
55. sbit LCD_D5 at RB1_bit;
56. sbit LCD_D4 at RB0_bit;
57.
58. // Pin direction
59. sbit LCD_RS_Direction at TRISB4_bit;
60. sbit LCD_EN_Direction at TRISB5_bit;
61. sbit LCD_D7_Direction at TRISB3_bit;
62. sbit LCD_D6_Direction at TRISB2_bit;
63. sbit LCD_D5_Direction at TRISB1_bit;
64. sbit LCD_D4_Direction at TRISB0_bit;
65.
66.
67. void main() {
68.
69.  Keypad_Init();
70.  lcd_init();
71.  while(1)
72.  {
73.          do
74.          key=keypad_key_click();
75.          while(!key);
76.                            key=keypad(key);
77.                         if(key==13)
78.                               {
79.                               lcd_cmd(_lcd_clear);
80.                               break;
81.                               }
82.
83.                         else if(key==46)
84.                          {
85.                                         while(1)
86.                                         {lcd_chr_cp(key);
87.                                           do
88.                                          key=keypad_key_click();
89.                                          while(!key);
90.                                           key=keypad(key);
91.                                           [COLOR="DarkOrange"]kpt=((key-48)/10)+kpt;[/COLOR]
92.
93.                                                          if(key==13)
94.                                                          {lcd_cmd(_lcd_clear);
95.                                                          goto[COLOR="Red"] finaly[/COLOR];}
96.
97.                                          }
98.                                         break;
99.                          }
100.                         else if(key!=13)
101.                          {lcd_chr_cp(key);
102.                          [COLOR="DarkOrange"] kpt=kpt*10+(key-48[/COLOR]);}
103. }
104. [COLOR="red"]finaly:[/COLOR]
105. floattostr(kpt,txt);
106. Lcd_Out_CP(txt);
107. }
108.

Last edited: Feb 11, 2012

May 11, 2009
5,939
1,222
3. ### hgmjr Moderator

Jan 28, 2005
9,030
214
This does seem to be a double posting.

Duplicate posts can only result in confusion.

hgmjr

Thread Status:
Not open for further replies.