1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

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

Thảo luận trong 'ĐỒ ÁN' bắt đầu bởi vanphu92, 1 Tháng sáu 2013.

?

mọi người giúp mình với

h 0 vote(s) 0.0%
h 0 vote(s) 0.0%
Multiple votes are allowed.
  1. vanphu92 New Member

    Số bài viết: 16
    Đã được thích: 0
    Điểm thành tích: 1
    mọi người xem giúp em phần code này
    minh 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
    Mã:
    #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 minh 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?
    minh đang tập tành với pic nên gà lắm
    minh cảm ơn mọi người đã đọc!
  2. tri_nguyenst New Member

    Số bài viết: 12
    Đã được thích: 0
    Điểm thành tích: 1
    đây là code mẫu bạn xem thử nhé :

    tải cái file schematis ở đây:http://www.mediafire.com/?8gd1ebdjnhg2r37

    #include<at89x52.h>
    #include<lcd.c>

    #define upP2_0
    #define dwnP2_1

    #define roleP3_5
    unsigned char array[3];
    unsigned int k_cach2=0,tam,tram,chuc,dv;
    char i;
    /*=====================================================*/
    /*=====================================================*/
    void inter() interrupt 0
    {
    unsigned int time_return,k_cach=0;

    TR0=0;
    time_return=(TH0*256)|TL0;/*thoi gian phan hoi*/
    k_cach=(time_return-15535)/58;/*TINH DO RONG XUNG = CM*/
    k_cach2=k_cach; /*Gan K_CACH2=K_CACH*/
    if(k_cach2 >= tam)/*nEU k_CACH2 > KHOANG CACH DAT TRUOC*/
    role = 1;/*ROLE = 1 ( LED SANG)*/
    else
    role = 0;/*rOLE = 0 ( LED BINH THUONG) */
    TR0=1; /*kHOI DONG TIMER0*/
    for(i=0;i<3;i++)
    {
    array=k_cach%10; /*GHI NHO MANG array[0]=kc%10 = dv, array[1]=kc%10=chuc,array[2]=tram*/
    k_cach/=10; /*K_CACH=K_CACH/10*/
    }
    mov(0,10);/*chuyen con tro den dong 1, o thu 10*/
    for(i=2;i>=0;i--) /* i chay tu 2 den 0*/
    {
    dat(array+48);/*ghi gia tri len lcd array[2]=tram,array[1]=chuc,array[0]=dv*/
    }
    dat_str("cm ");/*ghi ky tuc tiep theo sau array[0]*/


    }
    /*=====================================================*/
    void time() interrupt 1
    {


    TR0=0; /*xoa bit TR0 xuong 0*/
    P3_0=1; /*gia tri tao xung 10us kich hoat triger*/

    TH0=0x3c;
    TL0=0xaf;

    P3_0=0;/*ket thuc qua trinh kich xung triger 10us*/
    P3_2=1;/*echo len muc 1*/
    while(!P3_2);
    TR0=1; /*Bat dau cho Timer0 dem*/
    }
    /*=====================================================*/

    void main()
    {
    TMOD=1; /*Tmod=1 dem 16bit*/
    TH0=0x3c;/*nap gia tri th0=0x3c*/
    TL0=0xaf;/*nap gia tri tl0=0x3c*/
    ET0=1;/* Cho phep ngat TImer0*/
    EX0=1; /*Cho phep ngat ngoai extenal (chan int0)*/
    IT0=1; /*Tac dong ngat INT0 bang canh xuong*/
    EA=1; /*Cap phep ngat he thong*/
    TR0=1; /*khoi dong timer 0*/
    int_lcd();/*khoi dong lcd*/
    mov(0,0); /*dat con tro ve vi tri (0,0);*/
    dat_str("K_CACH :"); /*Ghi ky tu K_CACH*/
    mov(1,1); /*dat con tro ve vi tri (1,1);*/
    dat_str("SET :"); /*Ghi ky tuc SET*/
    role = 0;
    tam = 135;
    while(1)
    {
    mov(0,0); /*Chuyen con tro dau dong 1 lcd */
    dat_str("K_CACH :"); /* Dat chuoi ky tu K_CACH : len lcd*/
    mov(1,1); /*Chuyen con tro dau dong 2 lcd*/
    dat_str("SET :");/* Dat chuoi ky tu SET : len lcd*/
    tram = tam/100;
    chuc = (tam%100)/10;
    dv = (tam%100)%10;
    mov(1,11); /* Chuyen con tro den hang 2 , cot 10*/
    dat(tram+48); /* dat ky tu tram len lcd*/
    dat(chuc+48); /* dat ky tu chuc len lcd*/
    dat(dv+48); /* dat ky tu chuc len lcd*/

    dat_str("cm ");/* Dat chuoi ky tu cm len lcd sau dv*/
    if(up==0)/* neu co nhan phim up*/
    {
    while(up==0)/*up dc nhan thi delay 10ms (chong doi phim)*/
    {
    delay(10);
    }
    tam++; /*Tang khoang cach can set*/

    }
    /*=====================================================*/

    if(dwn==0)/* neu co nhan phim down*/
    {
    while(dwn==0) /*phim down dc nhan thi delay 10ms (chong doi phim)*/
    {
    delay(10);
    }
    tam--; /*Giam khoang cach can set*/

    }

    /*=====================================================*/

    }
    }
  3. tri_nguyenst New Member

    Số bài viết: 12
    Đã được thích: 0
    Điểm thành tích: 1
  4. vanphu92 New Member

    Số bài viết: 16
    Đã được thích: 0
    Điểm thành tích: 1
    mình cảm ơn bạn sự nhiệt tình
    ban nên viết chương trình con cho dễ nhìn mình đọc hồi mới hiểu sơ sơ
    bạn còn sr04 or sr05 không?
    mình gặp thầy hướng dẫn bảo code không vấn đề
    mình nghi là con mình bị hỏng nếu được cậu alo để lại con đó cho mình với(or mượn tets tại trường càng tốt)
    01648 764 763

Chia sẻ trang này