ccs c ile keypad kullanımı????

Başlatan forumsad, 19 Nisan 2010, 20:12:16

forumsad

kitapdan ögrendiklerimi uygulayarak bir keypad uygulaması yaptım çalışıyor....
kod aşagıda;fakat
#include "F:\elektronik+\pic\ccs_c\ccs_uygulamalar\keypad\uzun\pB\877_keypad.h"


#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)                         //gecikme için kullanılacak osilatör frekansını belirle

void lcd_calis (void);

//****************LCD TANIMLAMALARI********************************************
#use fast_io(d)     //port yönlendirme komutlar B portu için
#define use_portd_lcd TRUE         //lcd b portuna bağlı
#include <lcd.c>              //lcd.c dosyasını programa tanıt

//***************KEYPAD TANIMLALAMLARI*******************************************
#use fast_io(b)             //port yönlendirme komutu portD
#define use_portb_kbd TRUE 
#include <kbd.c> 




//tanımlalamalar______________________________________________________________-

#define sut1 pin_b0    //sutun1 ifadesi pin_d0 ifasesine eşitleniyor
#define sut2 pin_b1    //sutun1 ifadesi pin_d1 ifasesine eşitleniyor
#define sut3 pin_b2    //sutun1 ifadesi pin_d2 ifasesine eşitleniyor
#define sut4 pin_b3    //sutun1 ifadesi pin_d3 ifasesine eşitleniyor

#define sat1 pin_b4    //sat1 ifadesi pin_d4 ifasesine eşitleniyor
#define sat2 pin_b5    //sat1 ifadesi pin_d5 ifasesine eşitleniyor
#define sat3 pin_b6    //sat1 ifadesi pin_d6 ifasesine eşitleniyor
#define sat4 pin_b7    //sat1 ifadesi pin_d7 ifasesine eşitleniyor


char tus=0;            //karekter tipinde değişken tanımlanıyor

//******************************************************************************

void lcd_calis (void)      
{

lcd_gotoxy(1,1);      
printf(lcd_putc, "basılan Tus:");  
lcd_gotoxy(1,2);      
printf(lcd_putc,"%d",tus);

delay_ms(20);
}      




char keypad_oku()         //fonksiyon 
{
output_d(0x00);    //d portu sıfırla
//______________________________________
output_high(sat1);     //satır1 1 yap
   if (input(sut1))    //sutun1 oku
   {delay_ms(20); tus=1;}    //eger sutun1 1 ise tus=1  yani 1 basılı
   if (input(sut2))    //sutun2 oku
   {delay_ms(20); tus=2;}
   if (input(sut3))    //sutun3 oku
   {delay_ms(20); tus=3;}
   if (input(sut4))    //sutun4 oku
   {delay_ms(20); tus=0xA;}
output_low(sat1);           //satır 1 low yap

//______________________________________
output_high(sat2);     //satır2 1 yap
   if (input(sut1))    
   {delay_ms(20); tus=4;}   
   if (input(sut2))    
   {delay_ms(20); tus=5;}
   if (input(sut3))   
   {delay_ms(20); tus=6;}
   if (input(sut4))   
   {delay_ms(20); tus=0xB;}
output_low(sat2);   

//______________________________________
output_high(sat3);     //satır3 1 yap
   if (input(sut1))    
   {delay_ms(20); tus=7;}   
   if (input(sut2))    
   {delay_ms(20); tus=8;}
   if (input(sut3))   
   {delay_ms(20); tus=9;}
   if (input(sut4))   
   {delay_ms(20); tus=0xC;}
output_low(sat3);  


//______________________________________
output_high(sat4);     //satır4 1 yap
   if (input(sut1))    
   {delay_ms(20); tus=0xE;}   
   if (input(sut2))    
   {delay_ms(20); tus=0;}
   if (input(sut3))   
   {delay_ms(20); tus=0XF;}
   if (input(sut4))   
   {delay_ms(20); tus=0xD;}
output_low(sat4); 

return tus;   //fonksiyon tuş değeri ile geri döner
}

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   // TODO: USER CODE!! 
   
   set_tris_d(0x00);  //B portu LCD için komple çıkış
   set_tris_b(0x0F);  //D portu 4 bit çıkış 00001111  4 bit giriş
   
   output_b(0x00);    //B portu temizle
   lcd_init();          //lcd hazırlanıyor
   while(1)
   {
   keypad_oku();  //basılan tuş değerini portb ye gönder
   lcd_calis();

   }
}

kbd_getc();   kullanarak daha kısa şekilde uygulama yaptığımda keypad çalışmıyor   neyi eksik yapıyorum acaba ???

çalışmayan kod:
#include "F:\elektronik+\pic\ccs_c\ccs_uygulamalar\keypad\uzun\pB\877_keypad.h"


#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)                         //gecikme için kullanılacak osilatör frekansını belirle

void lcd_calis (void);

//****************LCD TANIMLAMALARI********************************************
#use fast_io(d)     //port yönlendirme komutlar B portu için
#define use_portd_lcd TRUE         //lcd b portuna bağlı
#include <lcd.c>              //lcd.c dosyasını programa tanıt

//***************KEYPAD TANIMLALAMLARI*******************************************
#use fast_io(b)             //port yönlendirme komutu portD
#define use_portb_kbd TRUE 
#include <kbd.c> 





char key=0;            //karekter tipinde değişken tanımlanıyor

//******************************************************************************

void lcd_calis (void)      
{

lcd_gotoxy(1,1);      
printf(lcd_putc, "basılan Tus:");  
lcd_gotoxy(1,2);      
printf(lcd_putc,"%d",key);

delay_ms(20);
}      






void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   // TODO: USER CODE!! 
   
   set_tris_d(0x00);  //D portu LCD için komple çıkış
   set_tris_b(0x0F);  //D portu 4 bit çıkış 00001111  4 bit giriş
   
   output_b(0x00);    //B portu temizle
   output_d(0x00);    //d portu sıfırla
   
   lcd_init();          //lcd hazırla#include <Flex_LCD420.c> 
   kbd_init();          //keypad kazırla
   
   port_b_pullups(TRUE);
   while(1)
   {
   key=kbd_getc(); 

  
   lcd_calis();

   }
}

haasan

bende keypadla uğraşıyorum ama lcd bağlamada sorun yasıyorum proteus cizimini paylaşabilir misin?

papsukkal

kbd.c kodlarını incele istersen tuş takımı dizilimin kbd.c için uygun olmarabilir.

vitruvius

Alıntı yapılan: haasan - 09 Nisan 2012, 11:04:25
bende keypadla uğraşıyorum ama lcd bağlamada sorun yasıyorum proteus cizimini paylaşabilir misin?