Thông báo

Collapse
No announcement yet.

Giúp lập trình AT 89S52

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

  • Giúp lập trình AT 89S52

    Chào tất cả các bạn, mình có 1 đề bài thế này, các bạn giúp mình với nhé.
    có 7 phím bấm được nối với P3,
    nếu phím 1 nhấn (P3^0=1) thì: {P0^0=1, nhấp nháy 1 giây}, {P2^0=1, không nháy}, {P1^1=1, nháy với chu kỳ 2 giây}. (quá trình được lặp lại vô tận mặc dù trạng thái của phím nhấn 1 thay đổi cho tới khi có thay đổi trên phím 6 và phím 7)
    nếu phím 2 nhấn (P3^1=1) thì: {P0^1=1, nhấp nháy 1 giây}, {P2^1=1, không nháy}, {P1^1=1, nháy với chu kỳ 2 giây}. (quá trình được lặp lại vô tận mặc dù trạng thái của phím nhấn 2 thay đổi cho tới khi có thay đổi trên phím 6 và phím 7)
    nếu phím 3 nhấn (P3^2=1) thì: {P0^2=1, nhấp nháy 1 giây}, {P2^2=1, không nháy}, {P1^1=1, nháy với chu kỳ 2 giây}. (quá trình được lặp lại vô tận mặc dù trạng thái của phím nhấn 3 thay đổi cho tới khi có thay đổi trên phím 6 và phím 7)
    nếu phím 4 nhấn (P3^3=1) thì: {P0^3=1, nhấp nháy 1 giây}, {P2^3=1, không nháy}, {P1^1=1, nháy với chu kỳ 2 giây}. (quá trình được lặp lại vô tận mặc dù trạng thái của phím nhấn 4 thay đổi cho tới khi có thay đổi trên phím 6 và phím 7)
    lưu ý: nếu nhấn đồng thời 4 nút hoặc 2 nút, hoặc 3 nút thì các trường hợp đầu ra trên được xử lý đồng thời.

    nếu phím 5 nhấn (P3^4=1) thì: {P0^0=P0^1=P0^2=P0^3=1, nhấp nháy 1 giây}, {P2^0=P2^1=P2^2=P2^3=0}, {P1^1=1, nháy với chu kỳ 2 giây}. (quá trình được lặp lại vô tận mặc dù trạng thái của phím nhấn 5 thay đổi cho tới khi có thay đổi trên phím 6 và phím 7).
    khi phím 6 được nhấn (p3^5=1) thì: {các P0^X ở trên không nhấp nháy mà cố định =1, P1^1=0 không nháy nữa.
    khi phím 7 được nhấn (P3^6=1) thì: tất cả trở lại trạng thái xác lập ban đầu.

    Xin nhờ các cao thủ chỉ giáo với, đau đầu cả tháng nay nhưng do trình độ có hạn nên không giải quyết được.
    cảm ơn rất rất nhiều

  • #2
    Bạn lập trình bằng ngôn ngữ gì?
    Mình có góp ý thế này: Bạn viết 5 cái chương trình con nhấp nháy cho các port tương ứng với các phím. Khi bấm đến phím nào thì gọi chương trình con tương ứng cho nó là xong. Chương trình chính của bạn chỉ thực hiện công việc quét các phím xem phím nào được bấm thôi.

    Comment


    • #3
      Viết bằng C bạn ạ, mình đã thử viết như vậy rồi nhưng không được vì ví dụ như nhấn phím 1 xong nhấn phím 2 thì không lưu lại tình trạng trước nữa (tình trạng của phím 1)
      mình đã thử gán cho nó một biến rồi cộng dồn, ý tưởng là như vậy nhưng chưa thành công,
      tiện đây cho mình hỏi, muốn lập trình cho sườn dương của phím bấm thì làm như thế nào nhỉ, ví dụ như khi nhấn phím 1 thì VĐK chỉ cần hiểu chân P3^0 thay đổi từ 0-1 còn khi nhả (tức là thay đổi từ 1-0) thì không quan tâm.

      Comment


      • #4
        Viết bằng C thì mình chịu rồi.
        Nhưng nếu lập trình theo sườn dương thì phải sử dụng đến ngắt. Nhưng ở đây dùng ngắt thì chỉ được có 2 chân thôi vì thế bạn thử dùng cách dò phím (dò trạng thái của các chân).

        Comment


        • #5
          hi, thế thì bạn giúp mình về ý tưởng cũng được,
          khả năng mình thiết kế dùng ic chốt ngoài vậy, khả năng cũng ổn nhỉ

          Comment


          • #6
            Nguyên văn bởi mykhanh Xem bài viết
            Viết bằng C bạn ạ,
            tiện đây cho mình hỏi, muốn lập trình cho sườn dương của phím bấm thì làm như thế nào nhỉ, ví dụ như khi nhấn phím 1 thì VĐK chỉ cần hiểu chân P3^0 thay đổi từ 0-1 còn khi nhả (tức là thay đổi từ 1-0) thì không quan tâm.
            Bạn dùng hàm này :

            sbit set = P3^0;

            bit set0=1,set1=1

            set0=set1;set1=set;
            if((set0==1)&&(set1==0))
            {
            kt++;
            if(kt>7)kt=0;
            }
            Hoặc hàm này :

            sbit tang = P3^0;

            while (tang==0)
            {
            display();
            }

            Comment


            • #7
              Bạn dùng hàm này :

              sbit set = P3^0;

              bit set0=1,set1=1

              set0=set1;set1=set;
              if((set0==1)&&(set1==0))
              {
              kt++;
              if(kt>7)kt=0;
              }
              Hoặc hàm này :

              sbit tang = P3^0;

              while (tang==0)
              {
              display();
              }


              Bạn giải thích câu lệnh dùm mình được không? cảm ơn bạn nhé, để mình thử nghiệm xem sao/ nhưng mình chưa hiểu câu lệnh đó của bạn

              Comment


              • #8
                Ở đây mình gợi ý bạn dùng hàm if để so sánh trạng thái, hoặc hàm while với vòng lặp trạng thái. Mình cho phím bấm tích cực sườn âm.

                Comment


                • #9
                  tramng cho mình hỏi với, nếu dùng hàm if như trên thì mỗi cổng vào mình phải gán cho 1 biến set như trên ak, 7 đầu vào thì có 7 biến ak.

                  Comment


                  • #10
                    Ừ, đây là 2 hàm dùng để dò trạng thái phím nhấn mình hay sử dụng mà bạn Ck33spkt nhắc tới !

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X