![]() |
|
Tài trợ cho PIC Vietnam |
Các dự án mã nguồn mở Nếu bạn không mở mã nguồn, ít nhất là một phần nào đó trong dự án của bạn, xin đừng vào đây. |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#8 |
Nhập môn đệ tử
Tham gia ngày: Feb 2012
Bài gửi: 5
: |
em chào anh!
anh cho em hỏi cái này cái được không a! sao em test thì LCD không hiển thị gì mong quan tâm. (đã test LCD ) #include <16f877a.h> #include <defs_16f877a.h> #include <def_877a.h> #use delay(clock=20000000) #fuses HS #BYTE TRISC = 0x87 #BIT TRISC2 = 0x87.2 #BYTE PORTC = 0x07 #BIT RC2 = 0x7.2 #include <lcd_lib_4bit.c> float getvar = 0, distance = 0; int1 has_echo = 0, trg = 0; void trigger(); //t?o trigger void init(); #INT_CCP1 void ccp1_isr() { if(!trg) { //Khi có xung echo c?nh lên set_timer1(0); //Reset timer1 v? 0 setup_ccp1(CCP_CAPTURE_FE); //chuy?n sang dò xung c?nh xu?ng trg = 1; } else { //Khi có xung echo c?nh xu?ng getvar = get_timer1(); //??c giá tr? timer1 ngay khi có xung echo c?nh xu?ng distance = ((getvar /111)*3.2-14.7);//(getvar - 485)/28.3; // has_echo = 1; disable_interrupts(GLOBAL); } } void main() { init(); //LCD_init(); while (1) { trigger(); while(!has_echo); lcd_putcmd(0xc0); printf(lcd_putchar,"K/C:%6.2f", distance); delay_us(200); } } void init() { //Timer 1 clock in = Fosc/4 = 5Mhz //Speed of Speech = 344m/s ,Max time echo =25ms //=> Max Distance of SRF05 = (344m/s*25ms)/2 = 4.3m // Min time echo = 100us //=> Min Distance of SRF05 = (344m/s*100us)/2 = 3.44cm //=> Timer 1 with Ts = (1/5MHz)*Pre = 0.4uS (Prescaler = 2); //=> Reg Timer 1 Circle lcd_init(); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //Thi?t l?p Capture CCP1 dò xung c?nh lên setup_ccp1(CCP_CAPTURE_RE); enable_interrupts(INT_CCP1); // Cho phép ng?t khi CCP1 có tín hi?u } void trigger() { trg = 0; has_echo = 0; TRISC2 = 0; //set chân RC2 làm output RC2 = 1; //trigger delay_us(20); RC2 = 0; TRISC2 = 1; //set chân RC2 làm input setup_ccp1(CCP_CAPTURE_RE); enable_interrupts(GLOBAL); } |
![]() |
![]() |
|
|