📄 song.lst
字号:
C51 COMPILER V7.50 SONG 12/10/2006 12:17:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SONG
OBJECT MODULE PLACED IN song.OBJ
COMPILER INVOKED BY: D:\Program Files\uv2\C51\BIN\C51.EXE song.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<stdio.h>
2 #include<reg51.h>
3
4 #define POINT_NUM 36
5
6 sbit clk=P0^0;
7 sbit sda=P0^1;
8 sbit P17=P1^7;
9 sbit P03=P0^3;
10 sbit P04=P0^4;
11 sbit P05=P0^5;
12 sbit P06=P0^6;
13 sbit P32=P3^2;
14 sbit P07=P0^7;
15 sbit P11=P1^1;
16 sbit P12=P1^2;
17 sbit P13=P1^3;
18 sbit P10=P1^0;
19 sbit P14=P1^4;
20 sbit P16=P1^6;
21 sbit P24=P2^4;
22 sbit P25=P2^5;
23 sbit P26=P2^6;
24 sbit P27=P2^7;
25 sbit P37=P3^7;
26
27 #define hi 0x3c
28 #define lo 0xb0
29 #define hi1 0x01
30 #define lo1 0x01
31 unsigned char code ledk[10]={0x3f,0x30,0x5b,0x4f,0x66,0x6D,0x7d,0x07,0x7f,0x6f};
32 unsigned char dsp[4];
33 int ms;//测距
34 unsigned char speedl;///////左轮脉冲
35 unsigned char speedr;///////右轮脉冲
36 unsigned char pwm_count;/////总脉宽
37 int distance[5];////存储铁块距?
38 unsigned char tie_flag;///检测铁片起始标志
39 unsigned char stopFlag;//停车标志
40 unsigned char _5s_count;//几时5秒
41 unsigned char Second_5;//倒几时
42 unsigned char count;//铁片计数
43 unsigned char index;
44 unsigned char t0_count;//定时器0计数
45 unsigned char time;
46 unsigned char show_tie_juli;//显示铁片的距离
47 unsigned char show_tie_time;//显示铁片的距
48 unsigned char turn_l_time;
49 unsigned char turn_r_time;
50 unsigned char turn_count;
51 unsigned char zawFlag;
52 int ms1;//铁片起点的脉冲个数
53 int ms2;//铁片终点的脉冲个数
54 unsigned Status;
55
C51 COMPILER V7.50 SONG 12/10/2006 12:17:20 PAGE 2
56 ///////////////////////////////////
57 void stop_5s();
58 void display();
59 void c_sun();
60 void ceju();
61 void zaw();
62 void cheting();
63 void ButtonAction();
64 void delay(unsigned int n);
65 void shift(unsigned char dd);
66 void t0();
67 //void hextodec(unsigned char xx);
68 void black();
69 ////////////////////////////////////////
70
71
72 void main(void)
73 {
74 1
75 1 PT1=1;
76 1 EA=1;
77 1 EX0=1;
78 1 IT0=1;
79 1 EX1=1;
80 1 IT1=1;
81 1 TMOD=0x21;
82 1 ET0=1;
83 1 TH0=hi;
84 1 TL0=lo;
85 1 TR0=1;
86 1 TR1=1;
87 1 ET1=1;
88 1 ET0=1;
89 1 TH1=hi1;
90 1 TL1=lo1;
91 1 speedl=180;
92 1 speedr=180;
93 1 P10=P12=1;
94 1 tie_flag=0;
95 1 stopFlag = 0;
96 1 zawFlag = 0;
97 1 Second_5 = 5;
98 1 count=0;
99 1 //P14 =0;
100 1 //P03 =0;
101 1 Status = 1;
102 1 show_tie_juli = 0;
103 1
104 1 while(1)
105 1 {
106 2 display();
107 2 // ceju();
108 2 switch (Status)
109 2 {
110 3 case 1://AC路段检测
111 3 {
112 4 black();
113 4 // if(time>20)
114 4 // stop_5s();
115 4 break;
116 4 }
117 3
C51 COMPILER V7.50 SONG 12/10/2006 12:17:20 PAGE 3
118 3 case 2://障碍物检测
119 3 {
120 4 if (P06 ==0)
121 4 {
122 5
123 5 zawFlag=1;
124 5 Status=3;
125 5 }
126 4
127 4 break;
128 4 }
129 3 case 3://检测到障碍物后转玩90度
130 3 {
131 4 zaw();
132 4 break;
133 4 }
134 3 case 4://寻光源,定方向
135 3 {
136 4 c_sun();
137 4 break;
138 4 }
139 3 case 5://停车入库
140 3 {
141 4 cheting();
142 4 break;
143 4 }
144 3
145 3 case 6:
146 3 {
147 4
148 4 ButtonAction();
149 4 break;
150 4 }
151 3 }
152 2 }
153 1 }
154
155 ///////////////////////////////
156 ////////////////////////////////////延时
157 void delay (unsigned int n)
158 {unsigned int i,j;
159 1 for(i=0;i<n;i++)
160 1 for(j=0;j<n;j++);
161 1 }
162 ////////////////////////////////////164串并行
163 void shift(unsigned char dd)
164 {static unsigned char d;
165 1 unsigned char j=0;
166 1 d=dd;while(j<8)
167 1 {
168 2 if((d&0x80)!=0)
169 2 sda=1;
170 2 else sda=0;
171 2 clk=0;delay(1);clk=1;
172 2 d<<=1;j++;}
173 1
174 1 }
175
176 //////////////////////////////////// T0定时计数
177 void t0() interrupt 1
178 { unsigned char char_show;
179 1 TH0=hi;TL0=lo;/////50ms
C51 COMPILER V7.50 SONG 12/10/2006 12:17:20 PAGE 4
180 1 t0_count++;
181 1 if(t0_count>=20)
182 1 {
183 2 time++;
184 2 if (time>30)
185 2 {
186 3 PX0=1;
187 3 }
188 2 t0_count=0;
189 2 if (show_tie_juli == 1)
190 2 {
191 3 show_tie_time ++;
192 3 }
193 2 if (show_tie_time >= 3)
194 2 {
195 3 show_tie_juli= 0;
196 3 show_tie_time =0;
197 3 dsp[2]= 0;
198 3 }
199 2
200 2
201 2 if (show_tie_juli == 0)
202 2 {
203 3 char_show = (unsigned char)time / 10;
204 3 char_show = ledk[char_show];
205 3
206 3 dsp[1] = char_show;
207 3
208 3 char_show = time %10;
209 3 char_show = ledk[char_show];
210 3
211 3 dsp[0] = char_show;
212 3
213 3 }
214 2
215 2 if(time>=90)
216 2 {
217 3 stop_5s();
218 3 TR0=0;
219 3 Status=6;
220 3 }
221 2
222 2
223 2 }
224 1 ///电机停止信号
225 1
226 1 /////////////////////////
227 1 if (Status ==3)
228 1 {
229 2
230 2 turn_count++;
231 2 if (turn_count>=20)
232 2 {
233 3 turn_count=0;
234 3 turn_l_time++;
235 3 if (turn_l_time >=8)
236 3 {
237 4 Status =4;
238 4 //turn_l_time = 0;
239 4 }
240 3 }
241 2
C51 COMPILER V7.50 SONG 12/10/2006 12:17:20 PAGE 5
242 2 }
243 1
244 1 if(Status ==4)
245 1 {
246 2 turn_count++;
247 2 if (turn_count>=20)
248 2 {
249 3 turn_count=0;
250 3 turn_r_time++;
251 3 if (turn_r_time >=8)
252 3 {
253 4 Status =5;
254 4
255 4 //turn_r_time=0;
256 4 }
257 3 }
258 2 }
259 1 ///////////////////////////
260 1
261 1 if (stopFlag == 1)
262 1 {
263 2 char_show = ledk[Second_5];
264 2 dsp[3] = char_show;
265 2 _5s_count++;
266 2
267 2 if(_5s_count<=10)
268 2 P17=0;
269 2 if(_5s_count>10)
270 2 P17=1;
271 2
272 2 if (_5s_count == 20)
273 2 {
274 3
275 3 Second_5 --;
276 3 _5s_count=0;
277 3 char_show = ledk[Second_5];
278 3 dsp[3] = char_show;
279 3 if (Second_5 == 0)
280 3 {
281 4 stopFlag = 0;
282 4 TR1 = 1;
283 4 EX0=0;//关外部0中断,不再检测铁片+
284 4
285 4 Status = 2;
286 4 //P04=0;
287 4 //P05=0;
288 4 speedr=180;
289 4 speedl=230;
290 4 }
291 3 }
292 2 }
293 1
294 1 }
295 ///////////////////////////////////
296 /*void hextodec(unsigned char xx)
297 {unsigned char B;
298 B=xx/10;
299 dsp[3]=B;
300 xx=xx%10;
301 B=xx;
302 dsp[2]=B;
303 }*/
C51 COMPILER V7.50 SONG 12/10/2006 12:17:20 PAGE 6
304 ///////////////////////////////////检测黑线子涵数
305 void black()
306 {
307 1 if(P04==1)
308 1 {
309 2 speedl=2; ///////左轮压黑线
310 2 speedr=250;
311 2 }
312 1 else
313 1 {
314 2 speedl=250;
315 2 //speedr=180;
316 2 }
317 1
318 1 if(P05==1)
319 1 {
320 2 speedr=2; ///右轮压黑线
321 2 speedl =250;
322 2 }
323 1 else
324 1 {
325 2 speedr=250; //没压黑线
326 2 //speedl=180;
327 2
328 2 }
329 1 if(P04==0&&P05==0)
330 1 {
331 2 speedl =250;
332 2 speedr =250;
333 2 }
334 1 }
335 //////////////////////////////
336 void PWM() interrupt 3
337 { if(pwm_count==speedl)
338 1 P10=1;
339 1
340 1 if(pwm_count==speedr)
341 1 P12=1;
342 1 ++pwm_count;
343 1 if(pwm_count==255)
344 1 {pwm_count=0;
345 2 P10=0;
346 2 P12=0;}
347 1
348 1
349 1 }
350 ///////////////金属数目检测及显示涵数
351 void int0() interrupt 0
352 {
353 1 unsigned char i,char_show;
354 1
355 1 display();
356 1 if ( P32 ==1)
357 1 return;
358 1
359 1 ms1=ms;
360 1 if (time>30)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -