📄 text1.lst
字号:
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN .\Text1.OBJ
COMPILER INVOKED BY: E:\学习软件\keil\C51\BIN\C51.EXE .\Text1.C DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #define uint unsigned int
3 #define uchar unsigned char
4 #define tim 65536-2000
5 sbit dis0 =P2^4;
6 sbit dis1 =P2^5;
7 sbit dis2 =P2^6;
8 sbit dis3 =P2^7;
9 sbit dis4 =P3^4;
10
11 sbit key3 =P2^0;
12 sbit key2 =P2^1;
13 sbit key1 =P2^2;
14 sbit key0 =P2^3;
15 int disp[8];
16 uchar key,keyx,ts;
17 int para[10],ptr;
18 uchar code ledtab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
19 uchar code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
20 0x80,0x90,0xed,0x6b,0x0f,0xe3,0x4f,0x4d};
21 void modeproc(),keyproc();
22 int xm,ym,xe,ye,xx=0,yy=0,fm,xo,yo,x2,y2,shun=0,ni=1,i;
23
24 //==================电机驱动=================================
25 char movx[6]={0x01,0x03,0x02,0x06,0x04,0x05};
26 char movy[6]={0x10,0x30,0x20,0x60,0x40,0x50};
27 char inderx=0,indery=0;
28 char pen=0x80;
29 void right()
30 {
31 1 if(inderx>5)
32 1 inderx=0;
33 1 P1=movx[inderx]|pen;
34 1 inderx++;
35 1 }
36 void left()
37 {
38 1 if(inderx<0)
39 1 inderx=5;
40 1 P1=movx[inderx]|pen;
41 1 inderx--;
42 1 }
43 void up()
44 {
45 1 if(indery>5)
46 1 indery=0;
47 1 P1=movy[indery]|pen;
48 1 indery++;
49 1 }
50 void down()
51 {
52 1 if(indery<0)
53 1 indery=5;
54 1 P1=movy[indery]|pen;
55 1 indery--;
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 2
56 1 }
57 //=======驱动结束===================================
58
59
60 void time(uint t)
61 {
62 1 uint i;
63 1 for(i=0;i<t;i++);
64 1 }
65
66 void distran()
67 {
68 1 disp[3]=distab[para[ptr]%10];//s4
69 1 disp[2]=distab[(para[ptr]/10)%10];//s3
70 1 disp[1]=distab[(para[ptr]/100)%10];//s2
71 1 disp[0]=distab[(para[ptr]/1000)%10];//s1
72 1 disp[4]=~ledtab[ptr];
73 1 }
74
75 void display()
76 {
77 1 static dis=0;
78 1 dis=(dis+1)%5;
79 1 dis0=1;dis1=1;dis2=1;dis3=1;dis4=1;
80 1 P1=disp[dis];
81 1 switch(dis)
82 1 {
83 2 case 0: dis0=0; break;
84 2 case 1: dis1=0; break;
85 2 case 2: dis2=0; break;
86 2 case 3: dis3=0; break;
87 2 case 4: dis4=0; break;
88 2 }
89 1 if(!key0) keyx=dis+1;
90 1 if(!key1) keyx=dis+5;
91 1 if(!key2) keyx=dis+9;
92 1 if(!key3) keyx=dis+13;
93 1 }
94
95 void modi(uchar p,uchar x)
96 {
97 1 para[p]=(para[p]%1000)*10+x;
98 1 }
99
100 void dingwei()
101 {
102 1 while(xx!=xm||yy!=ym)//画笔定位到设定值
103 1 {
104 2 if(xx<xm)
105 2 {
106 3 xx++;
107 3 pen=0;
108 3 right();
109 3 }
110 2 if(xx>xm)
111 2 {
112 3 xx--;
113 3 pen=0;
114 3 left();
115 3 }
116 2 if(yy<ym)
117 2 {
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 3
118 3 yy++;
119 3 pen=0;
120 3 up();
121 3 }
122 2 if(yy>ym)
123 2 {
124 3 yy--;
125 3 pen=0;
126 3 down();
127 3 }
128 2
129 2 }
130 1 }
131
132 void mode_zx()
133 {
134 1 int xiangxian;
135 1 for(;;)
136 1 {
137 2 if(keyx>0)
138 2 {
139 3 key=keyx;
140 3 while(keyx!=0)
141 3 {keyx=0; time(3000);}
142 3 if(key==16)
143 3 break;
144 3 keyproc();
145 3
146 3 }
147 2 }
148 1 xm=para[0];
149 1 ym=para[1];
150 1 xe=para[2];
151 1 ye=para[3];
152 1 dingwei();//画笔初始化
153 1 xx=xe;//下次开始前笔的位置坐标
154 1 yy=ye;
155 1 fm=0;
156 1 if((ye-ym)>0&&(xe-xm)>0)
157 1 xiangxian=1;
158 1 if((ye-ym)>0&&(xe-xm)<0)
159 1 xiangxian=2;
160 1 if((ye-ym)<0&&(xe-xm)<0)
161 1 xiangxian=3;
162 1 if((ye-ym)<0&&(xe-xm)>0)
163 1 xiangxian=4;
164 1 pen=0x80;
165 1 while(xm!=xe||ym!=ye)
166 1 {
167 2 if(fm>=0)
168 2 {
169 3 if(xiangxian==2||xiangxian==3)
170 3 {
171 4 xm--;
172 4 left();
173 4 }
174 3
175 3 if(xiangxian==1||xiangxian==4)
176 3 {
177 4 xm++;
178 4 right();
179 4
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 4
180 4 }
181 3
182 3 fm=fm-ye;
183 3
184 3 }
185 2
186 2 if(fm<0)
187 2 {
188 3 if(xiangxian==1||xiangxian==2)
189 3 {
190 4 ym++;
191 4 up();
192 4 }
193 3
194 3 if(xiangxian==3||xiangxian==4)
195 3 {
196 4 ym--;
197 4 down();
198 4
199 4 }
200 3
201 3 fm=fm+xe;
202 3
203 3 }
204 2 }
205 1
206 1
207 1 }
208
209 void mode_yh(int fangxiang)
210 {
211 1 int xiangxian;
212 1 for(;;)
213 1 {
214 2 if(keyx>0)
215 2 {
216 3 key=keyx;
217 3 while(keyx!=0)
218 3 {keyx=0; time(3000);}
219 3 if(key==16)
220 3 break;
221 3 keyproc();
222 3
223 3 }
224 2 }
225 1 xm=para[0]-para[4];//01起始23重点45原点
226 1 ym=para[1]-para[5];
227 1 xe=para[2]-para[4];
228 1 ye=para[3]-para[5];
229 1 xo=0;
230 1 yo=0;
231 1 dingwei();//画笔初始化
232 1 xx=para[2];
233 1 yy=para[3];
234 1 fm=0;
235 1 while(xm!=xe||ym!=ye)
236 1 {
237 2 if((ym-yo)>0&&(xm-xo)>0)
238 2 xiangxian=1;
239 2 if((ym-yo)>0&&(xm-xo)<0)
240 2 xiangxian=2;
241 2 if((ym-yo)<0&&(xm-xo)<0)
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 5
242 2 xiangxian=3;
243 2 if((ym-yo)<0&&(xm-xo)>0)
244 2 xiangxian=4;
245 2 pen=0x80;
246 2
247 2 if(fm>=0)
248 2 {
249 3 if((fangxiang==1&&xiangxian==1)||(fangxiang==0&&xiangxian==4))
250 3 {
251 4 xm--;
252 4 left();
253 4 fm=fm-2*xm+1;
254 4 }
255 3
256 3 if((xiangxian==3&&fangxiang==1)||(xiangxian==2&&fangxiang==0))
257 3 {
258 4 xm++;
259 4 right();
260 4 fm=fm-2*xm+1;
261 4
262 4 }
263 3 if((fangxiang==0&&xiangxian==1)||(fangxiang==1&&xiangxian==2))
264 3 {
265 4 ym--;
266 4 down();
267 4 fm=fm-2*ym+1;
268 4 }
269 3
270 3 if((xiangxian==3&&fangxiang==0)||(xiangxian==4&&fangxiang==1))
271 3 {
272 4 ym++;
273 4 up();
274 4 fm=fm-2*ym+1;
275 4
276 4 }
277 3
278 3
279 3 }
280 2
281 2 if(fm<0)
282 2 {
283 3 if((fangxiang==0&&xiangxian==3)||(fangxiang==1&&xiangxian==2))
284 3 {
285 4 xm--;
286 4 left();
287 4 fm=fm+2*xm+1;
288 4 }
289 3
290 3 if((xiangxian==1&&fangxiang==0)||(xiangxian==4&&fangxiang==1))
291 3 {
292 4 xm++;
293 4 right();
294 4 fm=fm+2*xm+1;
295 4
296 4 }
297 3 if((fangxiang==1&&xiangxian==3)||(fangxiang==0&&xiangxian==4))
298 3 {
299 4 ym--;
300 4 down();
301 4 fm=fm+2*ym+1;
302 4 }
303 3
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 6
304 3 if((xiangxian==1&&fangxiang==1)||(xiangxian==2&&fangxiang==2))
305 3 {
306 4 ym++;
307 4 up();
308 4 fm=fm+2*ym+1;
309 4
310 4 }
311 3
312 3 }
313 2 }
314 1
315 1 }
316
317 void fuwei()
318 {
319 1
320 1 }
321
322 void mypic()
323 {
324 1
325 1 }
326
327 void modeproc()
328 {
329 1 if(key>0)
330 1 {
331 2 switch(key)
332 2 {
333 3 case 1: mode_zx();break;
334 3 case 2: mode_yh(shun);break;
335 3 case 3: mode_yh(ni);break;
336 3 case 4: mypic();break;
337 3 case 5: fuwei();
338 3 /* case 5: modi(ptr,4);break;
339 3 case 6: modi(ptr,5);break;
340 3 case 7: modi(ptr,6);break;
341 3 case 8: modi(ptr,7);break;
342 3 case 9: modi(ptr,8);break;
343 3 case 10:modi(ptr,9);break;
344 3
345 3 case 11:if(ptr<7) ptr++;break;
346 3 case 12:if(ptr>0) ptr--;break;
347 3
348 3 case 13:para[ptr]+=1;break;
349 3 case 14:para[ptr]-=1;break;
350 3 case 15:para[ptr]+=10;break;
351 3 case 16:para[ptr]-=10;break;*/
352 3 }
353 2 }
354 1 key=0;
355 1 }
356
357
358
359 void keyproc()
360 {
361 1 if(key>0)
362 1 {
363 2 switch(key)
364 2 {
365 3 case 1: modi(ptr,0);break;
C51 COMPILER V6.12 TEXT1 09/12/2008 22:11:44 PAGE 7
366 3 case 2: modi(ptr,1);break;
367 3 case 3: modi(ptr,2);break;
368 3 case 4: modi(ptr,3);break;
369 3 case 5: modi(ptr,4);break;
370 3 case 6: modi(ptr,5);break;
371 3 case 7: modi(ptr,6);break;
372 3 case 8: modi(ptr,7);break;
373 3 case 9: modi(ptr,8);break;
374 3 case 10:modi(ptr,9);break;
375 3
376 3 case 11:if(ptr<7) ptr++;break;
377 3 case 12:if(ptr>0) ptr--;break;
378 3
379 3 /*case 13:para[ptr]+=1;break;
380 3 case 14:para[ptr]-=1;break;
381 3 case 15:para[ptr]+=10;break;
382 3 case 16:para[ptr]-=10;break;*/
383 3
384 3 }
385 2 }
386 1 key=0;
387 1 }
388
389 void timer0() interrupt 1
390 {
391 1 TH0=tim>>8; TL0=tim; display();
392 1 }
393
394 void main()
395 {
396 1 TMOD=0x11;IE=0x82;
397 1 TH0=tim>>8; TL0=tim; TR0=1;
398 1 ptr=0;
399 1 distran();
400 1 for(;;)
401 1 {para[0]=xx;
402 2 para[1]=yy;
403 2 for(i=2;i<6;i++)
404 2 para[i]=0;
405 2 if(keyx>0)
406 2 {
407 3 key=keyx;
408 3 while(keyx!=0)
409 3 {keyx=0; time(3000);}
410 3 modeproc();
411 3 }
412 2 time(1000);
413 2 distran();
414 2 }
415 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2305 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 86 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -