📄 002.lst
字号:
C51 COMPILER V7.06 002 09/16/2008 20:43:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 002
OBJECT MODULE PLACED IN 002.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 002.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <math.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 #define tim 65536-2000
6 sbit dis0 =P2^4;
7 sbit dis1 =P2^5;
8 sbit dis2 =P2^6;
9 sbit dis3 =P2^7;
10 sbit dis4 =P3^4;
11 int pen1;
12 sbit key3 =P2^0;
13 sbit key2 =P2^1;
14 sbit key1 =P2^2;
15 sbit key0 =P2^3;
16 int disp[8];
17 uchar key,keyx,ts;
18 int para[10],ptr=0;
19 uchar code ledtab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
20 uchar code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
21 0x80,0x90,0xed,0x6b,0x0f,0xe3,0x4f,0x4d};
22 void modeproc(),keyproc(),time(uint);
23 int xm,ym,xe,ye,fm,xo,yo,x2,y2,shun=0,ni=1,i,autopic=0;
24 int xx=0,yy=0;
25
26 //==================电机驱动=================================
27 char movx[6]={0x01,0x03,0x02,0x06,0x04,0x05};//movx[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
28 char movy[6]={0x10,0x30,0x20,0x60,0x40,0x50};
29 //char movx1[6]={0x81,0x83,0x82,0x86,0x84,0x85};
30 //char movy1[6]={0x90,0xb0,0xa0,0xe0,0xc0,0xd0};
31 char inderx=0,indery=0;
32 char pen=0x80;
33 void right()
34 {inderx++;
35 1 if(inderx>5)
36 1 inderx=0;
37 1
38 1 P0=movx[inderx]|pen1;
39 1
40 1 time(1000);
41 1 }
42 void left()
43 {inderx--;
44 1 if(inderx<0)
45 1 inderx=5;
46 1 P0=movx[inderx]|pen1;
47 1
48 1 time(1000);
49 1 }
50 void up()
51 {indery++;
52 1 if(indery>5)
53 1 indery=0;
54 1
55 1 P0=movy[indery]|pen1;
C51 COMPILER V7.06 002 09/16/2008 20:43:48 PAGE 2
56 1
57 1 time(1000);
58 1 }
59 void down()
60 {indery--;
61 1 if(indery<0)
62 1 indery=5;
63 1
64 1 P0=movy[indery]|pen1;
65 1
66 1
67 1 time(1000);
68 1 }
69 //=======驱动结束===================================
70
71
72 void time(uint t)
73 {
74 1 uint i;
75 1 for(i=0;i<t;i++);
76 1 }
77
78 void distran()
79 {
80 1 disp[3]=distab[para[ptr]%10];//s4
81 1 disp[2]=distab[(para[ptr]/10)%10];//s3
82 1 disp[1]=distab[(para[ptr]/100)%10];//s2
83 1 disp[0]=distab[(para[ptr]/1000)%10];//s1
84 1 disp[4]=~ledtab[ptr];
85 1 }
86
87 void display()
88 {
89 1 static dis=0;distran();
90 1 dis=(dis+1)%5;
91 1 dis0=1;dis1=1;dis2=1;dis3=1;dis4=1;
92 1 P1=disp[dis];
93 1 switch(dis)
94 1 {
95 2 case 0: dis0=0; break;
96 2 case 1: dis1=0; break;
97 2 case 2: dis2=0; break;
98 2 case 3: dis3=0; break;
99 2 case 4: dis4=0; break;
100 2 }
101 1 if(!key0) keyx=dis+1;
102 1 if(!key1) keyx=dis+5;
103 1 if(!key2) keyx=dis+9;
104 1 if(!key3) keyx=dis+13;
105 1 }
106
107 void modi(uchar p,uchar x)
108 {
109 1 para[p]=(para[p]%1000)*10+x;
110 1 }
111
112 void dingwei()
113 {
114 1 while(xx!=xm||yy!=ym)//画笔定位到设定值
115 1 {
116 2 if(xx<xm)
117 2 {
C51 COMPILER V7.06 002 09/16/2008 20:43:48 PAGE 3
118 3 xx++;
119 3 pen1=0x80;
120 3 right();
121 3 }
122 2 if(xx>xm)
123 2 {
124 3 xx--;
125 3 pen1=0x80;
126 3 left();
127 3 }
128 2 if(yy<ym)
129 2 {
130 3 yy++;
131 3 pen1=0x80;
132 3 up();
133 3 }
134 2 if(yy>ym)
135 2 {
136 3 yy--;
137 3 pen1=0x80;
138 3 down();
139 3 }
140 2
141 2 }
142 1 }
143
144 void mode_zx()
145 {
146 1 int xiangxian,bushu;//,xe1,ye1;
147 1
148 1 if(!autopic){
149 2 ptr=0;
150 2 para[0]=1000;
151 2 for(;;)
152 2 {
153 3 if(keyx>0)
154 3 {
155 4 key=keyx;
156 4 while(keyx!=0)
157 4 {keyx=0; time(3000);}
158 4 if(key==16)
159 4 break;
160 4 keyproc();
161 4
162 4 }
163 3 }
164 2 para[0]=para[0]*1000/325*10;
165 2 para[1]=para[1]*1000/325*10;
166 2 para[2]=para[2]*1000/325*10;
167 2 para[3]=para[3]*1000/325*10;
168 2 }
169 1 xm=para[0];
170 1 ym=para[1];
171 1 dingwei();//画笔初始化
172 1 xm=0;
173 1 ym=0;
174 1 xe=para[2]-para[0];
175 1 ye=para[3]-para[1];
176 1 // xe1=xe;
177 1 //ye1=ye;
178 1 bushu=abs(xe)+abs(ye);
179 1 xx=para[2];//下次开始前笔的位置坐标
C51 COMPILER V7.06 002 09/16/2008 20:43:48 PAGE 4
180 1 yy=para[3];
181 1 fm=0;
182 1 if((ye>ym)&&(xe>xm))
183 1 xiangxian=1;
184 1 if((ye>ym)&&(xe<xm))
185 1 {xiangxian=2;}//xe=-xe;
186 1 if((ye<ym)&&(xe<xm))
187 1 {xiangxian=3;}//ye=-ye;xe=-xe;}
188 1 if((ye<ym)&&(xe>xm))
189 1 {xiangxian=4;}//ye=-ye;}
190 1 pen1=0;
191 1
192 1
193 1 if(xe==0)//终点坐标在Y轴上(新坐标)
194 1 {if(ye>=0)
195 2 {while(ym!=ye)
196 3 { ptr=6;
197 4 para[6]=bushu--;
198 4
199 4 ym++;
200 4 up();
201 4 }
202 3 }
203 2 if(ye<0)
204 2 {
205 3 while(ym!=ye)
206 3 {
207 4 ptr=6;
208 4 para[6]=bushu--;
209 4 ym--;
210 4 down();
211 4 }
212 3 }
213 2 }
214 1
215 1
216 1 if(ye==0)//终点坐标在X轴上(新坐标)
217 1 {if(xe>=0)
218 2 {while(xm!=xe)
219 3 {
220 4 ptr=6;
221 4 para[6]=bushu--;
222 4 xm++;
223 4 right();
224 4 }
225 3 }
226 2 if(xe<0)
227 2 {
228 3 while(xm!=xe)
229 3 { ptr=6;
230 4 para[6]=bushu--;
231 4 xm--;
232 4 left();
233 4 }
234 3 }
235 2 }
236 1
237 1 while(xm!=xe||ym!=ye)
238 1 {
239 2 if(fm>=0)
240 2 {
241 3 if(xiangxian==2||xiangxian==3)
C51 COMPILER V7.06 002 09/16/2008 20:43:48 PAGE 5
242 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -