DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

// bat nga tu if ((out_left==vach)&&(out_right==vach)) { while ((LEFT==vach)&&(RIGHT==vach)) { d++; if (d==100) { dem++; d=0; if (dem

Trong khi thi đấu ,có rất nhiều các tính huống xảy ra .Do đó người lập trình cần phải xây dựng nhiều chiến thuật thi đấu khác nhau để đảm bảo có thể xử lý kịp thời mọi tình huống có thể có trên sân. đẻ hiển thị chiến thuật thi đấu ,bạn có thể dung led 7 thanh hay màn hình LCD ,một hệ thống các phím bấm để điều khiển ,để lựa chọn các giải pháp thi đấu.Thực chất ,ở phần này chúng ta đã quy về bài toán lập trình giao tiếp vi điều khiển với bàn phím và màn hình LCD ,led 7 thanh

62

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

7.1.Sơ đồ nguyên lý a)Giao tiếp với led 7 thanh

R_24V 10 5V

5V ISP_program CL1 104 MASTER 0 4 P30(RXD) P31(TXD) SW1 5V C C V Cs1 100uF 1 3 5 7 9 2 4 6 8 10 Vidieukhien1 Vidieukhien2 Vidieukhien3 Vidieukhien4 Vidieukhien5 Vidieukhien6 RST Cta1 30p A1 A2 A3 B1 B2 B3 B4 B5 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28 CON10AP int P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 SELECT_PRO Rs1 10k Y 1 RST 19 18 XTAL1 9 XTAL2 RST 11.509Mhz Cta230p 31 5V EA/VPP P30(RXD) P31(TXD) /INT0 /INT1 T0 T1 Rsip1 /INT0 /INT1 T0 T1 PO4 PO5 PO6 5V A4 A5 1 10 11 12 13 14 15 16 17 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD 29 1 2 3 4 5 6 7 8 9 10 5V PSEN 7 O P 30 ALE/PROG CON10 Start PO0 PO1 PO2 PO3 PO4 PO5 PO6 PO7 39 38 37 36 35 34 33 32 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 PO0 PO1 PO1 PO2 PO3 PO4 PO5 PO6 PO7 2 3 4 5 6 7 8 9 D N G P89V51RD2 5V 10k 0 2

3 8 8 . d 5V 5V 5V 5V 5V 5V Connecter_sensor PO0 PO1 PO2 PO3 7 1 2 6 D N G U16 c c V e D0 D1 D2 D3 R4 R5 R6 R7R R8 R R9 R Rp6 470 SN7447 Rp1 470 Rp2 470 Rp3 470 Rp4 470 Rp5 470 g f U17 2 1 9 7 6 4 5 10 9 15 13 12 11 14 . . . c . . . b . D E F A B C G Led_Phat1 Led_Phat2 Led_Phat3 Led_Phat4 Led_Phat5 Led_Thu1 Led_Thu2 Led_Thu3 Led_Thu4 Led_Thu5 Led_Thu6 P D a Led_Phat6 O B I/R B I B R C C V T L 0 1 1 3 5 7 9 13 11 15 2 4 6 8 10 12 14 16 5 3 4 6 1 t1 a h _P d e L t2 a h _P d e L t3 a h _P d e L t4 a h _P d e L t5 a h _P d e L t6 a h _P d e L CON16AP 5V

Ở sơ đồ trên ,ta sử dụng 1 led 7 thanh để hiển thị các chiến thuật thi đấu 1 ,2 ,3.v.v.2 phím bấm choice và start để lựa chọn chiến thuật.Một led 7 thanh có thể hiển thị được 10 chiến thuật thi đấu tương ứng với các số từ 0 đến 9.Ngoài ra ,led 7 thanh còn được dùng để hiển thị số ngã tư. 7.2.Mã nguồn void main() { unsigned char tam=0;

63

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

init(); P2_6=0; P2_7=0; h_thi(tam); selection(); switch (select) { case 0: { hanhtrinh0(); } break; case 1:{ hanhtrinh1(); } break; case 2:{ hanhtrinh2(); } break; case 3:{ hanhtrinh3(); } break; case 4:{ hanhtrinh4(); } break; case 5:{ hanhtrinh5(); } break; case 6:{ hanhtrinh6(); } break; case 7:{

64

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

hanhtrinh7(); } break; case 8: { hanhtrinh8(); } break; case 9:{ hanhtrinh9(); } break; }//end of swith delay(50000); h_thi(tam); } /* cac ham chuc nang */ void selection() { P2_6=0; P2_7=0; while (P2_7==0) { while (P2_6==1) { select++; if (select>9) select=0; h_thi(select); delay(12000); } } }//end void h_thi(unsigned char so) { if (so==0) {P0_3=0;P0_2=0;P0_1=0;P0_0=0;} else if (so==1) {P0_3=0;P0_2=0;P0_1=0;P0_0=1;} else if (so==2) {P0_3=0;P0_2=0;P0_1=1;P0_0=0;} else if (so==3) {P0_3=0;P0_2=0;P0_1=1;P0_0=1;}

65

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

else if (so==4) {P0_3=0;P0_2=1;P0_1=0;P0_0=0;} else if (so==5) {P0_3=0;P0_2=1;P0_1=0;P0_0=1;} else if (so==6) {P0_3=0;P0_2=1;P0_1=1;P0_0=0;} else if (so==7) {P0_3=0;P0_2=1;P0_1=1;P0_0=1;} else if (so==8) {P0_3=1;P0_2=0;P0_1=0;P0_0=0;} else if (so==9) {P0_3=1;P0_2=0;P0_1=0;P0_0=1;} } b) Sơ đồ dùng LCD

