Thông báo

Collapse
No announcement yet.

Hỏi về cách đếm số lần nhấn nút

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

  • Hỏi về cách đếm số lần nhấn nút

    Em muốn lập trình để đếm số lần nhấn nút(nút nhấn được nối với 1 chân bất kỳ) thì phải viết thế nào ạ, nhờ các bàc chỉ giùm

  • #2
    Có 2 cách: có thể dùng ngắt ngoài or dùng cách quét phím.
    Attached Files

    Comment


    • #3
      Có phải ý bác phuong197 là cấu trúc switch case trong c phải không ?
      PHP Code:
      switch (...)
      {
      case 
      0:
      ...
      break;
      case 
      1:;
      ...
      break;
      case 
      2:
      ...
      break;


      Comment


      • #4
        dùng ngắt ngoài 0 hoặc ngoài 1 thì ngắn hơn .Cấu trúc switch cáe dài

        Comment


        • #5
          nút nối với chân bất kí thì ai sài ngắt ngoài đc. Viết như thế này này::
          //Doan nay dung ngat dinh thoi la ok
          if(PORTB.0==0)//Noi chan nao thi tuy ban
          {
          a=1;//Gan bien a=1
          }
          if(PORTB.0==1 && a==1)
          {
          dem++;//Tăng số lần bấm nút lên 1 đơn vị
          a=0;
          }
          Phần cứng cho con tụ 104 // với nút bấm là ok/ Cách trên nhẹ nhàng nhất_ko phụ thuộc vào CT chính.


          Add: 97 Quán Nam - Lê Chân - Hải Phòng.
          Tel: 031 518648 Phone: 0904 283 505

          Comment


          • #6
            Em viết chương trình đếm số lần nhấn nút rồi xuất ra led 7 đoạn như sau nhưng nó lại không chạy, các bác chỉ giùm em với

            #include <REGX52.H>
            unsigned char z[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 8};
            bit a;
            unsigned char x;
            void main()
            {
            x=0;
            P2=z[x];
            while(1)
            {
            if(P1_0==1)
            {
            a=1;
            }
            if(P1_0==0 && a==1)
            {
            x++;
            }
            P2=z[x];
            }
            }

            Comment


            • #7
              k chạy là đúng . Nguyên nhân vì để đếm nhấn nút , thì động tác nhấn - nhả mới gọi là kết thúc quá trình nhấn nút
              Code:
              #include <REGX52.H>
              unsigned char z[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 8};
              unsigned char x;
              // chân P1.0 là nút , cổng P2 xuất giá trị . nhớ dùng con trở 10k nối chân P1.0 lên 5v
              void main()
              { P1.0=1; // khởi tạo chân P1.0 là chân nhập 
                 while(1)
                  { 
                      if(!P1.0)
                         { delay_ms(50);while(!P1.0);delay_ms(10); // chống nảy cho phím
                            x++;
                            if(x==10) x=0;
                            P2= z[x];
                         }
                       
                  }
              }
              Đừng nói với tui là bạn mô phỏng nhá , code này chạy trên mạch thực tế chứ mô phỏng thì tui k chắc
              Hàm delay_ms(unsigned char k) tự tạo . vào luồng "hứong dẫn lập trình 8051 trên Keil C" mà tìm hiểu kỹ hơn

              Comment


              • #8
                Cảm ơn bác nhiều lắm

                Comment


                • #9
                  Bây giờ em thêm phím ở P1_1 để giảm thì nó lại không chạy, các bác góp ý giùm xem em sai chỗ nào\

                  #include <REGX52.H>
                  unsigned char z[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 8};
                  unsigned char x;

                  void delay_ms(unsigned int ms)
                  {
                  unsigned int m;
                  unsigned char n;
                  for(m=0;m<ms;m++)
                  for(n=0;n<121;n++)
                  {}
                  }
                  void main()
                  { P1_0=1;P1_1=1;
                  while(1)
                  {
                  if(!P1_0)
                  { delay_ms(50);while(!P1_0);delay_ms(10);
                  x++;
                  if(x==10) x=0;
                  }
                  if(!P1_1)
                  { delay_ms(50);while(!P1_0);delay_ms(10);
                  x--;
                  if(x==10) x=0;
                  }
                  P2=z[x];

                  }
                  }

                  Comment


                  • #10
                    Nguyên văn bởi phuong197 Xem bài viết
                    Bây giờ em thêm phím ở P1_1 để giảm thì nó lại không chạy, các bác góp ý giùm xem em sai chỗ nào\
                    Code:
                    #include <REGX52.H>
                    unsigned char z[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
                    unsigned char x;
                    
                    void delay_ms(unsigned int ms)
                    {
                    unsigned int m;
                    unsigned char n;
                    for(m=0;m<ms;m++)
                    for(n=0;n<121;n++)
                    {}
                    }
                    void main()
                    { P1_0=1;P1_1=1; 
                       while(1)
                        { 
                            if(!P1_0)
                               { delay_ms(50);while(!P1_0);delay_ms(10); 
                                  x++;
                                  if(x==10) x=0;
                               }
                    		  if(!P1_1)
                               { delay_ms(50);while(!P1_0);delay_ms(10); 
                                  x--;
                                  if(x==10) x=0;
                               }
                    	P2=z[x];       
                             
                        }
                    }
                    bạn học vẹt cũng phải vừa vừa thôi chứ , dân lập trình phải hiểu ng ta đang viết j thì mới dám viết code . Pó tay
                    sai chỗ này nè
                    Code:
                     if(!P1_1)
                               { delay_ms(50);while(!P1_0);delay_ms(10); 
                                  x--;
                                  if(x==10) x=0;
                               }
                    phải chữa lại là
                    Code:
                    ......... while(!P1_1); delay_ms(10);
                               x--;if(x==0) x=10;

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X