View Single Post
Old 15-10-2008, 11:28 AM   #4
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi falleaf View Post
Bạn anh_gioi đang làm về đề tài này.
http://www.circuitcellar.com/library...50/2301013.pdf

http://www.robot-electronics.co.uk/htm/srf04tech.htm

http://www.best-microcontroller-proj...pic-sonar.html (source code có ở file đính kèm)
>> Các tính toán đã có hướng dẫn trên link được gửi.
LCD nếu muốn bạn liên hệ bạn anh_gioi để thực hiện, vì bạn ấy đã làm xong phần LCD nhưng vẫn đang loay hoay với phần siêu âm. Cần tự làm phần này, F không muốn trả lời chi tiết đơn giản vì đây là một đề tài rất cơ bản, đơn giản, mà nếu các bạn có thể tự viết code sẽ rất có lợi để hiểu về PIC.
Chúc vui
những đoạn code trên được viết bằng chương trình Mriko, ko hiểu lắm về 1 số lệnh.
còn đây là 1 đọan code em viết được sau vài ngày. mong các anh xem qua giúp em để em có thể hoàn thành kịp thời gian ạ..

Trích:
#include <16F877A.h>
#include <F:\NCKH 2009\PIC 16\count_timer2\def_877a.h>
#use delay(clock=2000000)
#fuses HS,NOWDT, NOPROTECT
#include <F:\NCKH 2009\PIC 16\count_timer2\LCD_lib_4bit.c>
int16 CCP1Value;
int16 CCP1OldValue;
BOOLEAN CCP1Captured;
float S,count;
int8 char1,char2,char3;
#int_CCP1 // Ngat do CCCP1 xay ra, thuc hien lenh...
CCP1_isr()
{
CCP1Value = CCP_1 - CCP1OldValue;
CCP1OldValue = CCP_1;
CCP1Captured = TRUE;
}
//--------------------------------------------------------------------------
void Init_ccp(void) //Khoi tao chuc nang CCCP
{
setup_ccp1(CCP_CAPTURE_RE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
CCP1Value = 0;
CCP1OldValue = 0;
CCP1Captured = TRUE;
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
}
//--------------------------------------------------------------------------
void Convert_CCP1()
{

long temp;
int8 temp2;
//----- thoi gian SRF doc duoc
count = CCP1Value*1.6e-6;
// Timer1 prescaler DIV_BY_8
//Freq = 1.0/((float)CCP1Value*8e-6);
//-------- khoang cach can do--
S = count/58;
//--------chuyen sang BCD----
temp = (long)S;
char1 = ((temp / 100) + 0x30);
temp2 = (temp % 100);
char2 = ((temp2 / 10) + 0x30);
char3 = ((temp2 % 10) + 0x30);
//-----hien thi LCD----
LCD_putcmd(0x80);
LCD_putchar("S = ");
LCD_putcmd(0x8B);
LCD_putchar(" Cm");
LCD_putcmd(0x84);
LCD_putchar(char1);
LCD_putcmd(0x85);
LCD_putchar(char2);
LCD_putcmd(0x86);
LCD_putchar(char3);
LCD_putcmd(0xC5);
LCD_putchar("Anh_Gioi");

}
void main()
{
Init_ccp();
LCD_init();


while (TRUE) {
//---- 10uS cho trgger ----
output_high(pin_d1);
delay_us(10);
output_low(pin_d1);
if (CCP1Captured)

Convert_CCP1();
}
}
đoạn code này của em vẫn chưa ổn, nhưng không biết chỗ nào chưa ổn nữa. kết quả hiển thị LCD chi có số 0 thôi.

hức..cuối tuần em phải nộp cho thầy rồi hi vọng các anh giúp em ạ..?
anh_gioi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn