Thông báo

Collapse
No announcement yet.

Code C quét phím - chống dội phím cho AVR dùng codevision lập trình

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

  • Code C quét phím - chống dội phím cho AVR dùng codevision lập trình

    Hôm nay buồn buồn kg có việc gì làm bèn đem cái code C viết cho con atmega32 dùng để chống dội phím ra cho anh em tham khảo rồi dùng. Code này đảm bảo chống dội phím tối đa, khi bạn nhấn một phím và giữ bất kì bao lâu cũng được, khi nhả phím ra nó mới thực hiện.
    - Kết nối phần cứng bàn phím ma trận 4x4, 4 chân nối vào 4 bit thấp của portB, 4 chân nối vào 4 bit cao của portB.
    - Phuơng pháp quét phím cấp điện lần lượt 4 chân bít thấp, kiểm tra sự thay đổi ở 4 chân bit cao. khi nào có sự thay đổi nhảy đến phần chống dội phím, sau đó xử lí sự kiện có phím nhấn.

    Code quét phím:

    while(1)
    {
    DDRB=0x0F;
    PORTB=0;

    PORTB.0=1;
    delay_ms(5);
    if (PINB>15) break;
    PORTB=0;
    PORTB.1=1;
    delay_ms(5);
    if (PINB>15) break;
    PORTB=0;
    PORTB.2=1;
    delay_ms(5);
    if (PINB>15) break;
    PORTB=0;
    PORTB.3=1;
    delay_ms(5);
    if (PINB>15) break;
    }
    Code chống dội phím
    void chongdoi(void)
    { int i;
    loinhan:;
    for (i=0;i<=50;i++) // khi có phím nhấn sẽ nhảy đến đây
    {
    if (PINB<=15) goto loinhan; //đảm bảo kg còn dội nữa
    }
    ma_key=PINB; // luu gia tri portB
    delay_ms(50);
    while(1)
    {
    if (PINB<=15) //đợi phím nhả ra
    {
    loinha:;
    for (i=0;i<=50;i++)
    {
    if (PINB>15) goto loinha;
    }
    break;
    }
    }
    PORTB=0; //reset PORTB
    }
    Cái này mình tự viết chạy OK, vì làm đồ án mà (T_T). Trước đây search tá lả lun mà kg có, đành tự tìm hiểu rùi tự viết thấy khổ quá, giờ share cho anh em khỏi cất công viết lại cực khổ, vì mình đã trải qua cái khổ rùi! Khổ chỉ một lần, có gì anh em ta share cho nhau!!!!!!
    Last edited by bijusi@; 11-11-2008, 10:07.

  • #2
    Ngoài cách trên ra có một cách chống dội đơn giản nhưng hiệu quả hơn như sau:

    Code:
    cur_key = <giá trị hiện tại của phím>;
    
    is_keypressed = (cur_key) & (!old_key);
    if (is_keypressed) 
      {do anything...;}
    
    old_key = cur_key;
    Tham khảo:

    http://dientuvietnam.net/forums/showthread.php?t=19162

    Comment


    • #3
      bài viết của anh hay quá, em cũng muốn tìm hiểu các quét phím thì đọc được lại giải quyết tổng thể luôn cả vấn đề chống dội, giờ em chỉ cần bổ xung một chương trình con giải mã nữa(một lệng switch-case) nữa là OK rồi
      Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

      Comment


      • #4
        bài viết của anh hay quá, em cũng muốn tìm hiểu các quét phím thì đọc được lại giải quyết tổng thể luôn cả vấn đề chống dội, giờ em chỉ cần bổ xung một chương trình con giải mã nữa(một lệng switch-case) nữa là OK rồi
        nhưng em nghĩ có nên cần phần kiểm tra nhả không anh? vì chuẩn nhất là như bàn phím máy tính, nếu cứ giữ phím nhấn thì giá trị sẽ được thực hiện liên tục sau những khoảng thời jan nhất định
        Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

        Comment


        • #5
          Nguyên văn bởi Le Thi Bich Xem bài viết
          bài viết của anh hay quá, em cũng muốn tìm hiểu các quét phím thì đọc được lại giải quyết tổng thể luôn cả vấn đề chống dội, giờ em chỉ cần bổ xung một chương trình con giải mã nữa(một lệng switch-case) nữa là OK rồi
          nhưng em nghĩ có nên cần phần kiểm tra nhả không anh? vì chuẩn nhất là như bàn phím máy tính, nếu cứ giữ phím nhấn thì giá trị sẽ được thực hiện liên tục sau những khoảng thời jan nhất định
          Nếu bác làm theo code của mình thì không cần kiểm tra nhả, bác có thể nhấn bao lâu tùy thích, chương trình chỉ biết 1 lầm phím nhấn.

          Cơ chế nhận của bàn phím máy tính khác với ở đây.

          Bác có thể test bằng protues thì biết.

          Comment


          • #6
            nếu muốn nó tác động mình có thể delay chứ kg cần chờ nhả, mà cũng kg bị dội

            Comment


            • #7
              okkk

              kg bị dội
              |

              Comment


              • #8
                Nguyên văn bởi tintintin Xem bài viết
                Ngoài cách trên ra có một cách chống dội đơn giản nhưng hiệu quả hơn như sau:

                Code:
                cur_key = <giá trị hiện tại của phím>;
                
                is_keypressed = (cur_key) & (!old_key);
                if (is_keypressed) 
                  {do anything...;}
                
                old_key = cur_key;
                Tham khảo:

                http://dientuvietnam.net/forums/showthread.php?t=19162

                Tốt nhất là tạo timer 1 ms . đọc cỡ 200 (tùy thuộc vào tốc độ lấy trạng thái của phím nhanh hay chậm.)
                code hơn dài sẽ post sau ( chờ tìm lại. ).

                Comment


                • #9
                  Mình có 1 cách đơn giản sử dụng count thay vì dùng delay,nhưng mình thà là code dài xúi mà chạy ổn định thi tốt hơn. Bạn nào có code chạy ổn định có thể post lên cho anh em tham khảo voi.

                  bit checkbutton ()
                  {
                  unsigned int i=0;
                  while (input==1)
                  {
                  i++;
                  if (i>=precount) {return(1);goto exit;}
                  else return(0);
                  }
                  i=0; return(0);
                  exit:{}
                  }

                  //precount là giá trị đặt trước giới hạn cho biến đếm count
                  //input là đầu vào. Nếu ấn nút thì là 1
                  //hàm checkbutton sẽ chỉ trả về giá trị 1 khi ấn nút thực sự.

                  Comment


                  • #10
                    code của mình là ok rùi, chạy từ đó đến jo vẫn ok, bao xài lun đó

                    Comment


                    • #11
                      mình có post lên code quét phím trên diễn đàn rồi. Các bạn tham khảo tại: http://dientuvietnam.net/forums/showthread.php?t=21148
                      Hy vọng sẽ giúp ích cho việc viết ứng dụng của các bạn

                      Comment


                      • #12
                        Các bạn cho mình hỏi là nếu mình vừa quét phím, vừa quét led có được không nhỉ?
                        Ví dụ mình quét led 7 đoạn và delay mỗi con led 7 đoạn là 20ms chẳng hạn => điều khiển 10 con led thì mất 200ms lận, như vậy nếu user bấm phím trong thời điểm "nhạy cảm" đó thì chương trình có phát hiện ko?
                        Ko lẽ phải viết sự kiện bắt phím ngay trong hàm delay hả mấy pro?

                        Comment


                        • #13
                          tấc cả điều có thể em ah.
                          Tư vấn thiết kế hệ thống điện-điện tử theo yêu cầu.
                          Tel: 0903 702 417. Email: web:

                          Comment


                          • #14
                            vậy phương pháp tổng quát là làm như thế nào hả các bác......

                            Comment


                            • #15
                              Ở mỗi lần phát xung thay vì delay bạn nên dùng time để tạo trễ thời gian và trong lúc đó mình quét kiểm tra và đọc dữ liệu bàn phím một lần. Nhứng nếu dùng cocde của anh Puji... thì bạn phải kéo dài thời gian phát xung quét leb lên 70ms là ít nhất, làm thêm các thao tác sử lý và hiển thị leb thì với 10 leb chu kỳ quét khoảng 1s để không bị nháy bạn phải quét có nhớ
                              Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                              Comment

                              Về tác giả

                              Collapse

                              bijusi@ Tìm hiểu thêm về bijusi@

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

                              Collapse

                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Cám ơn những lời chúc tốt đẹp của em.

                                Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                                Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                                hôm nay, 02:00
                              • nhathung1101
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi nhathung1101
                                Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                                Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                                Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                                Hôm qua, 22:18
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                                Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                                Hôm qua, 14:51
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                                Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                                Hôm qua, 14:39
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                                Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                                Hôm qua, 14:28
                              • bqviet
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi bqviet
                                Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                                21-02-2025, 20:26
                              • mèomướp
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi mèomướp
                                Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                                21-02-2025, 12:32
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                                Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                                20-02-2025, 21:31
                              • bqviet
                                Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                                bởi bqviet
                                Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                                20-02-2025, 17:22
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.

                                Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...
                                20-02-2025, 11:52
                              Đang tải...
                              X