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
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