السلام عليكم
عاوز أدخل رقمين عالكيباد بحيث أنهما يظهران عالشاشة بالعمود الاول منفصلان بمسافة
وحاصل جمعهما التوتال بالسطر الثاني وتستمر العملية لكل الارقام المدخلة
مثلا أدخلت 1 سيظهر الناتج =1
بعد ذلك أدخلت 2 سيظهر الناتج =3
كيف أعمل هذا ؟
كود:
unsigned short kp, cnt,M, oldstate = 0;
int a,b;
char txt[6];
//Keypad moudule connection
char keypadPort at PORTC;
//end keypad module connection
// Lcd pinout settings
sbit LCD_RS at Rb1_bit;
sbit LCD_EN at Rb0_bit;
sbit LCD_D4 at Rb4_bit;
sbit LCD_D5 at Rb5_bit;
sbit LCD_D6 at Rb6_bit;
sbit LCD_D7 at Rb7_bit;
// Pin direction
sbit LCD_RS_Direction at TRISb1_bit;
sbit LCD_EN_Direction at TRISb0_bit;
sbit LCD_D4_Direction at TRISb4_bit;
sbit LCD_D5_Direction at TRISb5_bit;
sbit LCD_D6_Direction at TRISb6_bit;
sbit LCD_D7_Direction at TRISb7_bit; //END lCD MODULE CONNECTION
void main() {
cnt = 0; // Reset counter
Keypad_Init(); // Initialize Keypad
// ANSEL = 0; // Configure AN pins as digital I/O
//ANSELH = 0;
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "Number:"); // Write message text on LCD
Lcd_Out(2, 1, "Total:");
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 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 13: kp = 32; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
}
if (kp = oldstate) { // Pressed key differs from previous
cnt = 1;
//M=0 ;
oldstate = kp;
}
else { // Pressed key is same as previous
cnt++;
}
Lcd_Chr(1, 10, kp); // Print key ASCII value on LCD
if (cnt == 255) { // If counter varialble overflow
cnt = 0;
Lcd_Out(2, 10, " "); //erase
// Lcd_Out(2, 13, " ");
}
// M=kp*kp ; Lcd_Chr(2, 13, M);
WordToStr(cnt, txt); // Transform counter value to string
Lcd_Out(2, 10, txt); // Display counter value on LCD
} while (1);
}