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

          • mansion123
            Bật mí những điều ít ai biết về thi công gỗ óc chó
            bởi mansion123
            Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
            ...
            hôm nay, 16:08
          • tuyennhan
            Trả lời cho Tiếng Anh cho người Việt
            bởi tuyennhan
            Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
            Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
            hôm nay, 07:44
          • vi van pham
            Trả lời cho Tiếng Anh cho người Việt
            bởi vi van pham
            Cám ơn những lời chúc tốt đẹp của em.

            Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

            Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
            hôm nay, 02:00
          • nhathung1101
            Trả lời cho Tiếng Anh cho người Việt
            bởi nhathung1101
            Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

            Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

            Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
            Hôm qua, 22:18
          • dinhthuong80
            Trả lời cho Tiếng Anh cho người Việt
            bởi dinhthuong80
            Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

            Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
            Hôm qua, 14:51
          • dinhthuong80
            Trả lời cho Tiếng Anh cho người Việt
            bởi dinhthuong80
            Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

            Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
            Hôm qua, 14:39
          • dinhthuong80
            Trả lời cho Tiếng Anh cho người Việt
            bởi dinhthuong80
            Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

            Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
            Hôm qua, 14:28
          • bqviet
            Trả lời cho Tiếng Anh cho người Việt
            bởi bqviet
            Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
            21-02-2025, 20:26
          • mèomướp
            Trả lời cho Tiếng Anh cho người Việt
            bởi mèomướp
            Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
            21-02-2025, 12:32
          • vi van pham
            Trả lời cho Tiếng Anh cho người Việt
            bởi vi van pham
            Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

            Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
            20-02-2025, 21:31
          Đang tải...
          X