Thông báo

Collapse
No announcement yet.

vi điều khiển 8051

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

  • vi điều khiển 8051

    em có bài toán về ma trận phím viết bằng 89c51, đã viết rồi nhưng không sửa được mong các coa thủ trên 4rum giúp em với!
    //cho ma trận phím 4x4. khi ấn phím nào thì bật sáng phím đó trên led 7thanh.
    //đây là code em viết
    #include <REGX51.H>
    void tre(unsigned int t)
    {
    unsigned int i,j;
    for (i=0;i<t;i++)
    for(j=0;j<201;j++);
    }
    void quetphim()
    {
    P2=0xff; //set cac hang len muc cao
    if (P2_7==0)
    hang1();
    if (P2_6==0)
    hang2();
    if (P2_5==0)
    hang3();
    if (P2_4==0)
    hang4();
    }
    void khongbam()//cac led 7 thanh hien so 0
    {
    P2=0x0f;
    P1=0x40;
    P3=0x40;
    }
    void hang1()
    {
    P2=0xef;
    if (P2_3==0)
    nut1();
    if(P2_2==0)
    nut2();
    if(P2_1==0)
    nut3();
    if(P2_0=0)
    nut4();
    }
    void hang2()
    {
    P2=oxbf;
    if(P2_3==0)
    nut5();
    if(P2_2==0)
    nut6();
    if(P2_1==0)
    nut7();
    if(P2_0==0)
    nut8();
    }
    void hang3()
    {
    P2=0xdf;
    if(P2_3==0)
    nut9();
    if(P2_2==0)
    nut10();
    if(P2_1==0)
    nut11();
    if(P2_0==0)
    nut12();
    }
    void hang4()
    {
    P2=0x1f;
    if(P2_3==0)
    nut13();
    if(P2_2==0)
    nut14();
    if(P2_1==0)
    nut15();
    if(P2_0==0)
    nut16();
    }
    void nut1()
    {
    chongrung();
    P1=0x79; //bat so 1 tren led 7 thanh noi voi port1
    P3=0x40; //bat so 0 tren led 7 seg noi voi port3
    }
    void nut2()
    {
    chongrung();
    P1=0x24;
    P3=0x40;
    }
    void nut3()
    {
    chongrung();
    P1=0x30;
    P3=0x40;
    }
    void nut4()
    {
    chongrung();
    P1=0x19;
    P3=0x40;
    }
    void nut5()
    {
    chongrung();
    P1=0x12;
    P3=0x40;
    }
    void nut6()
    {
    chongrung();
    P1=0x03
    P3=0x40;
    }
    void nut7()
    {
    chongrung();
    P1=0x78;
    P3=0x40;
    }
    void nut8()
    {
    chongrung();
    P1=0x00;
    P3=0x40;
    }
    void nut9()
    {
    chongrung();
    P1=0x10;
    P3=0x40;
    }
    void nut10()
    {
    chongrung();
    P3=0x79;
    P1=0x40;
    }
    void nut11()
    {
    chongrung();
    P3=0x79;
    P1=0x79;
    }
    void nut12()
    {
    chongrung();
    P3=0x79;
    P1=0x24;
    }
    void nut13()
    {
    chongrung();
    P3=0x79;
    P1=0x30;
    }
    void nut14()
    {
    chongrung();
    P3=0x79;
    P1=0x19;
    }
    void nut15()
    {
    chongrung();
    P3=0x79;
    P1=0x12;
    }
    void nut16()
    {
    chongrung();
    P3=0x79;
    P1=0x03;
    }
    void chongrung()
    tre(50);
    void main()
    {
    while (1)
    {
    quetphim();
    }
    }

  • #2
    em có bài toán về ma trận phím viết bằng 89c51, đã viết rồi nhưng không sửa được mong các coa thủ trên 4rum giúp em với!
    Tôi nghĩ lỗi của bạn nằm ở đây:
    P2=0xff; //set cac hang len muc cao
    - Bạn nối 4 hàng và 4 cột của ma trận phím đều vào port 2. Khi bạn đặt P2 = 0xff trước khi quét phím, vậy thì khi một phím được bấm, sẽ chẳng có hàng nào chuyển xuống mức thấp , nên không một lệnh if nào được thực hiện cả.

    - Thuật toán quét phím bạn có thể thực hiện như sau:
    + B1: Đặt các hàng làm đầu vào, các cột làm đầu ra mức thấp
    +B2: Lần lượt kiểm tra các hàng xem có phím nào được bấm hay không.
    +B3: Nếu một hàng có phím bấm thì đặt hàng đó làm đầu ra mức thấp, đặt các cột làm đầu vào.
    +B4: Lần lượt kiểm tra các cột xem phím bấm nằm ở cột nào.

    - Chương trình hiển thị số thứ tự của phím bạn nên sử dụng ngắt timer.
    - Chương trình của bạn viết hơi phức tạp. Bạn có thể tham khảo một chương chương trình mẫu trong file tôi gửi kèm.
    Attached Files
    For a better world

    Comment


    • #3
      cảm ơn bác toan.vn nhá!
      nhưng sao bác lại phải sử dụng timer thế. có vẻ phức tạp thêm rôi, mô phỏng không chạy được mặc dù code dúng rồi.

      Comment


      • #4
        nhưng sao bác lại phải sử dụng timer thế. có vẻ phức tạp thêm rôi, mô phỏng không chạy được mặc dù code dúng rồi.
        - Sorry, tại tôi không dùng mô phỏng bao giờ, nhưng đối với bài toán quét phím trên mạch thật, bạn nên quét LED bằng ngắt timer, để tiết kiệm thời gian xử lý của CPU. CPU sẽ dành nhiều thời gian cho việc quét phím hơn.

        Thân mến,
        For a better world

        Comment


        • #5
          uh! thanks bạn toan.lv nhé tiện đây giúp tôi cái bài bắt xườn xung luôn nhé.
          //cho 2 cảm biến thông qua gắn vào chân P@_0 và P2_4. P2_0 gắn ở lối vào còn P2_4 ở //lối ra của 1 phòng chờ . Hãy bật đèn xanh khi ki số người trong phòng <=15, đèn đỏ khi //lớn hơn 20 người và còn lạ bật đèn vàng.
          #include <REGX51.H>
          #define dendo P1_0
          #define denvang P1_1
          #define denxanh P1_2
          void main ()
          {
          bit oldP2_0,newP2_0,oldP2_4,newP2_4;
          unsigned char vao,ra;
          vao=0; ra=0;
          while(1)
          {
          oldP2_0=newP2_0;
          newP2_0=P2_0;
          oldP2_4=newP2_4;
          newP2_4=P2_4;
          if((P2_0==1)&&(newP2_0==0))
          {
          if(oldP2_4==1)
          {
          vao++;
          if(vao<=15)
          denxanh=0;//bat den xanh
          else if((vao>15)&&(vao<=20))
          {
          denvang=0;//bat den vang
          denxanh=1;//tat den xanh
          }
          else if (vao>20)
          {
          dendo=0;//bat den do
          denvang=1;//tat den vang
          }
          }
          else
          {
          ra--;

          if(15<(vao-ra)<21)
          {
          denxanh=dendo=1;
          denvang=0;
          }
          else if((vao-ra)>20)
          {
          denvang=1;
          dendo=0;
          }
          else if (vao==ra)
          {
          dendo=1;
          denxanh=0;

          }
          }
          }
          }

          Comment


          • #6
            //cho 2 cảm biến thông qua gắn vào chân P@_0 và P2_4. P2_0 gắn ở lối vào còn P2_4 ở //lối ra của 1 phòng chờ . Hãy bật đèn xanh khi ki số người trong phòng <=15, đèn đỏ khi //lớn hơn 20 người và còn lạ bật đèn vàng.
            Bạn thử đưa bài toán và thiết kế của bạn lên thì mới phân tích được. Nếu chỉ nối 2 cảm biến vào VDK ở lối vào và lối ra như vậy thì làm thế nào để phân biệt được các trường hợp sau:
            +Hai người hoặc lớn hơn 2 người cùng đi ra (hoặc đi vào) một lúc (chắc là cửa phải lớn chứ không thể nhỏ để chỉ 1 người đi vừa).
            +Hai người đi vào và đi ra trên cùng 1 cửa.

            Thân mến,
            For a better world

            Comment


            • #7
              đó là thiết kế của tui rồi đó bác ạ. còn phần cứng thì ghépdddown giản thôi với proteus 2min là song mà. 2 cảm biến tương ứng với hai nút bấm gắn vào P2_0 và P2_4 thôi. còn đèn đỏ tới P1_0, đèn vàng tới P1_1, đèn xanh tới P1_2. bác giúp tôi với nhé! với trường hợp chỉ có 1 người ầo và ra thôi , đơn giản ấy mà.

              Comment

              Về tác giả

              Collapse

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

              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