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

  • #16
    mấy cát hạ bàn chuyện rôm rả quá.tại hạ mới vào nghề,nên cũng góp phần hâm nóng màn quét phím này:
    sau đây là code của cát hạ.do mới tìm hiểu AVR atmega 16 nên code co thể chưa dc tối ưu.nhưng mà xài OK lắm.

    #include <mega16.h>
    unsigned char Quetphim [4]={0xEf,0xDf,0xBf,0x7f}; //quet cot
    void Quetbanphim(void)
    {
    unsigned char x,y;
    for(x=0;x<4;x++)
    {
    DDRD=0xf0;
    PORTD=Quetphim[x];
    for(y=0;y<10;y++)
    {
    if(PIND.0==0) { while(PIND.0==0); PORTA = 0+4*x;} // xuat gia tri hien thi ra led port A
    if(PIND.1==0) { while(PIND.1==0); PORTA = 1+4*x;}
    if(PIND.2==0) { while(PIND.2==0); PORTA = 2+4*x;}
    if(PIND.3==0) { while(PIND.3==0); PORTA = 3+4*x;}
    }
    }
    }

    void main(void)
    {
    PORTA=0x00;
    DDRA=0xFF;
    while (1)
    {
    Quetbanphim();

    }
    }

    Comment


    • #17
      nhân tiện đây cho cát hạ hỏi các đại nhân.làm sao minh vào dc thư viện trong codevision để xem no viết j ở trong đấy ấy mà.có cát hạ nào có code cho ds18b20 thì cho tại hạ tham khảo mở rộng tầm mắt với.
      thank!
      mail của tại hạ:
      chotdayeuem_1234@yahoo.com
      tại hạ vô cùng thank!

      Comment


      • #18
        Nguyên văn bởi c4dt1 Xem bài viết
        nhân tiện đây cho cát hạ hỏi các đại nhân.làm sao minh vào dc thư viện trong codevision để xem no viết j ở trong đấy ấy mà.có cát hạ nào có code cho ds18b20 thì cho tại hạ tham khảo mở rộng tầm mắt với.
        thank!
        mail của tại hạ:
        chotdayeuem_1234@yahoo.com
        tại hạ vô cùng thank!

        --- Cách đơn giản xem nó viết thế nào và cách dùng thư viện của nó thế nào thì vào cái Code Wizard ... Tích thử chức năng đó ... sau đó view code lên ...
        Copy đoạn code đó vào bài và dùng !
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment


        • #19
          Code:
          // 1 Wire Bus functions
          #asm
             .equ __w1_port=0x12 ;PORTD
             .equ __w1_bit=0
          #endasm
          #include <1wire.h>
          
          // DS1820 Temperature Sensor functions
          #include <ds1820.h>
          
          // Declare your global variables here
          
          
          -----------------------------
          
          void main()
          {
          
          // 1 Wire Bus initialization
          w1_init();
          
          }
          Ngoài ra có thể xem Ví dụ giao tiếp 18B20 hoặc thư viện của nó trong thư mục cài đặt CodeVision ( Examples & Lib )
          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

          Comment


          • #20
            cảm ơn anh!ý nghĩa quá!

            Comment


            • #21
              Nguyên lý chống rung phím:
              - đọc liên tục trạng thái khi phím được nhấn(khi nhấn thì mức 0/1), tốt nhất là đọc trên timer tần số đọc khoảng 50Hz để khỏi bận tâm việc đọc hay gọi hàm đọc phím sau này.
              - Khi đọc được trạng thái phím nào nhấn thì không cần đọc phím về nữa mà thực hiện trì hoãn môt thời gian thích hợp(0.3s ...) rồi mới đọc lại .
              - 2 bước trên được thực hiện bởi ngắt timer, còn ở chương trình chính(main()) thì chỉ cần hàm kiểm tra trạng thái phím nào được nhấn (if(_press_key(phimX))), vì mỗi khi phím được nhấn thì thời gian lưu giá trị phím là 0.3s. Chú ý nếu chương trình chính mà có quá nhiều hàm delay()--> >0.3s thì xem như phím đó không được nhấn.

              Email:
              Tel: 0983.497.310

              Comment


              • #22
                đang ở trong chương trình ngắt ngoài thì làm thế nào????

                Comment


                • #23
                  Nguyên văn bởi quocthinhtg Xem bài viết
                  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ự.

                  Của bác này cũng được nhưng bị lặp phím nếu giữ key nè.
                  Mình cũng góp thêm tí mới học cũng hí hửng. Của mình ko tốn thòi gian delay trì hoản để chống rung phím.
                  if (st_st==1){
                  t=0;
                  chonglapkey=0;
                  }
                  else {
                  if (chonglapkey==1) {goto thoat;}; //kiem tra chong lap key
                  t++;
                  if (t>=trephim) {

                  if (!flag_onoff){
                  flag_onoff = 1;
                  ON_SIGNAL_OUT // goto khoidonglai;
                  }
                  else {
                  flag_onoff = 0;
                  OFF_SIGNAL_OUT;
                  };
                  PORTB.4 = ~PORTB.4;
                  t=0;
                  chonglapkey=1; //bat chong lap lai khi key chua release
                  }
                  else{
                  ;
                  };
                  }
                  thoat:

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  • bqviet
                    Trả lời cho Đấu tắt điện cho máy tính bảng
                    bởi bqviet
                    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                    06-12-2025, 17:17
                  • nguyendinhvan
                    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                    bởi nguyendinhvan
                    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                    05-12-2025, 19:59
                  • afrendly
                    Trả lời cho Đấu tắt điện cho máy tính bảng
                    bởi afrendly
                    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                    04-12-2025, 01:27
                  • nick22
                    Trả lời cho Máy điện châm ?
                    bởi nick22
                    Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                    01-12-2025, 13:23
                  Đang tải...
                  X