📄 wifi+̤
字号:
C51 COMPILER V9.01 WTCAR 07/02/2012 16:12:39 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE WTCAR
OBJECT MODULE PLACED IN WTcar.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WTcar.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //Wifi 智能小车 第二版
2 //小车增加调速功能
3 //Wonder Technology
4 //单片机采用22.1184M晶振
5 //加入控制摄像头的直流驱动
6 //加入红外避障传感器
7
8 #include <STC12C5A.h> //包含STC12C5A系列单片机的头文件
9 #include"1602.h"
10 #include"eeprom.h"
11
12 sbit LED1=P3^0; //定义两只LED到P3^0,P3^1
13 sbit LED2=P3^1;
14
15 sbit Light_cam=P3^2;
16 sbit Light_B=P2^3; //控制车身的LED
17
18 sbit beed=P2^7;
19 sbit KEY1=P3^6;
20 sbit KEY2=P3^7;
21
22
23 //电机控制端
24 sbit EN1=P2^0;
25 sbit IN1=P2^1;
26 sbit IN2=P2^2;
27
28 sbit EN2=P2^4;
29 sbit IN3=P2^5;
30 sbit IN4=P2^6;
31
32 // 驱动其它设备,如激光,
33 sbit EN1_S=P1^0;
34 sbit IN1_S=P1^1;
35 sbit IN2_S=P1^2;
36 sbit EN2_S=P1^3;
37 sbit IN3_S=P1^4;
38 sbit IN4_S=P1^5;
39
40 //红外避障传感器
41 sbit IROA_R=P3^3;
42 sbit IROA_M=P3^4;
43 sbit IROA_L=P3^5;
44
45
46
47
48 #define sensor_IROA P3 //跟上面定义一样,取P3^3-P3^5
49
50 //PWM 控制云台
51 sbit SPWM1=P1^6; //控制摄像头左右活动
52 sbit SPWM2=P1^7; //控制摄像头上下活动
53
54 unsigned long PWM_cnt=0;//
55
C51 COMPILER V9.01 WTCAR 07/02/2012 16:12:39 PAGE 2
56 unsigned int PWM_G1=33; //初始化中心值
57 unsigned int PWM_G2=33; //
58
59 int speed_R=0; //定义两个电机的速度,有正负之分,为正是,正转。(范围-100~100)
60 int speed_L=0;
61
62 int pre_RS=0;
63 int pre_LS=0;
64
65 int set_RS=0;
66 int set_LS=0;
67
68 int speed_A=0;
69 unsigned int cnt_s=0; //用于计数PWM的点空比0=100;
70
71 unsigned long cnt_b=0;
72 unsigned long cnt_beed=0; //用于控制蜂鸣器
73 unsigned int flag_beed=1;
74 unsigned int B_counter=0;
75
76 unsigned char R_date[3]={0};
77 unsigned char RBuff_date[4]={0};
78
79 unsigned char pattern=0; //0:stop 1:start
80
81 unsigned long cnt_ser=0; //用于舵机直流电机控制
82 unsigned char flag_ser=0;
83
84 unsigned char flag_phone=0; //用于手机控制标记
85 unsigned char check_phone=0;
86 unsigned char flag_PC=0;
87
88
89
90 void delay(unsigned long t) //软件延时带参数t
91 {
92 1 unsigned int j,k;
93 1 for(t;t>0;t--)
94 1 for(j=20;j>0;j--)
95 1 for(k=100;k>0;k--);
96 1 }
97
98
99 unsigned char sen_inp_IROA()
100 {
101 1 unsigned IROA_date;
102 1 IROA_date=sensor_IROA;
103 1 IROA_date=~IROA_date;
104 1 IROA_date &=0x38;
105 1 IROA_date>>=3;
106 1 return(IROA_date);
107 1 }
108
109 void beed_ctrl(unsigned long time , unsigned int num)
110 {
111 1 beed=0;
112 1 cnt_beed=2*time;
113 1 B_counter=2*num;
114 1 beed=1;
115 1 cnt_b=0;
116 1 }
117
C51 COMPILER V9.01 WTCAR 07/02/2012 16:12:39 PAGE 3
118
119 void display_1602(unsigned int addr,unsigned char temp)
120 {
121 1 unsigned int i,w[2];
122 1 w[0]=temp/16;
123 1 w[1]=temp%16;
124 1
125 1 for(i=0;i<2;i++)
126 1 {
127 2 switch(w[i])
128 2 {
129 3 case 0: print(addr+i,"0"); break;
130 3 case 1: print(addr+i,"1"); break;
131 3 case 2: print(addr+i,"2"); break;
132 3 case 3: print(addr+i,"3"); break;
133 3
134 3 case 4: print(addr+i,"4"); break;
135 3 case 5: print(addr+i,"5"); break;
136 3 case 6: print(addr+i,"6"); break;
137 3 case 7: print(addr+i,"7"); break;
138 3
139 3 case 8: print(addr+i,"8"); break;
140 3 case 9: print(addr+i,"9"); break;
141 3 case 10: print(addr+i,"A"); break;
142 3 case 11: print(addr+i,"B"); break;
143 3
144 3 case 12: print(addr+i,"C"); break;
145 3 case 13: print(addr+i,"D"); break;
146 3 case 14: print(addr+i,"E"); break;
147 3 case 15: print(addr+i,"F"); break;
148 3 default: break;
149 3 }
150 2 }
151 1 }
152
153 void display_1602_10(unsigned int addr,unsigned char temp)
154 {
155 1 unsigned int i,w[3];
156 1 w[0]=temp/100;
157 1 w[1]=temp/10%10;
158 1 w[2]=temp%10;
159 1
160 1 for(i=0;i<3;i++)
161 1 {
162 2 print2(addr+i,w[i]);
163 2 }
164 1 }
165
166 /****************采用直流电机控制摄像头上下活动***********/
167 void ser_up()
168 {
169 1 EN1_S=1;
170 1 IN1_S=0;
171 1 IN2_S=1;
172 1 flag_ser=1;
173 1 }
174
175 void ser_down()
176 {
177 1 EN1_S=1;
178 1 IN1_S=1;
179 1 IN2_S=0;
C51 COMPILER V9.01 WTCAR 07/02/2012 16:12:39 PAGE 4
180 1 flag_ser=1;
181 1 }
182
183 /****************采用舵机控制摄像头上下左右活动***********/
184 void cam_left()
185 {
186 1 PWM_G1++;
187 1 if(PWM_G1>53)
188 1 {
189 2 PWM_G1=53;
190 2 }
191 1 }
192
193 void cam_right()
194 {
195 1 PWM_G1--;
196 1 if(PWM_G1<13)
197 1 {
198 2 PWM_G1=13;
199 2 }
200 1 }
201
202 void cam_up()
203 {
204 1 PWM_G2--;
205 1 if(PWM_G2<13)
206 1 {
207 2 PWM_G2=13;
208 2 }
209 1
210 1 }
211
212 void cam_down()
213 {
214 1 PWM_G2++;
215 1 if(PWM_G2>53)
216 1 {
217 2 PWM_G2=53;
218 2 }
219 1 }
220
221 void cam_mid()
222 {
223 1 PWM_G1=Byte_Read(0x00);;
224 1 PWM_G2=Byte_Read(0x01);;
225 1 }
226
227 /*************采用L293驱动前车灯**************/
228 void LED_F_on()
229 {
230 1 EN2_S=1;
231 1 IN4_S=1;
232 1 }
233 void LED_F_off()
234 {
235 1 EN2_S=1;
236 1 IN4_S=0;
237 1 }
238 /*************采用L293驱动激光灯**************/
239 void Laser_on()
240 {
241 1 EN2_S=1;
C51 COMPILER V9.01 WTCAR 07/02/2012 16:12:39 PAGE 5
242 1 IN3_S=1;
243 1 }
244 void Laser_off()
245 {
246 1 EN2_S=1;
247 1 IN3_S=0;
248 1 }
249
250 /*************采用继电器驱动水泵**************/
251
252
253 /*************init To************/
254 void init_T0(void)
255 {
256 1 TMOD|=0x01; //定时器工作在模式1
257 1 TH0=0xff; //定时初值TH0=0xff TL0=0x49 定时100uS
258 1 TL0=0x49;
259 1 TR0=1;
260 1 ET0=1;
261 1 }
262
263
264 /************TO interrupt********/
265 void timer0(void) interrupt 1
266 {
267 1 TH0=0xff;
268 1 TL0=0x49;
269 1
270 1 cnt_s++; //PWM占空比计数 0-100
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -