?? main.lst
字號:
C51 COMPILER V7.50 MAIN 09/12/2005 03:25:56 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\Program Files\Keil\C51\BIN\C51.EXE main.c LARGE OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg52.h"
2 #include "intrins.h"
3 #include "math.h"
4 #include <absacc.h>
5 #include "VIIC_C51.h"
6 #include "ZLG7290.h"
7
8 //端口定義
9 sbit KEY_INT=P3^2;
10 sbit PA1=P2^0;
11 sbit PB1=P2^1;
12 sbit PC1=P2^2;
13 sbit PA2=P2^4;
14 sbit PB2=P2^5;
15 sbit PC2=P2^6;
16
17 //For Tlc2543
18 sbit CLK = P2^0;
19 sbit DIN = P2^1;
20 sbit DOUT = P2^2;
21 sbit CS = P2^3;
22
23 #define Pi 3.141593
24 #define step 330./1500 //單步距離,mm
25 #define pull 0
26 #define push 1
27 #define c 1100. //兩滑輪間距,mm
28 #define dx 150. //滑輪到計數點原點投影距離,mm
29 #define dy 150.
30 #define minline 100. //最短直線分段
31 #define motordelay 2 //電機步間延時
32 #define gate 0x1ff //傳感器門檻
33 #define searth 35 //尋跡步數,35=1cm
34 //#define trace_ru 1 //向右上尋跡
35 //#define trace_rd 2 //向右下尋跡
36 //#define trace_lu 3 //向左上尋跡
37 //#define trace_ld 4 //向左下尋跡
38
39 extern unsigned char ZLG7290_GetKey();
40 void Display(unsigned char *sd); //顯示程序
41 void DelayX10ms(int count); //Delay time=count*10ms
42 void Delay(unsigned char no);
43 void RunA(long num,bit dir); //輸入轉動的步數、方向,完成電機1轉動(相對3相電機)
44 void RunB(long num,bit dir); //輸入轉動的步數、方向,完成電機1轉動(相對3相電機)
45 float Pointab_A(float x,float y); //坐標變換xy-a
46 float Pointab_B(float x,float y); //坐標變換xy-b
47 float Pointxy_X(float a,float b); //坐標變換xy-a
48 float Pointxy_Y(float a,float b); //坐標變換xy-b
49 void Circle(float x,float y,float r); //畫圓程序
50 void Stepto(float x, float y);
51 void Lineto(float x,float y);
52 unsigned int ad549(void);
53 unsigned int Trace(void);
54 void Mypath (void);
55 void Go_ru(void); //右上
C51 COMPILER V7.50 MAIN 09/12/2005 03:25:56 PAGE 2
56 void Go_lu(void); //左上
57 void Go_rd(void); //右下
58 void Go_ld(void); //左下
59
60 int flag_trace; //0:連續; 1:斷開
61
62 //全局變量
63 bit dir1,dir2; //電機方向pull為收,push為放
64 char sta1,sta2;
65 unsigned char key;
66 unsigned char send[8]={00,00,00,00,00,00,00,00};//定義發送緩沖區 0~3--y 4~6--x 7--sign
67 float alast,blast,xlast,ylast,xkey,ykey;
68 unsigned char disp_buf[8]={0,0,0,0,0,0,0,0};
69
70
71 void main()
72 {
73 1 int test;
74 1 //電機a初始化
75 1 PA1=0;
76 1 PB1=1;
77 1 PC1=1;
78 1 sta1=0;
79 1
80 1 //電機b初始化
81 1 PA2=0;
82 1 PB2=1;
83 1 PC2=1;
84 1 sta2=0;
85 1 //RunA(1500,pull);
86 1 //DelayX10ms(1000);
87 1 //RunB(1500,pull);
88 1 //Delay(2);
89 1 //當前點,以la、lb步數為坐標記,拉減放加
90 1 /*
91 1 while (1)
92 1 {
93 1 while(KEY_INT);
94 1 key=ZLG7290_GetKey();
95 1 ykey=send[0]+send[1]*10+send[2]*100+send[3]*1000;
96 1 xkey=send[4]+send[5]*10+send[6]*100;
97 1 switch(key)
98 1 {
99 1 case 1 :send[0]++; //ymm位
100 1 if(send[0]==10)
101 1 {
102 1 send[0]=00;
103 1 }
104 1 break;
105 1 case 2 :send[1]++;//ycm位
106 1 if(send[1]==10)
107 1 {
108 1 send[1]=00;
109 1 }
110 1 break;
111 1 case 3 :send[2]++;//ydm位
112 1 if(send[2]==10)
113 1 {
114 1 send[2]=00;
115 1 }
116 1 break;
117 1 case 4 :send[3]++;//ym位
C51 COMPILER V7.50 MAIN 09/12/2005 03:25:56 PAGE 3
118 1 if(send[3]==2)
119 1 {
120 1 send[3]=00;
121 1 }break;
122 1 case 5 :send[4]++;//xmm位
123 1 if(send[4]==10)
124 1 {
125 1 send[4]=00;
126 1 }
127 1 break;
128 1 case 6 :send[5]++;//xcm位
129 1 if(send[5]==10)
130 1 {
131 1 send[5]=00;
132 1 }
133 1 break;
134 1 case 7 :send[6]++;//xdm位
135 1 if(send[6]==8)
136 1 {
137 1 send[6]=00;
138 1 }
139 1 break;
140 1 case 8 :send[7]=1;Lineto(xkey,ykey);send[7]=0; break;
141 1 case 9 : //輸入當前坐標
142 1 xlast=xkey;
143 1 ylast=ykey;
144 1 break;
145 1 case 10 :RunB(10,pull); break;
146 1 case 11 :RunB(10,push); break;
147 1 case 12 :RunA(10,pull); break;
148 1 case 13 :RunA(10,push); break;
149 1 case 14 :send[7]=4;Trace();send[7]=0;break;
150 1 case 15 :send[7]=3;Mypath();send[7]=0;break;
151 1 case 16 :send[7]=2;Circle(xkey,ykey,250);send[7]=0;break;
152 1 }
153 1 Delay(100);
154 1 Display(send);
155 1 //if (key!=9) continue;//等待按鍵,輸入坐標
156 1 //else break;
157 1 }
158 1 ylast=send[0]+send[1]*10+send[2]*100+send[3]*1000;
159 1 xlast=send[4]+send[5]*10+send[6]*100;
160 1 //*/
161 1
162 1 xlast=400;
163 1 ylast=500;
164 1 alast=Pointab_A(xlast,ylast);
165 1 blast=Pointab_B(xlast,ylast);
166 1
167 1 Stepto(0,0);
168 1 Display(send);
169 1 DelayX10ms(1000);
170 1 //RunB(2500,1);
171 1 //RunB(2500,0);
172 1 DelayX10ms(1000);
173 1
174 1 for(test=0;test<100;test++)
175 1 {RunA(25,1);Delay(10);}
176 1 RunA(2500,0);
177 1 Delay(2000);
178 1
179 1
C51 COMPILER V7.50 MAIN 09/12/2005 03:25:56 PAGE 4
180 1 Circle(400,500,250);
181 1 DelayX10ms(1000);
182 1 Mypath();
183 1 Trace();
184 1 while(1);
185 1 }
186
187 void Display(unsigned char *sd)//顯示程序
188 {
189 1 disp_buf[0] = sd[0];
190 1 disp_buf[1] = sd[1];
191 1 disp_buf[2] = sd[2];
192 1 disp_buf[3] = sd[3];
193 1 disp_buf[4] = sd[4];
194 1 disp_buf[5] = sd[5];
195 1 disp_buf[6] = sd[6];
196 1 disp_buf[7] = sd[7];
197 1 ZLG7290_SendBuf(disp_buf,8);
198 1 }
199
200 void DelayX10ms(int count) //Delay time=count*10ms
201 {
202 1 unsigned int l,m,n;
203 1
204 1 for(l=0;l<count;l++)
205 1 for(m=0;m<12;m++)
206 1 for(n=0;n<120;n++);
207 1 }
208
209 void Delay(unsigned char no)
210 {
211 1 int i,j; //延時參數
212 1 for(; no>0; no--)
213 1 {
214 2 for(i=0; i<10; i++)
215 2 for(j=0; j<100; j++)
216 2 _nop_();
217 2 }
218 1 }
219
220 void RunA(long num,bit dir)//輸入轉動的步數、方向,完成電機1轉動(相對3相電機)
221 {
222 1 long i;
223 1 if(dir)
224 1 {
225 2 for(i=0;i<=num;i++)
226 2 {
227 3 sta1++;
228 3 sta1=sta1%6;
229 3 Delay(motordelay);
230 3 if (sta1==0)PC1=1;
231 3 if (sta1==1)PB1=0;
232 3 if (sta1==2)PA1=1;
233 3 if (sta1==3)PC1=0;
234 3 if (sta1==4)PB1=1;
235 3 if (sta1==5)PA1=0;
236 3 }
237 2 }
238 1 else
239 1 {
240 2 for(i=0;i<=num;i++)
241 2 {
C51 COMPILER V7.50 MAIN 09/12/2005 03:25:56 PAGE 5
242 3 sta1--;
243 3 if (sta1<0)sta1=5;
244 3 Delay(motordelay);
245 3 if (sta1==0)PB1=1;
246 3 if (sta1==1)PA1=0;
247 3 if (sta1==2)PC1=1;
248 3 if (sta1==3)PB1=0;
249 3 if (sta1==4)PA1=1;
250 3 if (sta1==5)PC1=0;
251 3 _nop_();
252 3 }
253 2 }
254 1 }
255
256 void RunB(long num,bit dir)//輸入轉動的步數、方向,完成電機1轉動(相對3相電機)
257 {
258 1 long i;
259 1 if(~dir)
260 1 {
261 2 for(i=0;i<=num;i++)
262 2
263 2 {
264 3 sta2++;
265 3 sta2=sta2%6;
266 3 Delay(motordelay);
267 3 if (sta2==0)PC2=1;
268 3 if (sta2==1)PB2=0;
269 3 if (sta2==2)PA2=1;
270 3 if (sta2==3)PC2=0;
271 3 if (sta2==4)PB2=1;
272 3 if (sta2==5)PA2=0;
273 3 }
274 2 }
275 1 else
276 1 {
277 2 for(i=0;i<=num;i++)
278 2
279 2 {
280 3 sta2--;
281 3 if (sta2<0)sta2=5;
282 3 Delay(motordelay);
283 3 if (sta2==0)PB2=1;
284 3 if (sta2==1)PA2=0;
285 3 if (sta2==2)PC2=1;
286 3 if (sta2==3)PB2=0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -