📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 03/01/2009 15:15:54 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
line level source
1 //切板机控制程序//
2 ///////////////////
3 //////////////////////////////////////////////////////////////////////////
4 // // // //
5 //作者:郑玉杰 //
6 //Author:Jacky Zheng //
7 //国籍:中华人民共和国 //
8 //Nationality:People's Republic of China // // //
9 //身份识别码:320924198602016132 //
10 //ID NO.:320924198602016132 // //
11 //声明联系方式:电子邮箱:come_on_yujie@163.com //
12 //Contact Information: E-mail:come_on_yujie@163.com //
13 //日期:2009年3月1日测试完成 //
14 //Date:Have been finished on Mar.1,2009. // //
15 //声明版权: //
16 //Copyrights: // // //
17 //本程序为有版权的程序,未经本人书面同意任何组织和个人不得传播或使用。 //
18 //Please do not transmit or use it if you have not the copyrights. //
19 //版权归作者所有。 //
20 //The copyrights belongs to the author. // //
21 // // // //
22 //////////////////////////////////////////////////////////////////////////
23
24 /*****************************************************************************/
25
26 //头文件加入
27 #include "REG52.h"
28 #include <intrins.h>
29 #include <absacc.h>
30 #include "VI2C_C51.h"
31 #include "stdio.h"
32 #include "STRING.H"
33 /*****************************************************************************/
34 //寻址定义
35 #define UCHAR unsigned char
36 #define uint unsigned int
37
38 /****************************************************************************/
39 //LCD读写使能位
40 sbit LCDRSPIN = P3^7;
41 sbit LCDRWPIN = P3^6;//读写使能,lcd&da0832
42 sbit LCDEPIN = P2^6;
43
44 /*****************************************************************************/
45 //输出
46 sbit RING_OUT = P2^1; //RING输出位
47
48 sbit CS = P2^4; //步进电机使能
49 sbit CW = P2^5; //步进电机正反转标志位
50 sbit CLK = P2^7; //脉冲位
51
52
53 /*****************************************************************************/
54 //输入
55 sbit LEFT_BIT = P1^0; //左限位
C51 COMPILER V8.05a MAIN 03/01/2009 15:15:54 PAGE 2
56 sbit RIGHT_BIT = P1^1; //右限位
57 sbit SAFE = P2^0; //光电保护位
58 /*****************************************************************************/
59 //按键
60 sbit P3_0 = P3^4;//MANU
61 sbit P3_1 = P3^3;//ENTER&SAVE
62 sbit P3_2 = P3^2;//RUN&<-
63 sbit P3_3 = P3^1;//INC
64 sbit P3_4 = P3^0;//DEC
65
66 /*****************************************************************************/
67 UCHAR MANU=0;//0:运行使能状态;1:speed设置状态;2:length设置状态。
68 UCHAR RUN=0;// 运行
69 UCHAR INC=0;// 增加&向上
70 UCHAR DEC=0;// 减小&向下
71 UCHAR LEFT=0;//左移
72 /*****************************************************************************/
73 UCHAR SPEED;//速度
74 uint LENGTH;//行程设置
75 uint PLUSE;//脉冲量转换
76
77 int COUNT;
78
79 bit FLAG = 0;//按键一次标志位
80 bit SAVE = 0; //保存标志位
81 //bit Rong = 0;
82 /*****************************************************************************/
83 void LcdWDA(unsigned char x,unsigned char y,unsigned char *s);
84 void Lcd_THREENO(int x,int y,int i);
85 /*****************************************************************************/
86 //显示字符定义
87 char * MM="MM";
88 char * R="R";
89
90 char * SPD="SPEED:";
91 char * L="L:";
92
93 char * COMPANY = "PS-3000";
94 char * CLEAR = " ";
95 char * PLACE=" ";
96 char * GO="<--";
97 char * BACK="-->";
98 char * CPS="PCS";
99
100 /*****************************************************************************/
101 //延时
102 void delaysst(unsigned int i)
103 {
104 1 UCHAR j;
105 1 for(i; i > 0; i--)
106 1 for(j = 180; j > 0; j--);
107 1 }
108
109 /*****************************************************************************/
110 //RING
111 void RING(void)
112 {UCHAR S;
113 1 for(S=200;S>0;S--)
114 1 {
115 2 delaysst(1);
116 2 RING_OUT=~RING_OUT;
117 2 }
C51 COMPILER V8.05a MAIN 03/01/2009 15:15:54 PAGE 3
118 1 }
119
120 /*****************************************************************************/
121 //输入键扫描
122 KEY()
123 {FLAG=0;
124 1 //设置模
125 1 if(MANU!=0)
126 1 {
127 2 while(P3_0==0)
128 2 {delaysst(5);
129 3 if(P3_0 ==0&&FLAG ==0)
130 3 {
131 4 if(MANU<3)
132 4 MANU++;
133 4 else
134 4 MANU=0;
135 4 LEFT=0;
136 4 FLAG=1;
137 4 RING();
138 4 }
139 3 }
140 2
141 2 while(P3_1==0)
142 2 {delaysst(5);
143 3 if(P3_1==0&&FLAG==0)
144 3 {
145 4 SAVE=1;
146 4 MANU=0;
147 4 FLAG=1;
148 4 }
149 3 }
150 2 while(P3_2==0)
151 2 {delaysst(5);
152 3 if(P3_2==0&&FLAG==0)
153 3 {if(LEFT<=3)
154 4 LEFT++;
155 4 else
156 4 LEFT=0;
157 4 FLAG=1;
158 4 RING();
159 4 }
160 3 }
161 2 while(P3_3==0)
162 2 {delaysst(5);
163 3 if(P3_3==0&&FLAG==0)
164 3 {
165 4 INC=1;
166 4 FLAG=1;
167 4 RING();
168 4 }
169 3 }
170 2 while(P3_4==0)
171 2 {delaysst(5);
172 3 if(P3_4==0&&FLAG==0)
173 3 {
174 4 DEC=1;
175 4 FLAG=1;
176 4 RING();
177 4 }
178 3 }
179 2 FLAG=0;
C51 COMPILER V8.05a MAIN 03/01/2009 15:15:54 PAGE 4
180 2 }
181 1
182 1
183 1 /*****************************************************************************/
184 1 //使用模式
185 1 if(MANU==0)
186 1 {
187 2 while(P3_0==0)
188 2 {delaysst(5);
189 3 if(P3_0==0&&FLAG==0)
190 3 {MANU=1;
191 4 RUN=0;
192 4 FLAG=1;
193 4 RING();
194 4 }
195 3 }
196 2
197 2 while (P3_1==0)
198 2 {
199 3 delaysst(5);
200 3 if (P3_1==0&&FLAG==0)
201 3 {
202 4 SAVE=1;
203 4 MANU=0;
204 4 FLAG=1;
205 4
206 4 }
207 3 }
208 2
209 2 while (P3_2==0)
210 2 {delaysst(5);
211 3 if(P3_2==0&&FLAG==0)
212 3 {
213 4 RUN=~RUN;
214 4 FLAG=1;
215 4 RING();
216 4 }
217 3 }
218 2
219 2 while (P3_3==0)
220 2 {delaysst(5);
221 3 if(FLAG==0)
222 3 {RING();FLAG=1;}
223 3 if(LEFT_BIT==1&&SAFE==1)
224 3 LcdWDA(11,1,GO);
225 3 while(P3_3==0&&(LEFT_BIT==1||SAFE==1))
226 3
227 3 { CW=1;//步进电机正反转设置-》正转
228 4 CLK=~CLK;
229 4 delaysst(10000);
230 4 }
231 3
232 3 // Lcd_THREENO(11,1,LENGTH);
233 3 }
234 2
235 2 while (P3_4==0)
236 2 {delaysst(5);
237 3 if(FLAG==0)
238 3 {RING();FLAG=1;}
239 3 if(RIGHT_BIT==1&&SAFE==1)
240 3 LcdWDA(11,1,BACK);
241 3 while(P3_4==0&&(RIGHT_BIT==1||SAFE==1))
C51 COMPILER V8.05a MAIN 03/01/2009 15:15:54 PAGE 5
242 3
243 3 { CW=0;//步进电机正反转设置-》正转
244 4 CLK=~CLK;
245 4 delaysst(10000);
246 4 }
247 3 // Lcd_THREENO(11,1,LENGTH);
248 3
249 3 if(FLAG)
250 3 Lcd_THREENO(11,1,LENGTH);
251 3 FLAG=0;
252 3 }
253 2 }
254 1 }
255 /*****************************************************************************/
256 //延时
257 void delay(unsigned int i)
258 {
259 1 UCHAR j;
260 1 for(i; i > 0; i--)
261 1 for(j = 8000; j > 0; j--);
262 1 KEY();
263 1 }
264
265 /*****************************************************************************/
266 //初始化(单片机)
267 void sercon(void)
268 {
269 1 SCON = 0x50;
270 1 TMOD |= 0x20;
271 1 TH1 = 0xFD;
272 1 TR1 = 1;
273 1 TI = 1;
274 1 }
275
276 /*****************************************************************************/
277 //控制LCD
278 unsigned char XPOS,YPOS;
279
280 /*****************************************************************************/
281 //测忙
282 void LcdWaitIdle(void)
283 { P0=0xff;
284 1 LCDRSPIN=0;
285 1 LCDRWPIN=1;
286 1 LCDEPIN=1;
287 1 while((P0&0x80)==0x80);
288 1 LCDEPIN=0;
289 1 }
290
291 /*****************************************************************************/
292 //写指令代码
293 void LcdWCN(unsigned char c)
294 { LCDRSPIN=0;
295 1 LCDRWPIN=0;
296 1 P0=c;
297 1 LCDEPIN=1;
298 1 _nop_();
299 1 LCDEPIN=0;
300 1 }
301
302 /*****************************************************************************/
303 //写指令代码(测忙)
C51 COMPILER V8.05a MAIN 03/01/2009 15:15:54 PAGE 6
304 void LcdWC(unsigned char c)
305 { LcdWaitIdle();
306 1 LcdWCN(c);
307 1 }
308
309 /*****************************************************************************/
310 //写数据
311 void LcdWD(unsigned char d)
312 { LcdWaitIdle();
313 1 LCDRSPIN=1;
314 1 LCDRWPIN=0;
315 1 P0=d;
316 1 LCDEPIN=1;
317 1 _nop_();
318 1 LCDEPIN=0;
319 1 }
320
321 /*****************************************************************************/
322 //内部数据地址指针定位
323 void LcdPos(void)
324 { XPOS&=0x0f;
325 1 YPOS&=0x03;
326 1 if(YPOS==0x00)
327 1 LcdWC(XPOS|0x80);
328 1 else if(YPOS==0x01)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -