اطلاعیه

Collapse
No announcement yet.

مشکل عجیب با کیپد(Keypad یا کی پد) ماتریسی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل عجیب با کیپد(Keypad یا کی پد) ماتریسی

    سلام دوستان. من یه کیپد ماتریسی 4*4 رو به SAM7X وصل کردم به این صورت که پایه های B23 تا B26 به ستون ها و پایه های B27 تا B30 به ردیف ها وصل شده. از این فایل کتابخونه هم استفاده کردم اما به یه مشکل عجیب خوردم اونم اینه که همه عددهای روی کیپد رو به خوبی تشخیص میده و وقتی کلید رو فشار میدم رو LCD مینویسه به غیر از عددهای 7 و 8 و 9 و C . کیپد رو هم چک کردم سالمه ممنون میشم کمکم کنید.

    http://public.fileup.ir/d/2138349/keypad.h

    #2
    پاسخ : مشکل عجیب با کیپد(Keypad یا کی پد) ماتریسی

    شرمنده دوستان مشکل حل شد ایراد از یکی از Via ها بود که بین پین هدر و چیپ بود. نمیدونم چرا از اول سراغ تست ترک ها نرفتم :redface: :angry:

    دیدگاه


      #3
      پاسخ : مشکل عجیب با کیپد(Keypad یا کی پد) ماتریسی

      سلام. من یک مشکلی با کیپد 4*4 پیدا کردم. برنامه ام تو شبیه ساز پروتئوس کار می کند. وقتی می بندمش هم همه اعداد کار میکنند به غیر از ستون اول! که اعداد رو جابجا نشون میده! مثلا کلید 1 رو میزنم 4 نشون میده!
      با تست دیود هم چک کردم و همه اتصالاتم درسته! به نظرتون مشکل از کجاست؟
      کد:
      #include <mega16.h>
      #include <delay.h>
      // Alphanumeric LCD Module functions
      #include <alcd.h>
      #include <stdio.h>
      char key=00;         
      char s_key[];
       char i=0;
       char a=0;
       char b=0;
       char c=0;
       int num=0;
      // Declare your global variables here
      
      void main(void)
      {
      // Declare your local variables here
      
      // Input/Output Ports initialization
      // Port A initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
      // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0 
      PORTA=0x00;
      DDRA=0xFF;
      
      // Port B initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTB=0x00;
      DDRB=0x00;
      
      // Port C initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTC=0x00;
      DDRC=0x00;
      
      // Port D initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTD=0x00;
      DDRD=0x00;
      
      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=0xFF
      // OC0 output: Disconnected
      TCCR0=0x00;
      TCNT0=0x00;
      OCR0=0x00;
      
      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer1 Stopped
      // Mode: Normal top=0xFFFF
      // OC1A output: Discon.
      // OC1B output: Discon.
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      // Timer1 Overflow Interrupt: Off
      // Input Capture Interrupt: Off
      // Compare A Match Interrupt: Off
      // Compare B Match Interrupt: Off
      TCCR1A=0x00;
      TCCR1B=0x00;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
      
      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer2 Stopped
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;
      
      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      MCUCR=0x00;
      MCUCSR=0x00;
      
      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x00;
      
      // USART initialization
      // USART disabled
      UCSRB=0x00;
      
      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      ACSR=0x80;
      SFIOR=0x00;
      
      // ADC initialization
      // ADC disabled
      ADCSRA=0x00;
      
      // SPI initialization
      // SPI disabled
      SPCR=0x00;
      
      // TWI initialization
      // TWI disabled
      TWCR=0x00;
      
      // Alphanumeric LCD initialization
      // Connections specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTC Bit 5
      // RD - PORTC Bit 4
      // EN - PORTC Bit 3
      // D4 - PORTC Bit 2
      // D5 - PORTC Bit 1
      // D6 - PORTC Bit 0
      // D7 - PORTD Bit 7
      // Characters/line: 16
      lcd_init(16);
      
      while (1)
         {
       PORTB=0xff;
       PORTA=0b11111110;
       
       if(PINB.3==0){
       key=1;
       i++;}
       if(PINB.1==0){
       key=2;
       i++;}
       if(PINB.2==0){
       key=3;
       i++;} 
       delay_ms(5); 
      //*********************************
       
       PORTA=0b11111101;
       if(PINB.3==0){
       key=4;
       i++;}
       if(PINB.1==0){
       key=5;  
       i++;}
       if(PINB.2==0){
       key=6;
       i++;}  
        delay_ms(5);
       
      //*********************************
      
       PORTA=0b11111011;
       
       if(PINB.3==0){
       key=7;
       i++;}
       if(PINB.1==0){
       key=8;  
       i++;}
       if(PINB.2==0){
       key=9;   
       i++;}  
       delay_ms(5); 
      //*********************************
      
       PORTA=0b11110111;
       
       if(PINB.3==0){
       key=10;
       i++;}
       if(PINB.1==0){
       key=0; 
       i++;}
       if(PINB.2==0){
       key=11; 
       i++;} 
       delay_ms(5);
       //***********************************
       if(i>3){
        i=1; 
        b=0;
        c=0;}
            
       if(i==1) {
       a=key; 
       num=a;}
       if(i==2){
       b=key; 
       num=a*10+b;}
       if(i==3){
       c=key;
       num=a*100+b*10+c;} 
       
       if(key==11){ 
       num=0;
       i=0; 
       a=0;
       b=0;
       c=0;}
      
      
          lcd_clear(); 
          sprintf(s_key,"key:%d,i=%d",num,i);
          lcd_puts(s_key);
          //delay_ms(100);  
         } 
         }

      دیدگاه

      لطفا صبر کنید...
      X