-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbluetooth.c
129 lines (122 loc) · 3.05 KB
/
bluetooth.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "head.h"
uint count3 = 0;
uint key; //蓝牙接收到的键值
//通讯串口初始化配置(使用计数器1)
void bluetoothInit()
{
TMOD = 0x22; //0010 0010,两个8位自动重载
//设置计数器1的初值,决定波特率
TH1 = 0xfd;
TL1 = 0xfd;
ET1 = 0; //!!!关键,T1中断(函数)禁止
PCON = 0x00; //波特率倍增0x00不加倍 0x80加倍
SCON = 0x50; //设置工作方式1 开启接受允许
EA = 1; //开启总中断
ES = 1; //开启串口接受、发送中断
TR1 = 1; //计数器1开始运行
}
//串口中断(TI发送标志位,RI接受标志位)
void UART() interrupt 4
{
if (RI)
{
key = SBUF;
switch (key)
{
case 0x00:
forward();
break;
case 0x01:
back();
break;
case 0x02:
left();
break;
case 0x03:
right();
break;
case 0x04:
stop();
break;
case 0x05:
atoDrive = 0; //进入手动驾驶
oled_cover_square(STATUS3, 1, emp);
stop();
break;
case 0x06:
atoDrive = 1; //进入自动驾驶
oled_cover_square(STATUS3, 1, atoD);
break;
case 0x07:
gearSwitch(gear + 1);
break;
case 0x08:
gearSwitch(gear - 1);
break;
case 0x09:
beep = ~beep;
break;
case 0x10:
ENbz = 0;
oled_cover_square(STATUS2, 1, emp);
break;
case 0x11:
ENbz = 1;
oled_cover_square(STATUS2, 1, bizhang);
break;
case 0x12:
ENxx = 0;
oled_cover_square(STATUS1, 1, emp);
break;
case 0x13:
ENxx = 1;
oled_cover_square(STATUS1, 1, xunxian);
break;
case 0x14:
atoGear = 0;
oled_cover_square(STATUS4, 1, emp);
break;
case 0x15:
atoGear = 1;
oled_cover_square(STATUS4, 1, atoG);
break;
case 0x0a:
powerOff();
break;
case 0x0b:
//启动
break;
case 0x0c:
distance = getDistance();
TI = 1;
printf("Distance:%dcm\n",distance);
while (!TI)
;
TI = 0;
break;
case 0x0d:
if (angle < 25)
{
angle += 5;
}
break;
case 0x0e:
if (angle > 5)
{
angle -= 5;
}
break;
case 0x0f:
showAD();
break;
case 0x1a:
turn_off_AD();
break;
default:
break;
}
while (!RI)
;
RI = 0;
}
}