VCC

_tru d le

g n o _c d le

R_SIP10

SW2_cong

P0.5

Jum_cong 2 1

SW3_tru

P0.6

2

1 Jum_tru

VCC

EA P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0

1

10 9 8 7 6 5 4 3 2

RESISTOR SIP 10

VCC

U1

e ic o h _c d le

r te n _e d le Enter

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

39 38 37 36 35 34 33 32

21 22 23 24 25 26 27 28

P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7

P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15

P0.7 P3.3

Choice

RX TX

IR

P3.3

D0 D1 D2 D3

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

1 2 3 4 5 6 7 8

10 11 12 13 14 15 16 17

P1.0/T2 P1.1/T2-EX P1.2 P1.3 P1.4/SS P1.5/MOSI P1.6/MISO P1.7/SCK

P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD

D1 LCD2x16

15

30 29

C1_ZTA

AT89S8252

VCC

ALE/PROG PSEN

A

EA

16

33

LCD Display 2x16

K

RST

31 9

18 19

EA/VPP RST

XTAL2 XTAL1

C2_ZTA

40

ZTA 12M

VCC

VCC

D N G

D N G

d d V

E E V

W R

S R

E

0 D

1 D

2 D

3 D

4 D

5 D

6 D

7 D

C_nhieu 104

33

5

8

9

3

6

2

1

4

7

0 2

0 1

2 1

3 1

1 1

4 1

VCC

VCC

.3 0 P

.4 0 P

.0 2 P

.1 2 P

.2 2 P

.3 2 P

.4 2 P

.5 2 P

.6 2 P

.7 2 P

SW_reset

T E S E _R 47u C

R_RESET

m o 0 0 1

66

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

EN=1;

delay (100);

delay (50); EN=0;

EN=1;

delay (100);

delay (50); EN=0;

lenh ();} len=strlen(s); while(len!=0) { LCDwrite(*s); s++; len--; }

Sơ đồ trên thay thế led 7 thanh bằng LCD .Nhìn chung dung LCD để hiển thị chiến thuật thi đấu chuyên nghiệp hơn (vi hiển thị được cả chữ ) tuy nhiên , dung LCD khá tốn kém và không thật sự hiệu quả .Vì thế ,tốt nhất là các bạn nên sử dụng led 7 thanh để hiển thị chiến thuật thi đấu. /******************************/ // LCD void lenh () { RS=0; } void ghi () { RS=1; } void LCDwrite(unsigned char c) { P2=c; ghi(); } void LCDputs(unsigned char *s,unsigned char row) { unsigned char len; if(row==1) { P2=0x80;lenh (); } else { P2=0xC0; } void LCDcontrol(unsigned char dk)

67

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

lenh ();

//bat hien thi, tat con tro //xoa man hinh

{ P2=dk; } void init_LCD () { delay(400); LCDcontrol(0x38); //LCD 2 dong _ 5x7 LCDcontrol(0x0C); LCDcontrol(0x01); } /*****************************/ void keyboard() { unsigned char key=0; unsigned char test=0; LCDcontrol(0x01); choice=enter=1; LCDputs("Robot Ready",1); delay(100000); LCDcontrol(0x01); LCDputs("1:Golong 2:Around ",1); LCDputs("3:Turn left 4:Turn right",2); delay(100000); LCDcontrol(0x01); while(1) { LCDputs("1: 2: 3: 4:”,2); while(choice==0) { delay(10000); key++; LCDcontrol(0x01); if (key==1)LCDputs("1 ",1); if (key==2)LCDputs("2 ",1); if (key==3)LCDputs("3 ",1); if (key==4)LCDputs("4 ",1); LCDputs("1:C 2:S 3:D 4:E",2); if (key>4) { LCDputs("0 ",1);key=0;}

68

DKS GROUP http://www. dks.com.vn Nguyen Manh Truong Mobi : 0988857861

} if (key==1)while(enter==0) golongr(); if (key==2)while(enter==0) Around(); if (key==3)while(enter==0) left(); if (key==4)while(enter==0) test=1; if (test==1) break; }//while(1) } // keyboard

Ở bài này ,chúng ta sẽ hoàn thiện một robot hoàn chỉnh để thi đấu . Chúng ta sử dụng robot như hình dưới đây

69