Thông báo

Collapse
No announcement yet.

lấy sườn nút bấm trong Kiel-C

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

  • lấy sườn nút bấm trong Kiel-C

    mình đang làm 1 bài có yêu cầu như sau:
    có 2 nút bấm: tăng, giảm hiển thị số lên lcd
    ban đầu hiển thị số 0
    ấn tăng số hiển thị tăng lên 1 ấn giảm thì giảm đi 1.
    chương trình mình viết đã hiển thị được số nhưng mình gặp phải 1 vấn đề: do vòng quét phím rất nhanh nên khi mình ấn nút giá trị sẽ tăng ko phải là 1 mà là rất lớn. bây giờ mình muốn chỉ khi nào có sự thay đổi sườn xung ở nút bấm thì giá trị mới được thay đổi mà ko biết làm thế nào. mong các bác chỉ giáo

  • #2
    Thuật toán quét nút và chống nhiễu nút đơn giản làm thế này bạn nhé...
    - trường hợp 1: muốn tác động trong khi giữ nút
    nếu nút =0 ( được nhấn ) thì đợi một chút ( cỡ chục ms tùy nút ) lại nếu nút vẫn được nhấn thì làm gì thì làm ...
    code :
    if ( nut == 0 )
    {
    delay(abc);
    if ( nut == 0 ) { ha ha ha chính xác nút đang bị giữ ... muốn làm gì thì làm}
    }

    - trường hợp 2: muốn tác động trong khi nhả nút
    nếu nút =0 ( được nhấn ) thì đợi một chút ( cỡ vài ms tùy nút ) lại nếu nút vẫn được nhấn thì đợi khi nào nhả nút ( nut = 1 ) ta tiến hành công việc ví dụ x = x + 1
    code:
    if ( nut == 0 )
    {
    delay_ms(5);
    if ( nut == 0 )
    {
    delay_ms(1);
    while(nut == 0);
    x = x+1;
    }
    }

    - trường hợp 3: sử dụng truyền biến phối hợp với chương trình chính quét nút liên tục ... để bài viết tới mình viết tiếp sau nhé giờ muộn quá rùi.

    Comment


    • #3
      Dùng 1 biến tạm thời lưu giữ trạng thái nút bấm trong quá khứ. So sánh trạng thái này với trạng thái hiện tại sẽ phát hiện được sườn xung cho dù vòng quét rất nhanh kể cả khi trong vòng quét không có delay.
      Code:
      unsigned char temp=0;
      while(1)           // chương trình chính.
      {
      if(temp==0&&PIN==1) 
      {
      // Nút đã được nhấn.....
      // Làm gì đó ở đây...
      }
      temp=PIN; // lưu trạng thái 
      // Các chương trình tiếp theo.
      }

      Comment


      • #4
        Cái này là thuật toán chống rung trong bàn phím:
        -Đầu tiên:Kiểm tra tình trạng hiện tại của nút bấm(Bấm hay chưa)?
        -TRễ 1 khoảng thời gian
        -KIểm tra lại tình trạng nút bấm.Nếu nó vẫn đựợc bấm thì đúng là cái nút đó đã được bấm.Bạn làm gi thì làm
        myPage:

        Comment


        • #5
          Chống rung chỉ cần hỏi từ 0-1-0 thế đó.Cứ 10ms quét 1 lần.Kô nên quét liên tục.Nó ra cả tràng.
          , , ,

          Comment


          • #6
            cảm ơn các bác đã quan tâm giúp đỡ. hiện em đã mô phỏng cho chạy ok. đang cắm thử mạch thật nếu còn vấn đề gì mong các bác giúp đỡ em tiếp

            Comment


            • #7
              CÒn có một cách nữa người ta hay dùng là như sau !
              if (nut==0)
              {
              while (nut==0) {} //đợi cho đến khi nhả nút ra mới thực hiện công việc
              //Phần công việc nếu nút được nhấn
              ...
              ...
              }

              Comment


              • #8
                cách của bạn aka _quan cũng đc, nhưng phải có tụ chống nhiêu cơ khí, mún chắc ăn thì thuật toán phải ntn

                //nut=1 : nhấn
                //nut=0 : thả
                ///lấy cạnh lên
                nếu nut=1;
                chờ;
                nếu nút tiếp tục bằng 1;
                đúng{==>thực hiện;};
                else{quay lại chờ nut=1};



                //lấy cạnh xuống
                nếu nut=1;
                chờ;
                nếu nút tiếp tục bằng 1;
                chờ đến khi nút =0;
                chờ tiếp nếu nút tiếp tục bằng =0;
                đúng
                {==>thực hiện};
                else
                {nhảy lại từ đầu, chờ nut=1}

                cách này tránh tốt tình trạng nhiễu cơ khí
                TamPhieuLuuKy@yahoo.com
                092 2838 712 --->>

                Comment


                • #9
                  Mình có ý kiến thế này: Mỗi người có thể kết nối nút bấm khác nhau để lấy sườn âm hay sườn dương, nhưng để biết được nút được bấm hay chưa chì cần đọc trạng thái thay đổi của nó là đủ. Ex code:
                  delay_ms(15);
                  if(!sw)
                  {
                  //lệnh thực thi
                  }
                  while(!sw);
                  delay_ms(15);

                  Comment


                  • #10
                    bit StatusPhim; // '0': trạng thái phím đã nhả (không được nhấn);'1' trạng thái phím đang được nhấn (chưa nhả)

                    if(phim)// phim đã nhả
                    {
                    StatusPhim=0;
                    }

                    if(phim==0&StatusPhim==0) // nếu phím được nhấn đồng thời kiểm tra trạng thái nhấn của lần trước đó đã nhả chưa, nếu thỏa mãn thì thực hiện
                    {
                    StatusPhim=1; // bật trang thái báo phím đang nhấn
                    // thực hiện công việc ở đây???

                    }


                    p/s: nhấn thỏa mãi cũng không sao, nhấn xong mới thực hiện công việc: đếm tăng giá trị,... có thể không cần tạo trễ =>tiết kiệm thời gian cho vđk trong khi có ct khác dùng ngắt đòi hỏi thời gian thực hiện ngắt rất nhanh. Đã test OK
                    Last edited by thiennv0109; 21-12-2011, 23:31.
                    Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
                    Gmail: -Mobile: 0989.194.472

                    Comment


                    • #11
                      Cách trên nên nối kiểu phím của nút reset, thường thì ở mức '1' còn khi nhấn, phím được kéo xuống mass
                      Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
                      Gmail: -Mobile: 0989.194.472

                      Comment


                      • #12
                        Với biến tạm thời thì xuống mass hay lên Vcc đều như nhau. Không cần delay khi quét, muốn quét tốc độ cao nhất có thể cũng được. Dù giữ nút 1000s vẫn không ra cả tràng bởi vì đây là lấy sườn chứ không phải lấy mức. Nó chỉ có tác dụng khi có sự thay đổi 0>1 hoặc 1>0. Có thể thực hiện công việc ngay khi nhấn nút. Khi giữ nút mà không nhả thì chương trình vẫn hoạt động bình thường.

                        Comment


                        • #13
                          @duong_act: chuẩn bác.
                          Do mục dích của người sử dụng mà viết kiểu nhấn , biến sẽ thay đổi như thế nào thôi.
                          Thường các nút nhấn để chỉnh giá trị người ta hay làm theo kiểu: khi nhấn thì một biến nào đó thay đổi, nếu nhấn và giữ phím trong khoảng thời gian nào đó, giả sử trong 5s mà vẫn nhấn nó sẽ tiếp tục thực hiện thay đổi biến. với cách này để tránh ảnh hưởng đến các cv khác thì dùng thêm time là giải quyết được.
                          Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
                          Gmail: -Mobile: 0989.194.472

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          • since0501
                            Trả lời cho Pin Li-FePO4 (pin sắt) rất dể hỏng! Các biện pháp ngăn ngừa.
                            bởi since0501
                            Mình đào mộ xíu, cho mình hỏi là pin của bác vẫn ok chứ? Mình vừa đóng khối pin 16 cell 40135 thì khi chạy điện áp nó sụt so với khi nghỉ như video mình dẫn link, vậy cho mình hỏi là dung lượng pin sẽ tính khi áp nghỉ hay áp đang hoạt động, và pin sụt áp như vậy là bình thường hay pin kém?
                            ht...
                            hôm nay, 17:56
                          • 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
                          Đang tải...
                          X