Thông báo

Collapse
No announcement yet.

Xin xem giúp em mạch key 4x4 này

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin xem giúp em mạch key 4x4 này

    Do em đang làm mạch bàn phím ma trận 4x4 nhưng em chỉ dùng 14 nút thôi. Em mới lập trình AVR. Lập trình em thấy mọi thứ đều ổn nhưng ngõ ra AVR không chạy xin các bác xem thử để em rút kinh nghiệm em cảm ơn nhiều. Đây là chương trình và mạch của em.

    #include <mega32.h>

    void main(void)
    {
    PORTB=0xF0;
    DDRB=0x0F; //CHỌN PORTB.0 ĐẾN PORTB.3 LÀM NGÕ RA 4 NGÕ CÒN LẠI LÀM NGÕ VÀO

    PORTC=0xFF;
    DDRC=0xFF;

    PORTD=0xFF;
    DDRD=0xFF;

    while (1)
    {
    PORTB =0b11111110; //QUÉT CỘT 1
    if (PORTB.4==0) {PORTD=0b11111110;PORTC=0xFF;};
    if (PORTB.5==0) {PORTD=0b11111101;PORTC=0xFF;};
    if (PORTB.6==0) {PORTD=0b11111011;PORTC=0xFF;};
    if (PORTB.7==0) {PORTD=0b11110111;PORTC=0xFF;};

    PORTB =0b11111101; //QUÉT CỘT 2
    if (PORTB.4==0) {PORTD=0b11101111;PORTC=0xFF;};
    if (PORTB.5==0) {PORTD=0b11011111;PORTC=0xFF;};
    if (PORTB.6==0) {PORTD=0b10111111;PORTC=0xFF;};
    if (PORTB.7==0) {PORTD=0b01111111;PORTC=0xFF;};

    PORTB =0b11111011; //QUÉT CỘT 3
    if (PORTB.4==0) {PORTC=0b11111110;PORTD=0xFF;};
    if (PORTB.5==0) {PORTC=0b11111101;PORTD=0xFF;};
    if (PORTB.6==0) {PORTC=0b11111011;PORTD=0xFF;};
    if (PORTB.7==0) {PORTC=0b11110111;PORTD=0xFF;};

    PORTB =0b11110111; //QUÉT CỘT 4
    if (PORTB.4==0) {PORTC=0b11101111;PORTD=0xFF;};
    if (PORTB.5==0) {PORTC=0b11011111;PORTD=0xFF;};
    if (PORTB.6==0) {PORTC=0b10111111;PORTD=0xFF;};
    if (PORTB.7==0) {PORTC=0b01111111;PORTD=0xFF;};
    }
    }

    MACH KEY4X4.zip

  • #2
    khai báo một cái là nhập một cái là xuất chứ. phím bấn mà khai báo xuất hết rùi lấy gì dữ liệu vào VDK.
    PORTB.4,PORTB.5,PORTB.6,PORTB.7 bạn đổ thành PIN , nhớ thay đổi thanh ghi DDR luôn nhá!!!
    Last edited by hohoanganhfu; 21-06-2012, 11:11.

    Comment


    • #3
      Cảm ơn bạn hohoanganhfu để mình sửa lại xem sao. À mình sửa lại PORT thành PIN là mạch chạy rồi. Cảm ơn bạn
      Last edited by sboy888; 21-06-2012, 13:05.

      Comment


      • #4
        Đây là chương trình quét phím ma trận 4x4. nếu bạn chỉ chạy mỗi chương trình quét phím này trong hàm main() thì không vấn đề gì. Nhưng nếu bạn chạy chương trình lớn hơn. Thì bạn sẽ không xử lý được các phần khác. Tập trung vào quét phím là không ổn. Theo mình bạn nên dùng ngắt để quét phím. Trong các chương trình khác mình chỉ gọi hàm xem phím nào được nhấn thôi.
        Sống là để chiến đấu

        Comment


        • #5
          Quet bằng ngăt ,
          là như thế nào vậy? bạn có thể nói rõ thuật toán được không? hay bạn up code lên cho mọi người tham khảo.....

          Comment


          • #6
            cho chú đấy

            Code:
            void quet_key(int quet)
            {
                switch (quet)
                {
                    case 0:
                        RB4=0;RB5=RB6=RB7=1;
                        break;
                    case 1:
                        RB5=0;RB4=RB6=RB7=1;
                        break;
                    case 2:
                        RB6=0;RB4=RB5=RB7=1;
                        break;
                    case 3:
                        RB7=0;RB4=RB5=RB6=1;
                        break;
                }
            }
            
            
            void interrupt irs()
            {
                if((TMR1IF)&&(TMR1IE)) 
                {
                    colum++;
                    if(colum>3)colum=0;
                    TMR1H=0xff;
                    TMR1L=0x00;
                
                    quet_key(colum);    
                }
                     
            
                if((!RB0)&&(RBIF))                        
                    {key = dulieukey[colum][0];bep(1);}
                if((!RB1)&&(RBIF))                    
                    {key = dulieukey[colum][1];bep(1);}
                if((!RB2)&&(RBIF))                        
                    {key = dulieukey[colum][2];bep(1);}
                if((!RB3)&&(RBIF))
                    {key = dulieukey[colum][3];bep(1);}
                   
                RBIF = 0;
                TMR1IF=0;
            
            }
            email:
            chỉ được liên lạc từ 19h00 - 21h30



            Comment

            Về tác giả

            Collapse

            sboy888 Tìm hiểu thêm về sboy888

            Bài viết mới nhất

            Collapse

            Đang tải...
            X