📄 s_ motor-key.lst
字号:
233 1 {
234 2 lcd_wdat(cdis4[m]); //显示字符
235 2 m++;
236 2 }
237 1
238 1 for(m=0;m<2;m++)
239 1 {
240 2 lcd_pos(0x0c+m); //显示方向符号
241 2 lcd_wdat(0x3e);
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 5
242 2 }
243 1
244 1 }
245 /********************************************************/
246 /*
247 /*数据转换子程序
248 /*
249 /********************************************************/
250 void data_conv()
251 {
252 1 data_temp1=data_temp/10; //高位
253 1 if(data_temp1==0)
254 1 {data_temp1=0x20;} //高位为0不显示
255 1 else
256 1 {data_temp1=data_temp1+0x30;}
257 1
258 1 data_temp2=data_temp%10; //低位
259 1 data_temp2=data_temp2+0x30;
260 1 }
261
262 /********************************************************/
263 /*
264 /*数据显示子程序
265 /*
266 /********************************************************/
267 void data_dis()
268 {
269 1 data_temp = snum; //显示圈数
270 1 data_conv();
271 1 lcd_pos(0x44);
272 1 lcd_wdat(data_temp1);
273 1 lcd_pos(0x45);
274 1 lcd_wdat(data_temp2);
275 1
276 1 data_temp = rate; //显示速率
277 1 data_conv();
278 1 lcd_pos(0x4d);
279 1 lcd_wdat(data_temp1);
280 1 lcd_pos(0x4e);
281 1 lcd_wdat(data_temp2);
282 1 }
283 /********************************************************
284 /*
285 /* 显示运行方向符号
286 /*
287 /********************************************************/
288 void motor_DR()
289 {
290 1 if(direction==1) //正转方向标志
291 1 { for(m=0;m<2;m++)
292 2 {
293 3 lcd_pos(0x0c+m); //显示方向符号
294 3 lcd_wdat(0x3e);
295 3 }
296 2 }
297 1 else
298 1 { for(m=0;m<2;m++) //反转方向标志
299 2 {
300 3 lcd_pos(0x0c+m); //显示方向符号
301 3 lcd_wdat(0x3c);
302 3 }
303 2 }
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 6
304 1 }
305
306 /********************************************************
307 /*
308 /* 显示运行状态
309 /*
310 /********************************************************/
311 void motor_RUN()
312 {
313 1 if(on_off==1)
314 1 { TR0=1;
315 2 lcd_pos(0); //设置显示位置为第一行的第1个字符
316 2 m = 0;
317 2 while(cdis5[m] != '\0')
318 2 { lcd_wdat(cdis5[m]); //RUNNING
319 3 m++; }
320 2 motor_DR(); //
321 2 }
322 1 else
323 1 { TR0=0; P1 =0xf0;
324 2 lcd_pos(0); //设置显示位置为第一行的第1个字符
325 2 m = 0;
326 2 while(cdis3[m] != '\0')
327 2 { lcd_wdat(cdis3[m]); //STOP
328 3 m++; }
329 2 motor_DR(); //
330 2 snum=snum1; //
331 2 number1=0; //清圈数计数器
332 2 }
333 1 }
334
335 /********************************************************
336 *
337 * 主程序
338 *
339 *********************************************************/
340 main()
341 {
342 1 LCD_init_DIS();
343 1
344 1 TMOD = 0x01; //T0定时方式1
345 1 TL0 = 0x33;
346 1 TH0 = 0xf5;
347 1 EA = 1;
348 1 ET0 = 1;
349 1 P1 = 0xf0;
350 1
351 1 while(1)
352 1 {
353 2 if(K1==0)
354 2 {
355 3 beep();
356 3 while(K1==0); //等待键释放
357 3 on_off=~on_off;
358 3 motor_RUN();
359 3 } //K1 end
360 2 /********************************************************/
361 2 if(K2==0)
362 2 {
363 3 beep();
364 3 if(snum_dr==1)
365 3 { snum++;
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 7
366 4 snum1=snum;
367 4 if(snum==0x14)
368 4 { snum_dr=~snum_dr;}
369 4 }
370 3 else
371 3 {snum--;
372 4 snum1=snum;
373 4 if(snum==0x01)
374 4 { snum_dr=~snum_dr; }
375 4 }
376 3
377 3 } //K2 end
378 2 /********************************************************/
379 2 if(K3==0)
380 2 {
381 3 beep();
382 3 direction=~direction;
383 3 motor_DR();
384 3 }//K3 end
385 2
386 2 /********************************************************/
387 2 if(K4==0)
388 2 {
389 3 beep();
390 3 if(rate_dr==1)
391 3 { rate++;
392 4 if(rate==0x10)
393 4 { rate_dr=~rate_dr;}
394 4 }
395 3 else
396 3 {
397 4 rate--;
398 4 if(rate==0x01)
399 4 { rate_dr=~rate_dr; }
400 4 }
401 3 } //K4 end
402 2
403 2 /********************************************************/
404 2 if(number1==snum1) //与设定圈数是否相等
405 2 { number1=0;
406 3 on_off=0;
407 3 TR0=0;
408 3 snum=snum1;
409 3 P1 =0xf0;
410 3 motor_RUN();
411 3 }
412 2 data_dis();
413 2 } // while(1) end
414 1 } //main end
415
416 /********************************************************/
417 /*
418 /* 定时器 0 中断
419 /*
420 /********************************************************/
421
422 void motor_onoff() interrupt 1
423 {
424 1 TL0 = 0x33;
425 1 TH0 = 0xf5;
426 1 q++;
427 1 if(q < rate)
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 8
428 1 { return; }
429 1 else
430 1 { q=0;
431 2 number++; //脉冲计数
432 2
433 2 if(number==96) //96个脉冲电机转一圈
434 2 { snum--;
435 3 number=0;
436 3 number1++; } //电机转动圈数
437 2
438 2
439 2 if(direction==1) //方向标志
440 2 { if(v<8)
441 3 {P1 = FFW[v];v++;} //取数据,正转
442 3 if(v==8)
443 3 { v=0; }
444 3 }
445 2
446 2 else
447 2 { if(v<8)
448 3 {P1 = REV[v];v++;} //取数据,反转
449 3 if(v==8)
450 3 { v=0; }
451 3 }
452 2 }
453 1 }
454
455 /********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 784 ----
CONSTANT SIZE = 101 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = 4 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -