Trích:
Nguyên văn bởi falleaf
Cảm biến laser thì tôi chưa dùng, nhưng cảm biến siêu âm thì bạn cứ đặt câu hỏi, nếu trong phạm vi hiểu biết tôi sẽ giúp.
Chúc vui.
|
anh cho em hỏi em làm con srf05+pic16f877a+lcd ma em bắt cạnh lên và cạnh xuống chưa được, anh xem giúp em doạn code với, cảm ơn anh nhiều:
#include <16F877.h>
#include <defs_16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device *=16
#use delay(clock=20000000)
#include <lcd_lib_4bit.c>
#define led1 pin_E1
#define button pin_B1
#define TRIGGER pin_B4// chan phat song sieu am
//chan ECHO nhan tin hieu ve noi vao RC2
#BYTE TRISC=0X87
#BYTE PORTC=0X07
#BIT RC2=0X7.2
float dist,getvar ;
int1 has_echo=0,echo=0;
////////////////////////////////////////////////
#int_CCP1
void ccp1_isr()
{
setup_ccp1(CCP_CAPTURE_RE);//thiet lap Capture CCP1 do xung canh len
enable_interrupts(INT_CCP1);//cho phep ngat khi ccp1 co tin hieu
enable_interrupts(GLOBAL);
if(pin_c2)
set_timer1(1000); //reset timer1 ve 0
setup_ccp1(CCP_CAPTURE_FE); //chuyen sang do xung canh xuong
if(!pin_c2);//khi co xung canh xuong
getvar=get_timer1(); //doc gia tri timer1 ngay khi co xung echo canh xuong
dist=(getvar-485)/28.3; //so lieu dua theo ket qua do thuc te
dist=getvar;
}
//----10us cho trigger----
void trig()
{
output_high(TRIGGER);
delay_us(10);
output_low(TRIGGER);
}
void main()
{
SET_TRIS_A(0x00); // Port A output
SET_TRIS_B(0X00);
SET_TRIS_E(0x00);
SET_TRIS_C(0xff);
SET_TRIS_D(0b00000011);
lcd_init();
while(1)
{
trig();
ccp1_isr();
lcd_putcmd(0x01);
printf(lcd_putchar,"dist=%6.1f",dist);
lcd_putchar("cm");
delay_ms(1000);
}
}
lcd chỉ hiển thị số 0. em chưa biêt sai chỗ nào cả