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

                  Đang tải...
                  X