PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 11-05-2009, 07:48 PM   #5
motngayno10
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 4
:
a quen.e up lai doan code cho phu hop voi cai mach


#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NODEBUG
#DEVICE *=16,ADC=8
#USE DELAY(CLOCK=4000000)
#USE FAST_IO(B)
#use fast_io(c)
INT8 TIEN,LUI,AD0,AD1,AD2,AD3,QUAYTRAI,them,
QUAYPHAI,RETRAI1,RETRAI2,REPHAI1,REPHAI2,LUIREPHAI 1,LUIREPHAI2,LUIRETRAI1,LUIRETRAI2;
INT8 TANG;



VOID MAIN()
{ TANG=0;
them=255;
SET_TRIS_B(11111111); //THIET LAP CAC CHAN RB0,1,2 LA CAC NGO VAO
set_tris_c(00101001); //thiet lap cac chan rc0,3,5 la cac ngo vao
OUTPUT_HIGH(PIN_C1); //TAT 2 DONG CO
OUTPUT_HIGH(PIN_C2);
SETUP_ADC(ADC_CLOCK_INTERNAL); //THIET LAP CHE DO ADC VOI THOI GIAN LAY MAU BANG XUNG IC
SETUP_ADC_PORTS(AN0_AN1_AN3); //THET LAP 3 NGO VAO ADC
SETUP_CCP1(CCP_PWM); //THIEP LAP CHE DO PWM
SETUP_CCP2(CCP_PWM); //THIEP LAP CHE DO PWM
sETUP_TIMER_2(T2_DIV_BY_4,255,1);//THIET LAP TIMER2 DUNG CHO PWM
output_high(pin_c6);
WHILE (1)
{
IF (!INPUT(PIN_B1)) //CO HAI NUT NHAN TANG GIAM MODE TOC DO ,5 DEN CHO 5 MODE
{ //NEU NUT TANG DUOC NHAN
DELAY_MS(250);
IF (TANG<5)
{ TANG++;
SWITCH(TANG)
{ CASE 1 : {OUTPUT_HIGH(PIN_D6);them=180; //CAC DEN CHON MODE SANG
}
BREAK;
CASE 2 : {OUTPUT_HIGH(PIN_A5);them=150;
}
BREAK;
CASE 3 : {OUTPUT_HIGH(PIN_E0);them=100;
}
BREAK;
CASE 4 : {OUTPUT_HIGH(PIN_E1);them=50; }
BREAK;
CASE 5 : {OUTPUT_HIGH(PIN_E2);them=0;

}
BREAK;
}
}
}
IF (!INPUT(PIN_B0)) //NEU NUT GIAM DUOC NHAN
{ DELAY_MS(250);
IF (TANG>0)
{ SWITCH(TANG)
{ CASE 1 : {OUTPUT_LOW(PIN_D6);them=255; //CAC DEN MODE TAT

}
BREAK;
CASE 2 : {OUTPUT_LOW(PIN_A5);them=180;


}
BREAK;
CASE 3 : {OUTPUT_LOW(PIN_E0);them=150;


}
BREAK;
CASE 4 : {OUTPUT_LOW(PIN_E1);them=100;

}
BREAK;
CASE 5 : {OUTPUT_LOW(PIN_E2);them=50;

}
BREAK;
}
TANG--;
}
}
//CO 1 CAI JOYSITCK DIEU KHIEN XE,VOI 2 BIEN TRO,CO 2 DONG CO CHO HAI BANH
SET_ADC_CHANNEL(0); //CHON KENH AN1 DE DOC GIA TRI ADC TU BIEN TRO 1 CUA JOYSTICK
DELAY_US(10);
AD0=READ_ADC(); //DOC GIA TRI ADC
SET_ADC_CHANNEL(1); //CHON KENH AN0 DE DOC GIA TRI ADC
DELAY_US(10);
AD1=READ_ADC();

IF ((AD0>=0)&&(AD0<=100)&&(AD1>100)&&(AD1<=145) ) // CHAY lui
{ TIEN=(ABS(AD0-127)); //GIA TRI ADC KHI KEO JOYSTICK DE XE CHAY TOI
OUTPUT_low(pin_D3); //TAT CHAN ROLE DOI CHIEU DONG CO
OUTPUT_low(PIN_D7);
if ((them<=100)&&(tien<90))
{ SET_PWM2_DUTY(180);
SET_PWM1_DUTY(180);
}
if ((them<=100)&&(tien>=90))
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
if (them>100)
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
DELAY_MS(50);
}



IF ((AD0>100)&&(AD0<=145)&&(AD1>100)&&(AD1<=145)) //DUNG LAI
{ SET_PWM2_DUTY(255);
SET_PWM1_DUTY(255);
OUTPUT_HIGH(PIN_D3); //TAT CHAN ROLE CHIEU DONG CO
OUTPUT_HIGH(PIN_D7);
}

IF ((AD0>145)&&(AD1>100)&&(AD1<=145)) //CHAY toi
{
LUI=ABS(127-AD0);
OUTPUT_high(PIN_D3); //SET CHAN ROLE CHIEU DONG CO
OUTPUT_high(PIN_D7);
if ((them<=100)&&(lui<90))
{ SET_PWM2_DUTY(180);
SET_PWM1_DUTY(180);
}
if ((them<=100)&&(lui>=90))
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
if (them>100)
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
DELAY_MS(200);


SET_ADC_CHANNEL(1); //CHON KENH AN1 DE DOC GIA TRI ADC
DELAY_US(10);
AD2=READ_ADC(); //DOC GIA TRI ADC
SET_ADC_CHANNEL(0); //CHON KENH AN0 DE DOC GIA TRI ADC
DELAY_US(10);
AD3=READ_ADC();
IF ((AD0>AD2)&&((AD2-127)<30)&&(ABS(AD3-AD1)<50)&&INPUT(PIN_B1)&&INPUT(PIN_B0)) //CHONG BI GIAT KHI CHAY LUI SAU DO DUNG LAI
{ SET_PWM2_DUTY(255);
SET_PWM1_DUTY(255);
DELAY_MS(2000);
OUTPUT_HIGH(PIN_D3); //TAT CHAN ROLE CHIEU DONG CO
OUTPUT_HIGH(PIN_D7);
}

}
IF ((AD0>100)&&(AD0<=145)&&(AD1>0)&&(AD1<=100)&&INPUT (PIN_B1)&&INPUT(PIN_B0)) //QUAY PHAI
{ QUAYPHAI=(ABS(AD1-127));
OUTPUT_LOW(PIN_D3); //SET CHAN ROLE CHIEU DONG CO
OUTPUT_HIGH(PIN_D7);
if ((them<=100)&&(tien<90))
{ SET_PWM2_DUTY(200);
SET_PWM1_DUTY(200);
}
if ((them<=100)&&(tien>=90))
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
if (them>100)
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
DELAY_MS(200);

SET_ADC_CHANNEL(1); //CHON KENH AN1 DE DOC GIA TRI ADC
DELAY_US(10);
AD2=READ_ADC(); //DOC GIA TRI ADC
SET_ADC_CHANNEL(0); //CHON KENH AN0 DE DOC GIA TRI ADC
DELAY_US(10);
AD3=READ_ADC();
IF ((AD3>AD1)&&(ABS(AD2-AD0)<50)&&INPUT(PIN_B1)&&INPUT(PIN_B0)) //CHONG BI GIAT KHI QUAY PHAI
{ SET_PWM2_DUTY(255);
SET_PWM1_DUTY(255);
DELAY_MS(1000);
OUTPUT_HIGH(PIN_D3); //TAT CHAN ROLE CHIEU DONG CO
OUTPUT_HIGH(PIN_D7);
}

}
IF ((AD0>100)&&(AD0<=145)&&(AD1>145)&&INPUT(PIN_B1)&& INPUT(PIN_B0)) //QUAY TRAI
{ QUAYTRAI=(ABS(127-AD1));
OUTPUT_HIGH(PIN_D3); //SET CHAN ROLE CHIEU DONG CO
OUTPUT_LOW(PIN_D7);
if ((them<=100)&&(quaytrai<90))
{ SET_PWM2_DUTY(200);
SET_PWM1_DUTY(200);
}
if ((them<=100)&&(quaytrai>=90))
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
if (them>100)
{SET_PWM2_DUTY(them);
SET_PWM1_DUTY(them);
}
DELAY_MS(200);

SET_ADC_CHANNEL(1); //CHON KENH AN1 DE DOC GIA TRI ADC
DELAY_US(10);
AD2=READ_ADC(); //DOC GIA TRI ADC
SET_ADC_CHANNEL(0); //CHON KENH AN0 DE DOC GIA TRI ADC
DELAY_US(10);
AD3=READ_ADC();
IF ((AD3<AD1)&&(ABS(AD2-AD0)<50)&&INPUT(PIN_B1)&&INPUT(PIN_B0)) //CHONG BI GIAT KHI QUAY TRAI
{ SET_PWM2_DUTY(255);
SET_PWM1_DUTY(255);
DELAY_MS(1000);
OUTPUT_HIGH(PIN_D3); //TAT CHAN ROLE CHIEU DONG CO
OUTPUT_HIGH(PIN_D7);
}
}

IF ((100>AD0)&&(AD1<100)&&INPUT(PIN_B1)&&INPUT(PIN_B0 )) //CHAY lui RE PHAI
{ REPHAI1=(them+ABS(AD1-127));
REPHAI2=ABS(them-ABS(AD1-127));

SET_PWM2_DUTY(REPHAI1);
SET_PWM1_DUTY(REPHAI2);
}

IF ((AD0<100)&&(AD1>145)&&INPUT(PIN_B1)&&INPUT(PIN_B0 )) //CHAY lui RE TRAI
{ RETRAI1=them+AD1-127;
RETRAI2=ABS(them-(AD1-127));
SET_PWM2_DUTY(RETRAI1);
SET_PWM1_DUTY(RETRAI2);
}


IF ((AD0>145)&&(AD1<100)&&INPUT(PIN_B1)&&INPUT(PIN_B0 )) //CHAY toi RE PHAI
{ LUIREPHAI1=(them+ABS(AD1-127));
LUIREPHAI2=ABS(them-ABS(AD1-117));
SET_PWM2_DUTY(LUIREPHAI1);
SET_PWM1_DUTY(LUIREPHAI2);
}
IF ((AD0>145)&&(AD1>145)&&INPUT(PIN_B1)&&INPUT(PIN_B0 )) //CHAY LUI RE TRAI
{ LUIRETRAI2=(them+AD1-127);
LUIRETRAI1=ABS(them-(AD1-127));
SET_PWM2_DUTY(LUIRETRAI2);
SET_PWM1_DUTY(LUIRETRAI1);
}


}
}

thay đổi nội dung bởi: motngayno10, 11-05-2009 lúc 07:57 PM.
motngayno10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:24 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam