RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • phuong197
    Thành viên chính thức
    • May 2010
    • 64

    #1

    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
  • leson87
    Banned
    • Mar 2010
    • 48

    #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

    • haicansa
      Thành viên chính thức
      • Apr 2010
      • 80

      #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

      • xmen139
        Thành viên chính thức
        • Oct 2008
        • 64

        #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

        • hoangdai
          Thành viên tích cực
          • Nov 2005
          • 2720

          #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

          • phuong197
            Thành viên chính thức
            • May 2010
            • 64

            #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

            • Zz_Bi_zZ
              Thành viên tích cực
              • Nov 2007
              • 766

              #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

              • phuong197
                Thành viên chính thức
                • May 2010
                • 64

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

                Comment

                • phuong197
                  Thành viên chính thức
                  • May 2010
                  • 64

                  #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

                  • Zz_Bi_zZ
                    Thành viên tích cực
                    • Nov 2007
                    • 766

                    #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...