اطلاعیه

Collapse
No announcement yet.

کمک در مورد کی پد4*4 و مگا 32

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

    کمک در مورد کی پد4*4 و مگا 32

    سلام کسی میتونه منو راهنمایی کنه؟؟یه سوال واسم پیش اومده آخه من تازه کارم هنوز چیز زیادی حالیم نیست مشکلم اینه که الان 4 روز گرفتار یه کی پد 4*4 هستم ولی هنوز نتونستم راش بندازم البته مگا 32 برنامشو هم این زیر میزارم تا بلکه شماها که سنی ازتون گذشته ببینید و حسابی به من بخندید راستی داشتم یادم میرفت من این کی پد 4*4 رو به پورت بی وصل کردم و ال سی دی رو به پورت A و برنامه ای ای هم که میخواهم یه برنامه مبتدی واسه یادگیری هست میخواهم برنامه اینجوری باشه که هر کلیدی از صفحه کلید فشرده شد همون عدد رو روی ال سی دی نشون بده البته برنامه های زیادی از اینترنت دانلود کردم ولی هیچکدومشون کار نکرد که مطمعن شدم مشکل یا از برنامه ای هست که نوشتم یا از طریقه سیم کشی یا هم هر دو اخه یه برنامه ای دانلود کردم اولش درست کار نمیکرد بعدش که اومدم 4تا مقاومت پول پ رو از روی کی پد برداشتم و سیمی هم که رفته بود به vcc باز کردم بهتر شد ولی بازهم هر کلیدی رو که فشار میدادم اول همون عدد رو نشون میداد بعد سریع عوض میشد حالا نمیدونم باید این مقاومت ها باشن(10 کیلو اهمی بسته بودم) و به vccوصل کنم کی پد یا نه الان 4 شبانه روز هست من گرفتار همین هستم خواهش میکنم منو راهنمایی کنیید لطفاً
    این هم برنامه که اخر نوشتم وفقط روی ال سی دی عدد 16 نوشته شده و تغییر هم نمیکنه اگه این برنامه چیزی کم یا زیاد داره بی زحمت خودتون درتش کنید لطفاً
    /*********************************************
    This program was produced by the
    CodeWizardAVR V1.23.8c Standard
    Automatic Program Generator
    © Copyright 1998-2003 HP InfoTech s.r.l.
    http://www.hpinfotech.ro
    e-mailffice@hpinfotech.ro

    Project :
    Version :
    Date : 2010/07/04
    Author : crystal-xp
    Company :
    Comments:


    Chip type : ATmega32L
    Program type : Application
    Clock frequency : 4.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 512
    *********************************************/

    #include <mega32.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <delay.h>

    // Alphanumeric LCD Module functions
    #asm
    .equ __lcd_port=0x1B
    #endasm
    #include <lcd.h>

    // Declare your global variables here

    int numkey;
    char key[2];

    void main(void)
    {

    PORTA=0x00;
    DDRA=0x00;


    PORTB=0x00;
    DDRB=0x0F;




    lcd_init(16);
    #asm("sei"
    lcd_clear();
    lcd_putsf(" WELCOME!"
    delay_ms(200);
    while (1)
    {

    PORTB=0XFF;
    PORTB.0=0;
    delay_ms(5);

    if(PINB.4==1)numkey=1;
    if(PINB.5==1)numkey=2;
    if(PINB.6==1)numkey=3;
    if(PINB.7==1)numkey=4;

    PORTB=0XFF;
    PORTB.1=0;
    delay_ms(5);

    if(PINB.4==1)numkey=5;
    if(PINB.5==1)numkey=6;
    if(PINB.6==1)numkey=7;
    if(PINB.7==1)numkey=8;

    PORTB=0XFF;
    PORTB.2=0;
    delay_ms(5);

    if(PINB.4==1)numkey=9;
    if(PINB.5==1)numkey=10;
    if(PINB.6==1)numkey=11;
    if(PINB.7==1)numkey=12;

    PORTB=0XFF;
    PORTB.3=0;
    delay_ms(5);

    if(PINB.4==1)numkey=13;
    if(PINB.5==1)numkey=14;
    if(PINB.6==1)numkey=15;
    if(PINB.7==1)numkey=16;
    PORTB=0XF0;

    lcd_clear();
    lcd_putsf("Key Pressed:"
    delay_ms(30);
    itoa(numkey,key);
    lcd_gotoxy(8,1);
    lcd_puts(key);
    delay_ms(500);
    };
    }



    #2
    پاسخ : کمک در مورد کی پد4*4 و مگا 32

    کیبورد در حالت عادی مرتب عدد 16 را برمیگردونه مگه اینکه یک کلیدی فشار داده بشه
    شما چک کنید هر وقت برابر با 16 بود هیچ اتفاقی نیفته ( توی سورستون ندیدم پس این شرط را اضافه کنید )
    آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
    تا در سفر دوزخ از این باده بنوشم
    آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
    هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

    دیدگاه


      #3
      پاسخ : کمک در مورد کی پد4*4 و مگا 32

      سلام
      از پاسخ سریع شما آقای alt.ir ممنونم ولی من که گفتم تازه واردم هیچی نمیدونم،وقتی این برنامه رو توی مگا32 پروگرام میکنم یکسره عدد 16 رو نشون میده حتی اگه کلیدی رو فشار بدم بازم همون عدد 16 رو نشون میده البته منظورتون ازاینکه یه شرطی بزار تا این عدد 16 رو نشون نده رو فهمیدم ولی نمیدونم این شرط و چه جوری بنویسم اگه میشه خودتون بنویسیدش لطفاً در ضمن یه برنامه دیگه هم نوشتم اینیکی به نظرم بهتره ولی بازم مشکل داره و مشکلش هم اینه که توی همه سطرها (یعمی سطر اول تا چهارم)اگه کلید اولی هر سطی بزنم عدد 1 واگه کلید دومی از هر سطری بزنم عدد2 واگه کلید سومی از هر سری بزنم عدد100 رو نشون میده .(عددهایی که نوشتم قاطی پاطی هستش)اگه میشه یه لطفی بکنید و درمورد این برنامه منو راهنمایی کنیید و بیزحمت بفرمائید کجای این برنامه اشکال داره(درضمن من تازه کارم ها!!!1)
      این هم برنامه:
      /*********************************************
      This program was produced by the
      CodeWizardAVR V1.23.8c Standard
      Automatic Program Generator
      © Copyright 1998-2003 HP InfoTech s.r.l.
      http://www.hpinfotech.ro
      e-mailffice@hpinfotech.ro

      Project :
      Version :
      Date : 2010/07/05
      Author : crystal-xp
      Company :
      Comments:


      Chip type : ATmega32L
      Program type : Application
      Clock frequency : 4.000000 MHz
      Memory model : Small
      External SRAM size : 0
      Data Stack size : 512
      *********************************************/

      #include <mega32.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <delay.h>

      // Alphanumeric LCD Module functions
      #asm
      .equ __lcd_port=0x1B
      #endasm
      #include <lcd.h>

      // Declare your global variables here
      int key=00;
      char numkey[4];

      void main(void)
      {
      // Declare your local variables here

      // Input/Output Ports initialization
      // Port A initialization
      // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
      // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
      PORTA=0x00;
      DDRA=0x00;

      // Port B initialization
      // Func0=Out Func1=Out Func2=Out Func3=Out Func4=In Func5=In Func6=In Func7=In
      // State0=0 State1=0 State2=0 State3=0 State4=T State5=T State6=T State7=T
      PORTB=0x00;
      DDRB=0x0F;

      // Port C initialization
      // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
      // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
      PORTC=0x00;
      DDRC=0x00;

      // Port D initialization
      // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
      // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
      PORTD=0x00;
      DDRD=0x00;

      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=FFh
      // OC0 output: Disconnected
      TCCR0=0x00;
      TCNT0=0x00;
      OCR0=0x00;

      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer 1 Stopped
      // Mode: Normal top=FFFFh
      // OC1A output: Discon.
      // OC1B output: Discon.
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      TCCR1A=0x00;
      TCCR1B=0x00;
      TCNT1H=0x00;
      TCNT1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;

      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer 2 Stopped
      // Mode: Normal top=FFh
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;

      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      GICR|=0x00;
      MCUCR=0x00;
      MCUCSR=0x00;

      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x00;

      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      // Analog Comparator Output: Off
      ACSR=0x80;
      SFIOR=0x00;

      // LCD module initialization
      lcd_clear();
      lcd_init(16);
      lcd_putsf(" WELCOME!"
      delay_ms(1000);


      while (1)
      {

      DDRB.4=0;
      PORTB.4=1;

      DDRB.5=0;
      PORTB.5=1;

      DDRB.6=0;
      PORTB.6=1;

      DDRB.7=0;
      PORTB.7=1;

      DDRB.0=1;
      PORTB.0=0;
      delay_ms(5);
      if(PINB.4==0)key=200;
      if(PINB.5==0)key=300;
      if(PINB.6==0)key=400;
      if(PINB.7==0)key=500;

      DDRB.1=1;
      PORTB.1=0;
      delay_ms(5);
      if(PINB.4==0)key=4;
      if(PINB.5==0)key=5;
      if(PINB.6==0)key=6;
      if(PINB.7==0)key=7;

      DDRB.2=1;
      PORTB.2=0;
      delay_ms(5);
      if(PINB.4==0)key=8;
      if(PINB.5==0)key=9;
      if(PINB.6==0)key=10;
      if(PINB.7==0)key=11;

      DDRB.3=1;
      PORTB.3=0;
      delay_ms(5);
      if(PINB.4==0)key=1;
      if(PINB.5==0)key=2;
      if(PINB.6==0)key=3;
      if(PINB.7==0)key=100;

      lcd_clear();
      lcd_putsf("Key Pressed:"
      delay_ms(30);
      itoa(key,numkey);
      lcd_gotoxy(8,1);
      lcd_puts(numkey);
      delay_ms(500);
      };
      }

      دیدگاه


        #4
        پاسخ : کمک در مورد کی پد4*4 و مگا 32

        سلام. این یه برنامه که هر چیزی رو با کیپد بزنی روی lcd نشون میده:



        #include <mega32.h>
        #include <delay.h>
        #asm
        .equ __lcd_port=0x1B
        #endasm
        #include <lcd.h>
        #define c1 PINB.4
        #define c2 PINB.5
        #define c3 PINB.6
        #define c4 PINB.7
        flash char row[]={0xfe,0xfd,0xfb,0xf7};
        flash char data_key[]={
        '5','4','B','6& #039;,
        '0','*','D','#& #039;,
        '2','1','A','3& #039;,
        '8','7','C','9& #039;};
        unsigned char ac,table;
        unsigned int r;
        void keypad(){
        lcd_gotoxy(0,1);
        lcd_putsf("~"
        while (1){
        for (r=0;r<4;r++){
        ac=4;
        PORTB=row[r];
        DDRB=0x0f;
        if (c1==0) ac=0;
        if (c2==0) ac=1;
        if (c3==0) ac=2;
        if (c4==0) ac=3;
        if (!(ac==4)){
        table=data_key[(r*4)+ac];
        lcd_gotoxy(1,1);
        lcd_putchar(table);
        while (c1==0) {}
        while (c2==0) {}
        while (c3==0) {}
        while (c4==0) {}
        delay_ms(150);
        lcd_gotoxy(1,1);
        lcd_putsf(" "
        }
        }
        }
        }
        void main(){
        PORTB=0xff;
        DDRB=0x0f;
        lcd_init(16);
        lcd_gotoxy(0,0);
        lcd_putsf("test keypad"
        keypad();
        }

        دیدگاه

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