سلام..
یک برنامه نوشتم برای اینکه بدون آی سی واسط 8 پین مربوط به کیپد رو به هدر برد LPC1768 وصل کنم و با فشردن یک کلید نتیجه رو روی LCD 2*16 نشون بدم...
ولی چیزی نشون نمیده فقط مکان 1و1 چشمک می زنه....
کیپد متصل به P2 (0...7( است....
این برنامه است....

یک برنامه نوشتم برای اینکه بدون آی سی واسط 8 پین مربوط به کیپد رو به هدر برد LPC1768 وصل کنم و با فشردن یک کلید نتیجه رو روی LCD 2*16 نشون بدم...
ولی چیزی نشون نمیده فقط مکان 1و1 چشمک می زنه....
کیپد متصل به P2 (0...7( است....
این برنامه است....
کد:
#include "LPC17xx.H"
#define LCD_PORT_0
#define LCD_RS 4
#define LCD_E 5
#define LCD_DB4 7
#define LCD_DB5 8
#define LCD_DB6 9
#define LCD_DB7 10
#include "lcd2.h"
void delay (unsigned long tick) { /* Delay Function */
unsigned long dly = tick*300;
while(dly--);
}
int main()
{
unsigned int keystatus;
unsigned int ScanKeypad(void);
LPC_GPIO2->FIODIR = 0x000000F0; // COLUMNS ARE INPUT & rows are output
lcd_init();
lcd_clear();
cursor_off();
while(1)
{
keystatus=ScanKeypad();
if(keystatus!=0)
{ // atleast one key pressed so debounce.
delay(1000); //wait
keystatus=keystatus&ScanKeypad(); // get verified key presses after debounce
switch(keystatus)
{
case 0x0001:lcd_clear(); lcd_gotoxy(1,1);lcd_puts(0);break;
case 0x0002: lcd_clear();lcd_gotoxy(1,1);lcd_puts(1);break;
case 0x0004: lcd_clear();lcd_gotoxy(1,1);lcd_puts(2);break;
case 0x0008: lcd_clear();lcd_gotoxy(1,1);lcd_puts(3);break;
case 0x0010: lcd_clear();lcd_gotoxy(1,1);lcd_puts(4);break;
case 0x0020: lcd_clear();lcd_gotoxy(1,1);lcd_puts(5);break;
case 0x0040: lcd_clear();lcd_gotoxy(1,1);lcd_puts(6);break;
case 0x0080: lcd_clear();lcd_gotoxy(1,1);lcd_puts(7);break;
case 0x0100: lcd_clear();lcd_gotoxy(1,1);lcd_puts(8);break;
case 0x0200: lcd_clear();lcd_gotoxy(1,1);lcd_puts(9);break;
case 0x0400: lcd_clear();lcd_gotoxy(1,1);lcd_puts(10);break;
case 0x0800: lcd_clear();lcd_gotoxy(1,1);lcd_puts(11);break;
case 0x1000: lcd_clear();lcd_gotoxy(1,1);lcd_puts(12);break;
case 0x2000: lcd_clear();lcd_gotoxy(1,1);lcd_puts(13);break;
case 0x4000: lcd_clear();lcd_gotoxy(1,1);lcd_puts(14);break;
case 0x8000: lcd_clear();lcd_gotoxy(1,1);lcd_puts(15);break;
default: lcd_clear();lcd_gotoxy(1,1);lcd_puts(16);break; // display H if more than one key pressed at a time
}
}
}
}
//****************************************************************************************
//Function ScanKeypad()
unsigned int ScanKeypad(void)
{
unsigned int keys,keys_tmp;
LPC_GPIO2->FIOCLR = 0x000000f0; // make sure P2(4:7) pins are LOW without changing other P2 pins
LPC_GPIO2->FIOSET |= 0x00000010; // ebable ROW1 of keypad( make RD4 pin 1)
delay(20);
keys=(LPC_GPIO2->FIOPIN)&(0x0000000F); // read column1 of keypad (we need to read only PORTB0:3)
keys=keys<<12; // put column1 values in keys15:12 bits
LPC_GPIO2->FIOCLR = 0x000000f0;// make sure P2(4:7) pins are LOW without changing other P2 pins
LPC_GPIO2->FIOSET |=0x00000020; // enable ROW2 of keypad
delay(20);
keys_tmp=(LPC_GPIO2->FIOPIN)&(0x0000000F); // read column2 of keypad
keys_tmp=keys_tmp<<8; // place column 2 key values in keys_tmp8:11
keys=keys|keys_tmp; //combine comomn 1 and 2 data in to keys
LPC_GPIO2->FIOCLR = 0x000000f0;// make sure P2(4:7) pins are LOW without changing other P2 pins
LPC_GPIO2->FIOSET |=0x00000040; // enable ROW3 of keypad
delay(20);
keys_tmp=(LPC_GPIO2->FIOPIN)&(0x0000000F); // read column3 of keypad
keys_tmp=keys_tmp<<4; // place column 3 key values in keys_tmp4:7
keys=keys|keys_tmp; //combine comomn 1 and 2 nad 3 data in to keys
LPC_GPIO2->FIOCLR = 0x000000f0; // make sure P2(4:7) pins are LOW without changing other P2 pins
LPC_GPIO2->FIOSET |=0x00000080; // enable ROW2 of keypad
delay(20);
keys_tmp=(LPC_GPIO2->FIOPIN)&(0x0000000F); // read column2 of keypad
keys=keys|keys_tmp; //combine comumn 1,2,3,4 data in to keys
return keys;
}





دیدگاه