Thông báo

Collapse
No announcement yet.

[thắc mắc] Bàn phím ma trận 4x4

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

  • [thắc mắc] Bàn phím ma trận 4x4

    Hiện tại em đang làm đồ án môn học I. Đề tài em làm là mạch khóa số điện tử (có thể thay đổi mã số) hiển thị lên LCD 16x2. Sau thời gian tìm tòi cũng đó có được một cái mạch mô phỏng hoàn chỉnh. Nhưng hiện tại mạch của em sử dụng 2 bàn phím độc lập: 1 bàn phím dạng ma trận chứa 0 tới 9. và một bàn phím sử dụng nút bấm đến thẳng chân của vi điều khiển chứa các phím chắc năng: nhập pass, đổi pass, enter, clear và exit. em thấy tổng số nút bấm vẫn nhỏ hơn 16 nên em muốn chuyển hết các phím chúng năng lên chung với phím số để có thể dùng 1 keypad cho tiện. Bác nào giúp em với ... em đã thử nhiều kiểu mà keil c đều báo lỗi.
    Đây là code của em:
    #include<reg52.h>
    #include<stdio.h>
    //------ Khai Bao LCD------//
    sbit RS=P3^1;
    sbit EN=P3^0;
    sbit l=P2^6;
    //------ Khai Bao Nut Nhan ------//
    sbit exit=P2^7;
    sbit pass=P3^4;
    sbit change=P3^5;
    sbit clear=P3^6;
    sbit ok=P3^7;
    //------ Khai Bao Dong Co ------//
    sbit ledbao=P2^4;
    //------ Khai Bao Ma Tran Phim ------//
    sbit cot1=P1^4;
    sbit cot2=P1^5;
    sbit cot3=P1^6;
    sbit cot4=P1^7;
    //------- Khai Bao Bien ------//
    char k=0,k1=0,k2=0,k4=0;
    char number=0,number2,number1=1234;
    char gt=0,gt1=0,y;
    //*********************************//
    void delay( int t)
    {
    int i;
    for(i = 0;i<=t;i++);
    }
    //*********************************//
    void loa(void)
    {
    char j;
    for(j=0;j<=50;j++)
    {
    l=0;
    delay(20);
    l=1;
    delay(20);
    }
    }
    //*********************************//
    void ghilenh(unsigned char a)
    {
    delay(100);
    RS=0;
    EN=1;
    P0=a;
    EN=0;
    }
    //*********************************//
    void ghidulieu(unsigned char b)
    {
    delay(100);
    RS=1;
    EN=1;
    P0=b;
    EN=0;
    }
    //*********************************//
    void chuoi( char *s) //ghi ky tu len LCD
    {
    while(*s)
    {
    ghidulieu(*s);
    s++;
    }
    }
    //*********************************//
    void dieukhien(void) //khoi tao LCD
    {
    ghilenh(0x01);
    ghilenh(0x38);
    ghilenh(0x0C);
    }
    //*********************************//
    void quetphim(void) //ham quet phim
    {
    char x;
    unsigned char H[4]={0xFE,0xFD,0xFB,0xF7};
    for(x=0;x<4;x++)
    {
    P1=H[x];
    if(cot1==0)
    {
    loa();
    while(cot1==0);
    gt=x;
    k++;
    }
    if(cot2==0)
    {
    loa();
    while(cot2==0);
    gt=4+x;
    k++;
    }
    if(cot3==0)
    {
    loa();
    while(cot3==0);
    gt=8+x;
    k++;
    }

    }

    }
    //*********************************//
    void commond(void) //xu ly gia tri nhap vao
    {
    quetphim();
    if(gt!=gt1)
    number =( number* 10 + gt); //chuoi password
    gt1=gt;

    if(k==0)
    {

    ghilenh(0xC0);
    chuoi(" ");
    }
    else
    {

    ghilenh(0xC0+k);
    chuoi("*");
    }

    if(k>9) //cho phep password khong qua 9 so
    {
    k=0;
    ghilenh(0x80);
    chuoi(" ");
    ghilenh(0xC0);
    chuoi(" LOI ");
    delay(30000);
    delay(30000);
    ghilenh(0x01);
    }
    if(clear==0) //clear xoa man hinh
    {
    loa();
    number=0;
    k=0;
    ghilenh(0x01);

    }
    }
    //*********************************//
    void nhappassword(void) //Nhap Password
    {
    k1++;
    ghilenh(0x01);
    number=0;
    k=k4=0;
    while(k1==1)
    {
    if( exit==0)
    {
    loa();
    while(exit==0);
    k1=0;
    }
    ghilenh(0x80);
    chuoi(" PASSWORD : ");
    commond();
    if(ok==0)
    {
    loa();
    while(ok==0);
    if((number==number1))
    {
    ghilenh(0x01);
    ghilenh(0x80);
    chuoi(" CHAP NHAN ");
    {
    ledbao=0;
    delay(30000);
    delay(30000);
    ledbao=1;

    }
    k=k1=0;
    ghilenh(0x01);
    }
    else
    {
    if((number!=number1)&&(k4==0))
    {
    number=0;
    k=0;
    k4++;
    ghilenh(0x80);
    chuoi("PASS SAI LAN 1");
    ghilenh(0xC0);
    chuoi(" ");
    delay(30000);
    delay(30000);
    }
    else
    {
    if((number!=number1)&&(k4==1))
    {
    number=0;
    k=0;
    k4++;
    ghilenh(0x80);
    chuoi("PASS SAI LAN 2");
    ghilenh(0xC0);
    chuoi(" ");
    delay(30000);
    delay(30000);
    }

    else
    {
    if((number!=number1)&&(k4==2))
    {
    while(k4==2)
    {
    k=0;
    ghilenh(0x80);
    chuoi(" ");
    ghilenh(0xC0);
    chuoi(" QUA 3 LAN ");
    loa();
    number=0;
    if(exit==0)
    {
    loa();
    k=k1=k4=0;
    ghilenh(0x01);
    }

    }
    }
    }
    }
    }
    }
    }
    }
    //*********************************//
    void doipassword(void) //Ham Doi password
    {
    k2++;
    ghilenh(0x01);
    number=0;
    gt=gt1=0;
    k=k1=k4=0;
    number=0;
    while(k2==1)
    {
    if( exit==0)
    {
    loa();
    while(exit==0);
    k2 =0;
    }
    ghilenh(0x80);
    chuoi(" PASS CU : ");
    commond();
    if(ok==0)
    {
    loa();
    while(ok==0);
    if((number!=number1)&&(k4==0))
    {
    number=0;
    k=0;
    k4++;
    ghilenh(0x80);
    chuoi(" PASS SAI LAN 1 ");
    ghilenh(0xC0);
    chuoi(" ");
    delay(30000);
    delay(30000);
    }
    else
    {
    if((number!=number1)&&(k4==1))
    {
    number=0;
    k=0;
    k4++;
    ghilenh(0x80);
    chuoi(" PASS SAI LAN 2 ");
    ghilenh(0xC0);
    chuoi(" ");
    delay(30000);
    delay(30000);
    }

    else
    {
    if((number!=number1)&&(k4==2))
    {
    while(k4==2)
    {
    k=0;
    ghilenh(0x80);
    chuoi(" ");
    ghilenh(0xC0);
    chuoi(" QUA 3 LAN ");
    loa();
    if(exit==0)
    {
    loa();
    while(exit==0);
    number=0;
    k2=k4=0;
    }

    }
    }
    }
    }
    if((number==number1))
    {
    number=0;
    k=k4=0;
    ghilenh(0x01);
    while(k4==0)
    {
    ghilenh(0x80);
    chuoi(" PASS MOI: ");
    commond();
    number2=number;
    if((ok==0)&&(k4==0))
    {
    loa();
    while(ok==0);
    k4++;
    k=0;
    ghilenh(0x01);
    number=0;
    while(k4==1)
    {
    ghilenh(0x80);
    chuoi(" NHAP LAI PASS:");
    commond();
    if(ok==0)
    {
    loa();
    while(ok==0);;
    if(number==number2)
    {
    number1=number;
    k1=k2=0;
    k4=2;
    number=0;
    ghilenh(0x01);
    ghilenh(0x80);
    chuoi(" DOI THANH CONG");
    delay(30000);
    delay(30000);
    ghilenh(0x01);
    }
    }
    }
    }
    }
    }
    }
    }
    }
    //*********************************//
    void dieukien()
    {
    if((pass==0)&&(change==1))
    {
    loa();
    nhappassword();
    }
    else
    if((pass==1)&&(change==0))
    {
    loa();
    doipassword();
    }
    }
    //*********************************//Click image for larger version

Name:	design.JPG
Views:	1
Size:	146.7 KB
ID:	1416384

  • #2
    không có ai giúp em ah

    Comment


    • #3
      thông thường để check 1 code ko phải mình viết mất khá nhiều thời gian, hơn nữa là code bạn post lên kiểu này ai cũng lười và ngại copy về, tạo project, xây dựng mô phỏng... cả đống bước, nhìn thấy thế ai chả lười, thay vì thế bạn ko post project lên hoặc nói những lỗi keilC báo khi bạn build ko đc. ngoài ra bạn cần học phong cách viết code, nhìn code thế kia chả biết lệnh nào của hàm nào, chương trình nào, cần sắp xếp nó gọn và theo hàng nối mọi người sẽ dễ dàng check code cho bạn đc
      Website chính thức đổi địa chỉ website thành
      Mời các bạn ghé thăm !!!

      Comment


      • #4
        Mình lười đọc lắm. Mình cũng đang làm đồ án môn học 1 đây. Nếu rảnh thì qua bk hà nội mình giúp.

        Comment


        • #5
          Như thế này dọc kinh còn đỡ hơn đọc code
          Email:
          Phone: 0969 226 539

          Comment

          Về tác giả

          Collapse

          mr.kao Tìm hiểu thêm về mr.kao

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

          Collapse

          • mèomướp
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi mèomướp
            Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
            Hôm qua, 13:11
          • tuyennhan
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi tuyennhan
            Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
            Hôm qua, 09:25
          • tuyennhan
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi tuyennhan
            Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
            Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
            Hôm qua, 09:10
          • Ng.Phuong.5
            Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
            bởi Ng.Phuong.5
            Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
            Mấy con...
            09-01-2025, 19:44
          • viettinh
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi viettinh
            Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
            Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
            09-01-2025, 18:12
          • nguyendinhvan
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi nguyendinhvan
            Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
            Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
            Cách đơn giản...
            09-01-2025, 00:04
          • mèomướp
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi mèomướp
            Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
            08-01-2025, 19:02
          • tuyennhan
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi tuyennhan
            Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
            08-01-2025, 15:43
          • tuyennhan
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi tuyennhan
            Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
            08-01-2025, 15:28
          • mèomướp
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi mèomướp
            Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
            08-01-2025, 11:44
          Đang tải...
          X