Thông báo

Collapse
No announcement yet.

Đồ án:"dùng sr04 đo khoảng cách +LCD"

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

  • Đồ án:"dùng sr04 đo khoảng cách +LCD"

    chào mọi người
    mọi người xem giúp em phần code này
    em dùng sr04
    echo-pinC2
    trig-pinA1
    nối 2 chân ccp1 &ccp2 với echo(16 &17 -echo)
    dùng 2 ccp:ccp1 & ccp2
    ccp1-bắt sung cạnh lên
    ccp2-bắt sung cạnh xuống
    khi kích chân A1 sung 10us .nếu echo có xung cạch lên tại thời điểm đó set_timer1 .echo có xung cạnh xuống có được thời gian truyền xung time=get_timer1
    đây là code
    Code:
    #include <main.h>
    #include <lcd_lib_4bit.c>
    #include <defs_16f877a.h>
    
    #define SRF05_IN PIN_A1
    ///
    #define SRF05_OUT PIN_C2
    #define CONVERT_TO_MICROSECONDS (20000000/((4)*1000000))
    //khai bao cac bien
    long t;
    int16 tram1,chuc1,donvi1;
    
    #int_ccp1
    //khi say ra ngat ham theo sau duoc thuc thi
      void len(){
      //chuong trinh
      set_timer1(0);//dat timer1 vi tri ngay khi co xung canh len
      }
    #int_ccp2
      void xuong(){
      t=get_timer1();//doc ket qua khi cam bien co tin hieu ve echomuc thap
      }
    
    
    void convert_bcd1(int16 x)
    {
    
    donvi1=(((x%1000)%100)%10) + 0x30; //chia lay phan du, so hang don vi
    tram1=((x%1000)/100) + 0x30; //tach hang tram va hang chuc
    chuc1=((x%1000)%100)/10 + 0x30; 
    ///// hien thi len gia tri LCD////// 
    LCD_putcmd(0xC5);
    LCD_putchar(tram1); 
    LCD_putcmd(0xc6);
    LCD_putchar(chuc1);
    LCD_putcmd(0xC7);
    LCD_putchar(donvi1);
    }
    void main()
    {
    LCD_init();
    //---hien thi LCD---
    LCD_putcmd(0x85);
    LCD_putchar("phu dtd");
    LCD_putcmd(0xC0);
    LCD_putchar("S = ");
    
    
     // Configure CCP1 to capture rise
    setup_ccp1(CCP_CAPTURE_RE); // thiet lap ccp1 do canh len
    setup_ccp2(CCP_CAPTURE_FE); // thiet lap ccp1 do canh xuong
    setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); //20 MHz thì tràn trong 52ms (t?i da xung c?a SRF05 là 30ms)
    enable_interrupts(INT_CCP1); // Setup interrupt on falling edge
    enable_interrupts(INT_CCP2); // Setup interrupt on falling edge
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
    int16 mm2;
    while(TRUE) {
    delay_ms(100);//cho 0.1s
    
    // 10us cho trigger
    output_high(SRF05_IN);
    delay_us(10);
    output_low(SRF05_IN); 
    //tinh ra quang duong
      
    
    mm2=(t*0.028+1.093);//khoang cach can do
    convert_bcd1(mm2); 
    delay_ms(100);
    
    }
    }
    Nạp test thì chỉ hiển thị "S" khi em dịch chuyển sr04 không có gì thay đổi
    kiểm tra code LCD khi em đặt s=cont thì lcd hiển thị
    kiểm tra sr04 có tín hiệu chân echo(còn sống)
    vậy em nghĩ là phần while có vấn đề mọi người xem giúp em!
    mọi người có thể viết em phần kiểm tra ngắt được không?
    em đang tập tành với pic nên gà lắm
    em cảm ơn mọi người đã đọc!
    Last edited by vanphu92; 31-05-2013, 23:59.



  • #2
    giup minh với

    mọi người giúp với
    up
    Last edited by vanphu92; 01-06-2013, 10:53.


    Comment


    • #3
      mình sắp phải nộp rồi mà vẫn chưa chạy
      mọi người giup mình với


      Comment


      • #4
        không ai giúp được mình sao

        Nguyên văn bởi vanphu92 Xem bài viết
        mình sắp phải nộp rồi mà vẫn chưa chạy
        mọi người giup mình với
        mọi người giúp với


        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X