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ự
Trang 1// bat nga tu
if ((out_left==vach)&&(out_right==vach))
{
while ((LEFT==vach)&&(RIGHT==vach))
{
d++;
if (d==100)
{
dem++;
d=0;
if (dem<songatu)
{ h_thi(dem); motor(forward); delay(1200);}
break;//thoat khoi while
}//if
}// while
if (dem==songatu) {h_thi(dem);motor(stop);dem=0;break;}
}
// chinh lech nhieu
}//end of while (1)
}//end of golong_ngatmo
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
Trang 27.1.Sơ đồ nguyên lý
a)Giao tiếp với led 7 thanh
T1
5V
Rp2 470
L _
at2
A3
/INT1
PO2
PO5
5V
Rp3 470
L _
at3
5V
SW1
B2
/INT0
P30(RXD)
R7 R R4
R R5
R
R6 R8
PO6
R9
5V
5V
Rp4 470
L _
at4
U16 SN7447
D0 7 D1 1 D2 2 D3 6
BI/
R B O
4 R
BI 5 L 3
D 10 E 9 F 15 A 13 B 12 C 11 G 14
V C
1
G D 8
Led_Phat6 PO0
a
g
d
c
e
U17
. 2
. 1
. 9
. 7
. 6
. 4
. 5
.
8
D
P
1
Vc
3
PO2
B3
Y 1
11.509Mhz
PO3
P31(TXD)
P31(TXD)
Rp5 470
L _
at5 5V
Rs1
10k
5V B4
5V
Cta1 30p
5V
Rp6 470
L _
at6
PO4 Start
P30(RXD)
ISP_program
CON10AP
Led_Thu1
B5
PO5
Led_Thu2
PO0
Cs1
100uF
PO6
Led_Thu3
Cta230p
PO1
Vidieukhien6
Led_Thu4
PO7
PO2 P
O7
Led_Thu5
Vidieukhien5
Connecter_sensor
CON16AP
11 12 13 14
SELECT_PRO
PO3 PO1
R_24V 10
PO1
Led_Thu6
Vidieukhien4
PO4
RST
5V
Led_Phat1
Vidieukhien3
PO5
5V
Vidieukhien2
PO6
Led_Phat2
Vidieukhien1
PO7
int
CON10
1 3 5 7 9 10
Led_Phat3
Rsip1
10k
4
6
8
/INT0
A5 5V
5V
Led_Phat4
A4
/INT1
CL1 104
Led_Phat5
Rp1 470
B1
PO0
T1 A1
5V
MASTER
P89V51RD2
RST
9 XTAL2
18 XTAL1 19
G D
2
PSEN 29 ALE/PROG 30
EA/VPP 31
V C
4 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 P2.7/A15 28 P3.0/RXD 10 P3.1/TXD 11 P3.2/INTO 12 P3.3/INT1 13 P3.4/TO 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 P0.0/AD0
39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
T0
L _
at1
A2
PO4
Ở 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;
Trang 3init();
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:{
Trang 4hanhtrinh7();
}
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;}
Trang 5else 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
P2.0
P0.4
P2.1
P0.6
P2.2
VCC
C_nhieu 104
IR
Enter
Choice
le
d
o
g
SW2_cong
SW3_tru
le d ru
P3.3
Jum_cong
D0 D2 P0.7
P0.6 P0.5
le d
nte
le d h ic e
VCC
P0.5 P0.7
P2.3
U1
AT89S8252
RST
18 XTAL1 19
G D
2
PSEN 29 ALE/PROG 30
EA/VPP 31
VCC 40
P1.0/T2 1 P1.1/T2-EX 2
P1.2 3 P1.3 4 P1.4/SS 5 P1.5/MOSI 6 P1.6/MISO 7 P1.7/SCK 8
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 P2.7/A15 28 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
P2.4 P2.6
EA
RX TX P1.0
P1.2
VCC
P1.4 P1.6
C _
RE E 47u
P1.7
R_RESET 1
o m
RST
SW_reset
P0 .4 P
2.0 VCC
P
2.1
P2 .2 P
2.3 P
2.4
P2 .5
C1_ZTA 33
P2 .6 P
2.7 VCC
C2_ZTA
33
LCD Display 2x16
D1
LCD2x16
G
D
1
Vd
2
V E
3
RS 4 R W 5 E 6 D 0 7
D1 8
D2 9
D3 1 D 4
1
D5 1
D6 1 D 7
1
A
15
K
16
P0 .3
ZTA 12M
R_SIP10
RESISTOR SIP 10
1 2
4 6 8 10
VCC
Jum_tru
EA P0.7 P0.5 P0.3 P0.1
VCC
P0.0 P0.2
Trang 6Sơ đồ 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; EN=1; delay (50); EN=0; delay (100);
}
void ghi ()
{
RS=1; EN=1; delay (50); EN=0; delay (100); }
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; lenh ();}
len=strlen(s);
while(len!=0)
{
LCDwrite(*s);
s++;
len ;
}
}
void LCDcontrol(unsigned char dk)
Trang 7{
P2=dk; lenh ();
}
void init_LCD ()
{
delay(400);
LCDcontrol(0x38); //LCD 2 dong _ 5x7
LCDcontrol(0x0C); //bat hien thi, tat con tro
LCDcontrol(0x01); //xoa man hinh
}
/*****************************/
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;}
Trang 8}
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