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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • sboy888
    Thành viên mới
    • Nov 2011
    • 8

    #1

    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
  • hohoanganhfu
    Thành viên chính thức
    • Jan 2012
    • 99

    #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, 10:11.

    Comment

    • sboy888
      Thành viên mới
      • Nov 2011
      • 8

      #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, 12:05.

      Comment

      • hitechvn
        Thành viên chính thức
        • Mar 2012
        • 42

        #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

        • hohoanganhfu
          Thành viên chính thức
          • Jan 2012
          • 99

          #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

          • sang_dientu
            Thành viên tích cực
            • Oct 2009
            • 1563

            #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...