4x4 Tuş Takımından Karakter Dizisi Okuma ve Yazdırma!

drexel

Üye
Katılım
3 Eki 2009
Mesajlar
22
Puanları
1
Yaş
39
Arkadaşlar hepinize merhaba!!!

4x4 Tuş takımından bir kimlik numarası alıp bu kimlik numarasını karakter lcd ekranda bastırmaya çalışıyorum. Aşağıda yazdığım ccs c kodu var nerede hata yaptığımı bir türlü bulamadım yardımcı olabilirseniz sevinirim.

Kod:
#include <18F4550.h> 
#include <stdlib.h>
#fuses XT,NOWDT,PUT,BROWNOUT,NOLVP 
#use delay(clock=4000000)                                                      
  
#include <flex_lcd.c>

#byte portb = 0xf81
#use fast_io(b)                         
                                           
int1 keyPressed=false;
char key='\0';                                                              
char idNo[5];
int no;                                      
static int oldBState;                              
int i=0;                                

void getKey(void){
   
   int pin, bState, delay = 10;
   delay_ms(50);  
   disable_interrupts(INT_RB);
   
   pin=4;
   if (!bit_test(oldBState,pin)){
      portb = 0xf1;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '1';
      }
                                         
      portb = 0xf2;
      delay_us(delay);                                    
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '2';
      }
      
      portb = 0xf4;                         
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '3';
      }
                                               
      portb = 0xf8;
      delay_us(delay);
      bState = portb;            
      if (bit_test(bState,pin)) {
         key = 'A';
      }
   }
   
   pin=5;
   if (!bit_test(oldBState,pin)){
      portb = 0xf1;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '4';
      }
                                         
      portb = 0xf2;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '5';
      }
      
      portb = 0xf4;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '6';
      }
                                               
      portb = 0xf8;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = 'B';                              
      }
   }                                                
   
   pin=6;
   if (!bit_test(oldBState,pin)){
      portb = 0xf1;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '7';
      }                                    
                                         
      portb = 0xf2;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '8';
      }
      
      portb = 0xf4;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '9';
      }
                                               
      portb = 0xf8;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = 'C';                              
      }
   }
   
   pin=7;
   if (!bit_test(oldBState,pin)){
      portb = 0xf1;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '*';
      }
                                                    
      portb = 0xf2;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '0';
      }
      
      portb = 0xf4;
      delay_us(delay);
      bState = portb;
      if (bit_test(bState,pin)) {
         key = '#';                  
      }
                                               
      portb = 0xf8;
      delay_us(delay);                               
      bState = portb;
      if (bit_test(bState,pin)) {
         key = 'D';                              
      }
   }
   portb = oldBState;                                                   
   enable_interrupts(INT_RB);                                                                
}                                                                                  
                                                       
void printKey(void) {                                    

   if(key!='\0') {
      lcd_gotoxy(1,1) ;
      lcd_putc("\f");
      printf(lcd_putc,"%c",key);
      key = '\0';                           
   }                                              
   if(i==4){                                                    
      no=atoi(idNo);                                  
      lcd_gotoxy(1,1) ;                             
      lcd_putc("\f");                                       
      printf(lcd_putc,"%i",no);                                          
      i=0;                                         
   }                                                                              
}                                                  
                                                                  
#INT_RB                                                          
void RB_isr(VOID) { 
   if (oldBState != portb){
      oldBState = portb;           
      keyPressed=true;
      i++;               
   }
}                                           
                                              
//===========================                           
void main(){
   setup_adc_ports ( NO_ANALOGS ) ;          
   setup_adc ( ADC_OFF ) ;
   setup_psp ( PSP_DISABLED ) ; 
   setup_spi ( FALSE ) ;
   setup_timer_0 ( RTCC_INTERNAL | RTCC_OFF ) ;
   setup_timer_1 ( T1_DISABLED ) ;  
   setup_timer_2 ( T2_DISABLED, 0, 1 ) ;               
   setup_timer_3 ( T3_DISABLED | T3_DIV_BY_1 ) ;    
   enable_interrupts ( INT_RB ) ;
   enable_interrupts ( global ) ;                                                 
   
   lcd_init ( ) ;
                                                             
   port_b_pullups(TRUE);
   output_b(0xf0);  
   set_tris_b (0xf0); // B4 - 7 input B0 - 3 output
   oldBState=portb;
   
   lcd_gotoxy (1,1) ;
   lcd_putc ( "Basliyor ..." ) ;                                    
   delay_ms ( 1000 ) ;                 
   lcd_putc ( "\f" ) ;
                                           
   WHILE ( TRUE ) {
      if(keyPressed){
         keyPressed=false;                   
         getKey();                                                                   
         if((i<4) && (key!='\0')){                            
            idNo[i]=key;                                     
         }                                                                                  
         if(i==4){                            
            idNo[i]=0x00;                                     
         }
         printKey();
      }                      
   } 
}
 
dostum sana mantını anlatım tuş takımında mesela 1 tuşuna basıldığı anda bu tuşa lcd karekter tablosundan 1 değeri neye karşılık geliyosa o değeri atayıp sonra lcd ye yazdırmalısın. asm olsa yazılımına bakardım
 

Forum istatistikleri

Konular
130,065
Mesajlar
932,703
Kullanıcılar
453,051
Son üye
teknik-adam

Yeni konular

Geri
Üst