Thông báo

Collapse
No announcement yet.

lập trình C nút bấm

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

  • lập trình C nút bấm



    Hỏi: nhấn nút lần 1 led sáng nhấn lần 2 led tắt
    Last edited by vuthai; 04-03-2013, 18:37.
    Câu Lạc Bộ Sáng Tạo

  • #2
    Nguyên văn bởi vuthai Xem bài viết
    Đây là ảnh minh họa:


    nhất nút lần 1 led sáng nhấn lần 2 led tắt
    không biết bạn này đưa lên để hỏi hay là để làm gì đây nữa.

    Comment


    • #3
      Nguyên văn bởi voiviqua Xem bài viết
      không biết bạn này đưa lên để hỏi hay là để làm gì đây nữa.
      lên để hỏi chứ làm gì minh họa cho các b dễ hiểu mà
      Câu Lạc Bộ Sáng Tạo

      Comment


      • #4
        if(nut) P1_0=0
        else p1_0=1

        Comment


        • #5
          count=0;
          for(
          {
          if(!nut)
          {
          count++;
          if(count>2) count=0;
          }

          switch(count)
          {
          case 1: P1_0=1;
          break;
          case 2: P1_0=0;
          break;
          }

          }

          Comment


          • #6
            Nguyên văn bởi thanhnha220 Xem bài viết
            if(nut) P1_0=0
            else p1_0=1
            Không đúng mong muốn của người ta, phải viết lại thế này:
            Code:
            while (true) {
            if (nut) {
             if (P1_0==0) P1_0=1;
             else P1_0=0;
            }
            }
            Last edited by nauda; 05-03-2013, 00:40. Lý do: highlighted code
            Bạn SV nào có nhu cầu thưc tập thì pm mình nhé. Thông tin liên hệ xem của mình nhé!

            Comment


            • #7
              Nguyên văn bởi nauda Xem bài viết
              Không đúng mong muốn của người ta, phải viết lại thế này:
              Code:
              while (true) {
              if (nut) {
               if (P1_0==0) P1_0=1;
               else P1_0=0;
              
              }
              }
              tui viết chính xác 100% đấy ngắn gọn bấm cái led nó sáng bấm cái led nó tắt hông tin cứ thử xem

              Comment


              • #8
                mấy bạn viết rắc rối vậy,cần có trễ để chống nhiễu cho nút nhấn còn việc đảo trạng thái thì chỉ cần thế này if(!nut) p1_0=!p1_0;

                Comment


                • #9
                  cái này dùng ngắt ngoài cho nhanh.

                  Comment


                  • #10
                    Đang test code xem code nào tối ưu nhất , cảm ơn tất cả mọi người đã trả lời
                    Câu Lạc Bộ Sáng Tạo

                    Comment


                    • #11
                      #include <REG2051.H>
                      void main(void)
                      {
                      while(1)
                      {
                      if(P3_2==0){
                      P1_0=!P1_0;
                      }
                      }
                      }

                      Code này chạy dc nhưng bị rung phím giữ phím là nó nháy, có ai bít khắc phục lỗi giúp m với
                      Last edited by vuthai; 05-03-2013, 15:08.
                      Câu Lạc Bộ Sáng Tạo

                      Comment


                      • #12
                        Nguyên văn bởi chjpchjp1991
                        Chip viết lại code cho bạn nào làm cho dễ hiểu nè..Chip làm vội nên nhấn nút chưa mượt lắm..bạn chỉnh lại tí nhé..^^
                        #include <REG2051.H>
                        unsigned char count=0;
                        void delay(unsigned char t){
                        unsigned char i;
                        for(i=0;i<t;i++){
                        TMOD=0x01;
                        TH0=0x61; //-50000us
                        TL0=0xa8;
                        TR0=1;
                        while(!TF0); //cho timer0 tran
                        TF0=TR0=0;
                        }
                        }
                        void button(void)
                        {
                        if(!P3_2)
                        {
                        while(!P3_2)
                        {delay(1);}
                        count++;
                        if(count>2) count=0;
                        }

                        switch(count)
                        {
                        case 1: P1_0=1;delay(1);
                        break;
                        case 2: P1_0=0;delay(1);
                        break;
                        }
                        }

                        void main(void)
                        { P1_0=0;
                        while(1)
                        {
                        button();
                        delay(1);
                        }
                        }

                        Code này m sửa lại thì chạy OK nhưng sao mà nhấn lần đầu đèn bật sau đó nhấn lần 2 thì tắt ok nhưng khi vào lượt nhấn thứ 3 thì led vẫn tắt phải để lượt thứ 4 thì led mới sáng.
                        không theo kiểu:
                        lần nhấn: 0-1-2-3-4-5
                        Led : 0-1-0-1-0-1
                        Câu Lạc Bộ Sáng Tạo

                        Comment


                        • #13
                          Nguyên văn bởi chjpchjp1991
                          Chip viết lại code cho bạn nào làm cho dễ hiểu nè..Chip làm vội nên nhấn nút chưa mượt lắm..bạn chỉnh lại tí nhé..^^
                          #include <REG2051.H>
                          unsigned char count=0;
                          void delay(unsigned char t){
                          unsigned char i;
                          for(i=0;i<t;i++){
                          TMOD=0x01;
                          TH0=0x61; //-50000us
                          TL0=0xa8;
                          TR0=1;
                          while(!TF0); //cho timer0 tran
                          TF0=TR0=0;
                          }
                          }
                          void button(void)
                          {
                          if(!P3_2)
                          {
                          while(!P3_2)
                          {delay(1);}
                          count++;
                          if(count>2) count=0;
                          }

                          switch(count)
                          {
                          case 1: P1_0=1;delay(1);
                          break;
                          case 2: P1_0=0;delay(1);
                          break;
                          }
                          }

                          void main(void)
                          { P1_0=0;
                          while(1)
                          {
                          button();
                          delay(1);
                          }
                          }

                          Code này m sửa lại thì chạy OK nhưng sao mà nhấn lần đầu đèn bật sau đó nhấn lần 2 thì tắt ok nhưng khi vào lượt nhấn thứ 3 thì led vẫn tắt phải để lượt thứ 4 thì led mới sáng.
                          không theo kiểu:
                          lần nhấn: 0-1-2-3-4-5...
                          Led : 0-1-0-1-0-1...
                          Câu Lạc Bộ Sáng Tạo

                          Comment


                          • #14
                            toàn code dễ không tự sửa được hay sao ?
                            |

                            Comment


                            • #15
                              Nguyên văn bởi vuthai Xem bài viết


                              Hỏi: nhấn nút lần 1 led sáng nhấn lần 2 led tắt
                              Dùng ngắt ngoài đáp ứng nhanh với thời gian thực, có thể bổ sung thêm chống rung phím bằng phần cứng:
                              Code:
                              #include<reg2051.h>
                              sbit led = P1^0;
                              void main(void)
                              {
                              	EA = 1;	//Cho phep ngat toan cuc
                              	EX0 = 1; 	//Cho phep ngat ngoai 0
                              	IT0 = 1;	//Cho phep ngat ngoai 0 suon am
                              	while(1);
                              }
                              void ngatngoai1()interrupt 0
                              {
                              	led = ~led;
                              }
                              VNATR Forum:

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X