اطلاعیه

Collapse
No announcement yet.

صفحه کلید

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

    صفحه کلید

    سلام من برنامه صفحه کلید رو در codevision نوشتم کلیدها رو نشون میده ولی بدون زدن دکمه هم بعضی کلید ها رو نشون میده کسی میتونه راهنمایی کنه؟
    int find(){
    temp=PINA;
    if((temp&0x1)==0)
    return 0;
    if((temp&0x2)==0)
    return 1;
    if((temp&0x4)==0)
    return 2;
    if((temp&0x8)==0)
    return 3;
    return -1;
    }
    void main(void)
    {
    while (1)
    {
    lcd_clear();
    PORTA.4=PORTA.5=PORTA.6=0;
    do{
    while((PINA&0x0f)==0x0f);
    delay_ms(5);
    }while((PINA&0x0f)==0x0f);
    PORTA.5=PORTA.6=1;
    col=0;
    row=find();
    if(row!=-1)
    lcd_putchar(lookup[row][col]);
    else{
    PORTA.4=PORTA.6=1;
    PORTA.5=0;
    col++;
    row=find();
    if(row!=-1)
    lcd_putchar(lookup[row][col]);
    else{
    PORTA.4=PORTA.5=1;
    PORTA.6=0;
    col++;
    row=find();
    if(row!=-1)
    lcd_putchar(lookup[row][col]);
    }
    }



    };
    }

    #2
    پاسخ : صفحه کلید

    من این برنامه رو در 2 حالت اینتراپتی و تابعی تو پروژه ها گذاشتم .فایل پرتئوس هم داره
    خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

    دیدگاه


      #3
      پاسخ : صفحه کلید

      اگر کسی اشکال همین برنامه رو می دونه لطفا توضیح بدین

      دیدگاه


        #4
        پاسخ : صفحه کلید

        این برنامه اصلا حلقه اسکن نداره.
        وقتی آماده وعملی هست چرا خودت رو عذاب میدی
        خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

        دیدگاه


          #5
          پاسخ : صفحه کلید

          نوشته اصلی توسط روباه
          من این برنامه رو در 2 حالت اینتراپتی و تابعی تو پروژه ها گذاشتم .فایل پرتئوس هم داره
          حمید جان گفتی کجاست؟
          لینکشو میذاری؟

          دیدگاه


            #6
            پاسخ : صفحه کلید

            salam man in barnamaro neveshtam vali hanoz testesh nakardam mitoni emtehan ****

            #include <mega32.h>

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

            #define door PORTB.0

            #define led1 PORTB.1
            #define led2 PORTB.2
            #define led3 PORTB.3

            #define ROW1 PORTD.0
            #define ROW2 PORTD.1
            #define ROW3 PORTD.2
            #define ROW4 PORTD.3

            #define CO1 PIND.4
            #define CO2 PIND.5
            #define CO3 PIND.6

            // Declare your global variables here
            //--------------------------
            char i;
            char start;
            char stop;
            char pass[3];
            //---------------------------
            void main(void)
            {
            // Declare your local variables here

            // Input/Output Ports initialization
            // Port A 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
            PORTA=0x00;
            DDRA=0x00;

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

            // 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=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
            // State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T
            PORTD=0x00;
            DDRD=0xF0;

            // 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;
            ICR1H=0x00;
            ICR1L=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
            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
            ACSR=0x80;
            SFIOR=0x00;

            // LCD module initialization
            lcd_init(16);

            while (1)
            {


            int m[16];
            char ScanKey;
            {
            DDRD=0x0F;
            lcd_init(20);
            lcd_clear();
            while(1)
            {

            ROW1=1; ROW2=1; ROW3=1; ROW4=1;
            if (CO1==1 | CO2==1 | CO3==1)
            {
            //scan ROW1
            ROW1=1; ROW2=0; ROW3=0; ROW4=0;
            if (CO1 == 1) ScanKey=0x01;
            else if (CO2 == 1) ScanKey=0x02;
            else if (CO3 == 1) ScanKey=0x03;
            //scan ROW2
            ROW1=0; ROW2=1; ROW3=0; ROW4=0;
            if (CO1 == 1) ScanKey=0x04;
            else if (CO2 == 1) ScanKey=0x05;
            else if (CO3 == 1) ScanKey=0x06;
            //scan ROW3
            ROW1=0; ROW2=0; ROW3=1; ROW4=0;
            if (CO1 == 1) ScanKey=0x07;
            else if (CO2 == 1) ScanKey=0x08;
            else if (CO3 == 1) ScanKey=0x09;

            //scan ROW4
            ROW1=0; ROW2=0; ROW3=0; ROW4=1;
            if (CO1 == 1) ScanKey=stop;
            else if (CO2 == 1) ScanKey=0x0;
            else if (CO3 == 1) ScanKey=start;

            sprintf(m,"%x",ScanKey);
            lcd_puts(m);
            delay_ms(500);

            pass(i)=ScanKey;
            if (i==3 && pass[0]==1 && pass[1]==2 && pass[2]==3 && pass[3]==4) door=1;

            i=i+1;

            }
            }
            }


            };
            }
            aghe emtehan kardi begho kar karde ya na bay

            دیدگاه


              #7
              پاسخ : صفحه کلید

              یعنی چی که کلیدارو نشون میده
              بعدا یه جمله قشنگ مینویسم

              دیدگاه


                #8
                پاسخ : صفحه کلید

                از راهنمایی که کردین ممنون ولی من این پروژه ای رو که گقتید پیدا کردم میشه لینکش رو اعلا م کنید :redface:

                دیدگاه


                  #9
                  پاسخ : صفحه کلید

                  این لینک صفحه ایی که توشه:
                  http://www.eca.ir/forum2/index.php/topic,9411.15.html


                  ولی حتما توضیحاتی که تو صفحه دادم رو بخون.
                  این بدون اینتراپت.
                  اگه اینتراپتیش رو هم میخواین Upload کنم
                  این برنامه وقتقی به تابع کیبرد برسه وامیسه تا کلید رو بگیره بعد از تابع رد میشه.اگه میخای همه جا صفحه کلید ON باشه باید اینتراپتیش کنی
                  خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                  دیدگاه


                    #10
                    پاسخ : صفحه کلید

                    نوشته اصلی توسط شهرام کشت پور
                    یعنی چی که کلیدارو نشون میده
                    منظورشون شماره کلید مورد نظره.
                    من اینتراپتیشو نوشتم(البته به پای برنامه های جناب روباه نمیرسه!!) :

                    /* THIS CODE DETECT THAT WHICH KEY OF KEY_MATRIX HAVE PRESSED
                    AND DISPLAY IT'S number ON LCD16*2
                    */
                    #include <mega32.h>
                    #include <delay.h>
                    #asm
                    .equ __lcd_port=0x15;PORTC // the LCD module is connected to PORTC
                    #endasm
                    #include <lcd.h>
                    #include <stdlib.h>
                    #define CLEARBIT(port,bit) (port &= (~(1<<bit))) //clear the
                    #define CHECKBIT(port,bit) ((~port) & (1<<bit)) // check if the bit is 1 or no.
                    #define COLUMN PORTA
                    #define LINE PINA
                    void init (void)
                    {
                    PORTA=0xf0; //4high bit of PORTA defined as input & connect to lines
                    DDRA=0x0f ; // and 4low bit of PORTA defined as output & connect to columns
                    PORTC=0x00; // connected to lcd16*2
                    DDRC=0xff;
                    lcd_init(16); // initialize the lcd
                    // Timer/Counter 0 initialization
                    // Clock source: System Clock
                    // Mode: CTC top=OCR0
                    // OC0 output: Disconnected
                    TCNT0=0x00;
                    TIMSK=0x02; // Timer(s)/Counter(s) Interrupt(s) initialization
                    }
                    unsigned char Which_key(void); // function prototype
                    unsigned char str[5];


                    unsigned char Which_key(void) //function decleration
                    {
                    unsigned char C_num,L_num;
                    for(C_num=0; C_num<=3; C_num++) // C_num is the column number
                    {
                    COLUMN=0xff;
                    CLEARBIT(COLUMN,C_num); // detect that which key have pressed
                    for(L_num=4; L_num<=7; L_num++)
                    {
                    if(CHECKBIT (PINA,L_num))
                    return((L_num-4)*4+C_num);
                    }
                    }
                    }

                    interrupt [TIM0_COMP] void timer0_comp_isr(void) // Timer 0 overflow interrupt service routine
                    {
                    COLUMN=0xf0;
                    if((LINE & 0xf0)!= 0xf0) //check have a key pressed?
                    {
                    lcd_clear();
                    lcd_gotoxy(7,1);
                    itoa(Which_key(),str);
                    lcd_puts(str);
                    delay_ms(50);
                    }
                    }

                    void main (void)
                    {
                    init();
                    #asm("sei&quot // Global enable interrupts
                    while(1)
                    {
                    TCCR0=0x0C; // press=256, ctc mode of timer0
                    OCR0=0xff; // ocr0=255, f=28hz => T=35msec(the interupt occurs every 35msec)
                    }
                    }

                    دیدگاه


                      #11
                      پاسخ : صفحه کلید

                      منظورم اینه که بدون اینکه کلیدی رو فشار بدم دکمه های ستون اول را نشون میده بیشتر هم یک را

                      دیدگاه


                        #12
                        پاسخ : صفحه کلید

                        اینم کیبرد اینتراپتی با فایل پرتئوس و شماتیک مدار
                        فقط توضیحاتی که برای قبلیه دادم برای اینم اعمال بشه

                        http://www.4shared.com/file/33935615...interupt.html?
                        خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                        دیدگاه


                          #13
                          پاسخ : صفحه کلید

                          از همه ممنون مشکل برنامه حل شد PORTB=0x0f این دستور را فراموش کرده بودم

                          دیدگاه

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