Книга: Advanced PIC Microcontroller Projects in C
Program Using a Built-in Keypad Function
Program Using a Built-in Keypad Function
In the program listing in Figure 6.48, a function called getkeypad has been developed to read a key from the keyboard. The mikroC language has built-in functions called Keypad_Read and Keypad_Released to read a key from a keypad when a key is pressed and when a key is released respectively. Figure 6.49 shows a modified program (KEYPAD2.C) listing using the Keypad_Released function to implement the preceding calculator project. The circuit diagram is the same as in Figure 6.46.
/**************************************************************
CALCULATOR WITH KEYPAD AND LCD
==============================
In this project a 4 x 4 keypad is connected to PORTB of a PIC18F452
microcontroller. Also an LCD is connected to PORTC. The project is a simple
calculator which can perform integer arithmetic.
The keys are labeled as follows:
1 2 3 4
5 6 7 8
9 0 Enter
+ ? * /
In this program mikroC built-in functions are used.
Author: Dogan Ibrahim
Date: July 2007
File: KEYPAD2.C
**************************************************************/
#define Enter 12
#define Plus 13
#define Minus 14
#define Multiply 15
#define Divide 16
//
// Start of MAIN program
//
void main() {
unsigned char MyKey, i,j,lcd[5],op[12];
unsigned long Calc, Op1, Op2;
TRISC = 0; // PORTC are outputs (LCD)
//
// Configure LCD
//
Lcd_Init(&PORTC); // LCD is connected to PORTC
Lcd_Cmd(LCD_CLEAR);
Lcd_Out(1,1, "CALCULATOR"); // Display CALCULATOR
Delay_ms(2000);
Lcd_Cmd(LCD_CLEAR);
//
// Configure KEYPAD
//
Keypad_Init(&PORTB); // Keypad on PORTB
//
// Program loop
//
for(;;) // Endless loop
{
MyKey = 0;
Op1 = 0;
Op2 = 0;
Lcd_Out(1,1, "No1: "); // Display No1:
while(1) {
do // Get first number
MyKey = Keypad_Released();
while(!MyKey);
if (MyKey == Enter) break; // If ENTER pressed
if (MyKey == 10) MyKey = 0; // If 0 key pressed
Lcd_Chr_Cp(MyKey + '0');
Op1 = 10*Op1 + MyKey;
}
Lcd_Out(2,1, "No2: "); // Display No2:
while(1) // Get second no
{
do
MyKey = Keypad_Released(); // Get second number
while(!MyKey);
if (MyKey == Enter) break; // If ENTER pressed
if (MyKey == 10) MyKey = 0; // If 0 key pressed
Lcd_Chr_Cp(MyKey + '0');
Op2 = 10*Op2 + MyKey;
}
Lcd_Cmd(LCD_CLEAR);
Lcd_Out(1,1, "Op: "); // Display Op:
do
MyKey = Keypad_Released(); // Get operation
while(!MyKey);
Lcd_Cmd(LCD_CLEAR);
Lcd_Out(1,1, "Res="); // Display Res=
switch(MyKey) // Perform the operation
{
case Plus:
Calc = Op1 + Op2; // If ADD
break;
case Minus:
Calc = Op1 - Op2; // If Subtract
break;
case Multiply:
Calc = Op1 * Op2; // If Multiply
break;
case Divide:
Calc = Op1 / Op2; // If Divide
break;
}
LongToStr(Calc, op); // Convert to string
//
// Remove leading blanks
//
j=0;
for(i=0;i<=11;i++) {
if (op[i] != ' ') // If a blank
{
lcd[j]=op[i];
j++;
}
}
Lcd_Out_Cp(lcd); // Display result
Delay_ms(5000); // Wait 5 seconds
Lcd_Cmd(LCD_CLEAR);
}
}
Figure 6.49: Modified program listing
Before using the Keypad_Released function we have to call the Keypad_Init function to tell the microcontroller what the keypad is connected to. Keypad_Released detects when a key is pressed and then released. When released, the function returns a number between 1 and 16 corresponding to the key pressed. The remaining parts of the program are the same as in Figure 6.48.
- Project Hardware
- EXTERNAL FUNCTION DIRECTORY
- Chapter 9. How a rule is built
- Caveats using NAT
- Using Double Quotes to Resolve Variables in Strings with Embedded Spaces
- 2. How to Apply These Terms to Your New Programs
- The Programmers
- Data Binding Using the GridView Control
- Using the kill Command to Control Processes
- Для чего нужны папки Windows, Documents and Settings, Program Files и Temp?
- CHAPTER 4 Functions and Libraries in mikroC
- Можно ли указать использование по умолчанию вместо C:Program Files другого каталога для установки программ?