?? cdle-j20_main.lst
字號:
C51 COMPILER V7.02a CDLE_J20_MAIN 04/28/2007 10:09:25 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE CDLE_J20_MAIN
OBJECT MODULE PLACED IN CDLE-J20_Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE CDLE-J20_Main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include <AT89X51.h>
3 #include <math.h>
4 //#define DX 9
5
6 //static unsigned char data CN[4];
7 static unsigned char data DX=11;
8 static unsigned char data DELAYTIME=4;
9
10 static unsigned char data ii,k; /////////////k
11 static unsigned int data i;//,j;
12 static unsigned char data j;
13
14 //static unsigned char idata j,k;//,motor;
15 //static unsigned char idata dl,temp,de;
16
17 //static unsigned int Count;
18
19 //static unsigned int ComCount[TimerNum]; ////////////計數終值
20 //static unsigned int ComCount_[TimerNum]; ////////////與終值的個數
21 //static unsigned char idata ComNumber[TimerNum];
22 //static unsigned char idata Number;
23
24 //static unsigned char data CloseCount[TimerNum]; ///////// 關斷計數器
25
26 ///////////////////遙控//////////////////////////////////////
27 static unsigned char data IRCode[3],IRCON,IRCON2;
28 //static unsigned char data DT;
29 //static unsigned char data flag; /////////// 0 對應串口 1 遙控
30
31 //static unsigned char data GetCode;
32
33 unsigned int a_;
34
35 static unsigned char data Fasheng_Flag;
36
37 static float idata X0,Y0; /////////// chushi X Y
38 static float data K=0.0;
39 static float idata X,Y,DL1_,DL2_,tempDL1,tempDL2;
40 static unsigned int data Step;
41
42 //static unsigned char data cof=6;
43 static float data Coef=0.33;//=3.1415927/cof;
44
45 static unsigned char idata KEY=0;
46
47 bit keytimes=0;
48 bit Button=0;
49
50 static unsigned char idata X0temp=0,Y0temp=0;
51
52 static unsigned char idata Disp[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};///0-9
53
54 static unsigned char idata Shangshuo=0;
55
C51 COMPILER V7.02a CDLE_J20_MAIN 04/28/2007 10:09:25 PAGE 2
56 static unsigned char data g,s,b,q;
57
58 static unsigned char idata StepMoter[8]={0xF5,0xF1,0xF9,0xF8,0xFA,0xF2,0xF6,0xF4}; ///8 Steps; ---->
59
60
61 static unsigned char idata n1,n2;
62 static unsigned char idata mm=0;
63 //bit rightorleft=0; ///////1 right 0 left
64 //bit WhoDa=0; ///// 1 DL1_ 0 DL2_
65
66 static unsigned char idata ThePos1=0,ThePos2=0;
67
68 //P0_0---------P0_3 右邊
69 //P2_0---------P2_3 左
70
71 /////////////////////////////////////////////////////////////////////////////
72 //unsigned char TS[8] = {254,252,248,240,224,192,128,0};
73
74 void Delay()
75 {
76 1 for(k=0;k<DELAYTIME;k++)
77 1 for(a_=0;a_<400;a_++)
78 1 ;
79 1 }
80
81 void GetDL12()
82 {
83 1 DL1_=((X-950)+(Y-1150)*K)/sqrt((950-X)*(950-X)+(1150-Y)*(1150-Y))*DX;///右電機
84 1 DL2_=((X+150)+(Y-1150)*K)/sqrt((X+150)*(X+150)+(1150-Y)*(1150-Y))*DX;////左電機
85 1 }
86
87 void DriveMoter(/*float DL1_,float DL2_*/) ////DL1 是右邊
88 {
89 1
90 1 //Coef=3.1415927/cof;
91 1 ok:
92 1 n1=abs(DL1_)/Coef; ///右電機轉動的相數;
93 1 n2=abs(DL2_)/Coef; ////左電機轉動的相數
94 1
95 1 if(DL1_>0)
96 1 tempDL1+=(DL1_-n1*Coef);
97 1 else
98 1 tempDL1+=DL1_+n1*Coef;
99 1
100 1 if(DL2_>0)
101 1 tempDL2+=(DL2_-n2*Coef);
102 1 else
103 1 tempDL2+=DL2_+n2*Coef;
104 1
105 1 /*
106 1 if(n1<10) ////////////// 3mm buneng tongguo!
107 1 {
108 1 //n1=0;
109 1 tempDL1+=DL1_;
110 1 n1=abs(tempDL1)/Coef;
111 1 if(n1>10)
112 1 {
113 1 DL1_=tempDL1;
114 1 tempDL1=0;
115 1 }
116 1 else
117 1 n1=0;
C51 COMPILER V7.02a CDLE_J20_MAIN 04/28/2007 10:09:25 PAGE 3
118 1 }
119 1 if(n2<10)
120 1 {
121 1 //n1=0;
122 1 tempDL2+=DL2_;
123 1 n2=abs(tempDL2)/Coef;
124 1 if(n2>10)
125 1 {
126 1 DL2_=tempDL2;
127 1 tempDL2=0;
128 1
129 1 }
130 1 else
131 1 n2=0;
132 1 }
133 1 */
134 1
135 1 while(mm<n1||mm<n2)
136 1 {
137 2 mm++;
138 2 if(mm<=n1)
139 2 {
140 3 if(DL1_>0) P1=StepMoter[(mm+ThePos1)%8];
141 3 else P1=StepMoter[(8-mm%8+ThePos1)%8]; // mm%4
142 3 }
143 2
144 2 if(mm<=n2)
145 2 {
146 3 if(DL2_>0) P2=StepMoter[(mm+ThePos2)%8];
147 3 else P2=StepMoter[(8-mm%8+ThePos2)%8];
148 3 }
149 2
150 2 Delay();
151 2 }
152 1
153 1
154 1 if(n1)
155 1 {if(DL1_>0) ThePos1=(n1+ThePos1)%8;else ThePos1=(8-n1%8+ThePos1)%8;}
156 1 if(n2)
157 1 {if(DL2_>0) ThePos2=(n2+ThePos2)%8;else ThePos2=(8-n2%8+ThePos2)%8;}
158 1
159 1 mm=0;
160 1
161 1 if(abs(tempDL1)>3||abs(tempDL2)>3)
162 1 {
163 2 DL1_=tempDL1;
164 2 DL2_=tempDL2;
165 2
166 2 tempDL1=0;
167 2 tempDL2=0;
168 2 goto ok;
169 2 }
170 1
171 1
172 1 }
173 void main(void)
174 {
175 1
176 1
177 1 X0=400;
178 1 Y0=400; //////////////初始 cm
179 1
C51 COMPILER V7.02a CDLE_J20_MAIN 04/28/2007 10:09:25 PAGE 4
180 1 X=0;
181 1 Y=0;
182 1 // DL1_=0.0;
183 1 // DL2_=0.0;
184 1
185 1 Fasheng_Flag=0;
186 1
187 1
188 1 TMOD=0x11; //////都是方式1
189 1
190 1
191 1 EA = 1;
192 1 //ES = 1; //開串口中斷
193 1
194 1 ET0 = 1; /////// T0中斷
195 1
196 1 TR0 = 0; //啟動0定時器
197 1
198 1
199 1 ET1=1;
200 1
201 1 TL1 = 0x77; /////// 定時5ms
202 1 TH1 = 0xEC;
203 1
204 1 // EX1=1;
205 1
206 1 EX0 = 1; ////////////////////////外部0中斷
207 1
208 1 q=X0/100;
209 1 b=X0/10-q*10;
210 1
211 1 s=Y0/100;
212 1 g=Y0/10-s*10;
213 1
214 1
215 1 X0temp=X0/10;
216 1 Y0temp=Y0/10;
217 1
218 1 P0=Disp[0];
219 1 P3=0xFF;
220 1
221 1 // ThePos1=0;ThePos2=0;
222 1 // P1=StepMoter[0];////////////初相
223 1 // P2=StepMoter[0];
224 1
225 1 PT0=1; ////// T0 gao you xian ji!
226 1
227 1 TR1=1;
228 1
229 1 do
230 1 {
231 2
232 2 // Fasheng();
233 2 if(Fasheng_Flag==10)
234 2 {
235 3 KEY++; //// KEY=1 要求輸入第一組數據 X0
236 3 if(KEY==2) //KEY=2 確認第一組,要求輸入第二組數據 Y0
237 3 {
238 4 X0=X0temp*10.0;
239 4
240 4 q=X0/100;
241 4 b=X0/10-q*10;
C51 COMPILER V7.02a CDLE_J20_MAIN 04/28/2007 10:09:25 PAGE 5
242 4 }
243 3 else
244 3 if(KEY==3)
245 3 {
246 4 Y0=Y0temp*10.0;
247 4 s=Y0/100;
248 4 g=Y0/10-s*10;
249 4 KEY=0;
250 4 }
251 3 ///KEY=3 確認第二組Y0
252 3 Fasheng_Flag=0;
253 3 //KEY=3;
254 3 }
255 2
256 2 if(Fasheng_Flag==1&&!KEY) ///////////走直線
257 2 {
258 3 ThePos1=0;ThePos2=0;
259 3 P1=StepMoter[0];////////////初相
260 3 P2=StepMoter[0];
261 3
262 3
263 3 tempDL1=0.0;
264 3 tempDL2=0.0;
265 3 if(X0) ///////////////X0!=0)
266 3 {
267 4 K=Y0/X0;
268 4 Step=X0/DX;
269 4
270 4 for(i=0;i<=Step;i++)
271 4 {
272 5 X=i*DX;
273 5 Y=K*X;
274 5 if(X>800.0||Y>1000.0)
275 5 {
276 6 break;
277 6 }
278 5
279 5 GetDL12();
280 5 //左右驅動電機 分別到達 DL1 DL2的距離
281 5 DriveMoter();
282 5
283 5 q=X/100;
284 5 b=X/10-q*10; /////////X0
285 5
286 5
287 5 s=Y/100; //cm
288 5 g=Y/10-s*10;
289 5 // Delay();
290 5 }
291 4 }
292 3 else if(Y0)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -