Ðề tài: SRF05 and PIC6F877A !
View Single Post
Old 30-09-2008, 05:32 PM   #3
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
may quá có anh trả lời, em đang lo ko có ai trả lời em.
anh ạ ,anh xem hộ em lại với ạ, em đã sửa lại:
Trích:
// RC2--ECHO
// RD1 --TRIGGER
#include "F:\NCKH 2009\PIC 16\count_timer2\count_timer2.h"
#include <lcd_lib_4bit.c>
#include <F:\NCKH 2009\PIC 16\count_timer2\def_877a.h>
#define CONVERT_TO_MICROSECONDS (20000000/((4*4)*1000000))
//BOOLEAN CCP1Captured;
int8 tram,chuc,donvi,nghin;
void convert_bcd(int8 x)
{
donvi=x%10; //chia lay phan du, so hang don vi
tram=x/100; //tach hang tram va hang chuc
chuc=x/10%10;
nghin = x/1000;
tram = tram + 0x30;
chuc = chuc + 0x30;
donvi = donvi + 0x30;
nghin = nghin +0x30;
}
/////////
#int_ccp1
void main()
{
int8 x,s;
int16 t;
LCD_init();
convert_bcd(x);
trisd = 0x02;
trisc = 0x04;

//---hien thi LCD---
LCD_putchar("anh_gioi");
LCD_putcmd(0xC0);
LCD_putchar("S = ");
LCD_putcmd(0xC9);
LCD_putchar(" Cm");

//-- khai bao timer-capture ----
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(INT_CCP1); // Setup interrupt on falling edge
enable_interrupts(GLOBAL);
while(true)
{

//---- 10uS cho trgger ----
output_high(pin_d1);
delay_us(10);
output_low(pin_d1);
//-- Wait for senser output to go high ----

if(input(pin_c2)==0)
{
t = 0;
set_timer1(0);
LCD_putcmd(0xCE);
LCD_putchar("NO");
}


else
{

t = CCP_1; //doc thoi gian khi co xung cao
s = t/58;
convert_bcd(s);
//time = get_timer1();
LCD_putcmd(0xCE);
LCD_putchar("CO");
//time = time/CONVERT_TO_MICROSECONDS; //chuyen doi ra mcrogiay
}

///// hien thi len gia tri LCD//////
LCD_putcmd(0xC4);
LCD_putchar(nghin);
LCD_putcmd(0xC5);
LCD_putchar(tram);
LCD_putcmd(0x6);
LCD_putchar(chuc);
LCD_putcmd(0xC7);
LCD_putchar(donvi);
}
}
nhưng trên LCD chỉ hiển thị 4 số 0 ?
em không biết lệnh đọc capture trênc ó đùng không nữa vì em lấy vidu trong help CCS ??
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn