📄 lcd.lst
字号:
299 1 LCD_Disp_Word(95,2,WLib_line_6x8,1,6);
300 1 LCD_Disp_Word(101,2,WLib_8_5x8,1,5);
301 1 LCD_Disp_Word(106,2,WLib_0_5x8,1,5);
302 1 LCD_Disp_Word(111,2,WLib_2_5x8,1,5);
303 1 }
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 6
304
305 /***********************************************************************************
306 * 函数名称:dis_clr;
307 *
308 * 函数功能描述: 清屏;
309 *
310 * 输入参数:none;
311 *
312 * 返回数据:none;
313 *
314 * 注意: none;
315 ************************************************************************************/
316
317 void dis_clr(void)
318 {
319 1 unsigned char x,y;
320 1 for(y=0;y<8;y++)
321 1 {
322 2 for(x=0;x<128;x++)
323 2 lcd_wrda(x,y,0x00);
324 2 }
325 1 }
326
327 /***********************************************************************************
328 * 函数名称:dis_full;
329 *
330 * 函数功能描述: 写满屏;
331 *
332 * 输入参数:none;
333 *
334 * 返回数据:none;
335 *
336 * 注意: none;
337 ************************************************************************************/
338
339 void dis_full(void)
340 {
341 1 unsigned char x,y;
342 1 for(y=0;y<8;y++)
343 1 {
344 2 for(x=0;x<128;x++)
345 2 lcd_wrda(x,y,0xff);
346 2 }
347 1 }
348
349 /***********************************************************************************
350 * 函数名称:checkbusy;
351 *
352 * 函数功能描述: 判断LCD忙等待;
353 *
354 * 输入参数:none;
355 *
356 * 返回数据:none;
357 *
358 * 注意: none;
359 ************************************************************************************/
360
361 void checkbusy(void)
362 {
363 1 addr=0x980e;
364 1
365 1 _nop_();_nop_();
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 7
366 1 _nop_();_nop_();
367 1
368 1 do
369 1 {
370 2 tp=addr;
371 2 }while((*tp&0x80)==0x80);
372 1
373 1 addr=0x180f;
374 1 }
375
376 /***********************************************************************************
377 * 函数名称:lcd_wrct;
378 *
379 * 函数功能描述: 向LCD写命令;
380 *
381 * 输入参数:none;
382 *
383 * 返回数据:none;
384 *
385 * 注意: none;
386 ************************************************************************************/
387
388 void lcd_wrct(unsigned char dd)
389 {
390 1 DISABLE_INTERRUPTS;
391 1
392 1 addr=0x980c;
393 1 tp=addr;
394 1 *tp=dd;
395 1
396 1 addr=0x180c;
397 1
398 1 _nop_();_nop_();
399 1 _nop_();_nop_();
400 1
401 1 addr=0x180d;
402 1
403 1 ENABLE_INTERRUPTS;
404 1 }
405
406 /***********************************************************************************
407 * 函数名称:set_xy;
408 *
409 * 函数功能描述: LCD读写位置变换;
410 *
411 * 输入参数:unsigned char类型坐标x,y;
412 *
413 * 返回数据:none;
414 *
415 * 注意: none;
416 ************************************************************************************/
417
418 void set_xy(unsigned char x,unsigned char y)
419 {
420 1 DISABLE_INTERRUPTS;
421 1
422 1 checkbusy();
423 1
424 1 y&=0x07;
425 1 y|=0xB8;
426 1 lcd_wrct(y);
427 1
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 8
428 1 x&=0x3F;
429 1 x|=0x40;
430 1 lcd_wrct(x);
431 1
432 1 ENABLE_INTERRUPTS;
433 1 }
434
435 /***********************************************************************************
436 * 函数名称:lcd_wrda;
437 *
438 * 函数功能描述:向LCD写数据;
439 *
440 * 输入参数:unsigned char类型坐标x,y, unsigned char类型写入数据dd;
441 *
442 * 返回数据:none;
443 *
444 * 注意: none;
445 ************************************************************************************/
446
447 void lcd_wrda(unsigned char x,unsigned char y,unsigned char dd)
448 {
449 1
450 1 DISABLE_INTERRUPTS;
451 1 set_xy(x,y);
452 1 checkbusy();
453 1 if(x<64)
454 1 {
455 2 addr=0x9805;
456 2 tp=0x9805;
457 2 }
458 1 else
459 1 {
460 2 addr=0x9809;
461 2 tp=0x9809;
462 2 }
463 1
464 1
465 1 *tp=dd;
466 1
467 1 ENABLE_INTERRUPTS;
468 1 }
469
470 /***********************************************************************************
471 * 函数名称:lcd_rdda;
472 *
473 * 函数功能描述:从LCD中读数据;
474 *
475 * 输入参数:unsigned char类型坐标x,y,
476 *
477 * 返回数据:unsigned char类型读出数据;
478 *
479 * 注意: none;
480 ************************************************************************************/
481
482 unsigned char lcd_rdda(unsigned char x,unsigned char y)
483 {
484 1 unsigned char xdata readdata;
485 1
486 1 set_xy(x,y);
487 1 checkbusy();
488 1 if(x<64)
489 1 {
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 9
490 2 addr=0x9807;
491 2
492 2 tp=addr;
493 2 addr=0x1805;
494 2 }
495 1 else
496 1 {
497 2 addr=0x980b;
498 2
499 2 tp=addr;
500 2 addr=0x1809;
501 2 }
502 1 readdata=*tp;
503 1 checkbusy();
504 1 if(x<64)
505 1 {
506 2 addr=0x9807;
507 2
508 2 tp=addr;
509 2 addr=0x1805;
510 2 }
511 1 else
512 1 {
513 2 addr=0x980b;
514 2
515 2 tp=addr;
516 2 addr=0x1809;
517 2 }
518 1 readdata=*tp;
519 1 return readdata;
520 1 }
521
522 /***********************************************************************************
523 * 函数名称:dis_start;
524 *
525 * 函数功能描述:显示开机画面;
526 *
527 * 输入参数:none;
528 *
529 * 返回数据:none;
530 *
531 * 注意: none;
532 ************************************************************************************/
533
534 void dis_start(void)
535 {
536 1 unsigned char x,y;
537 1 for(y=0;y<8;y++)
538 1 {
539 2 for(x=0;x<128;x++)
540 2 {
541 3 _nop_();_nop_();
542 3 lcd_wrda(x,y,0xAA); _nop_();_nop_();
543 3 lcd_wrda(x+1,y,0x55);_nop_();_nop_();
544 3 x+=1;
545 3 }
546 2 }
547 1 }
548
549 /***********************************************************************************
550 * 函数名称:LCD_Draw_dot;
551 *
C51 COMPILER V7.06 LCD 04/22/2005 13:32:48 PAGE 10
552 * 函数功能描述:画点(x,y);
553 *
554 * 输入参数:BYTE类型坐标x,y; bool类型标识flag;
555 *
556 * 返回数据:none;
557 *
558 * 注意: none;
559 ************************************************************************************/
560
561 void LCD_Draw_dot(BYTE x,BYTE y,bool flag)
562 {
563 1 R_BYTE temp,bit_x;
564 1
565 1 bit_x=7-y%8;
566 1
567 1 y=7-y/8;
568 1
569 1 temp=lcd_rdda(x,y);
570 1 if (flag)
571 1 temp|=(1<<bit_x);
572 1 else
573 1 temp&=~(1<<bit_x);
574 1
575 1 lcd_wrda(x,y,temp);
576 1 }
577
578 /***********************************************************************************
579 * 函数名称:LCD_Draw_line;
580 *
581 * 函数功能描述:(x1,y1)--(x2,y2)处划线;
582 *
583 * 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
584 *
585 * 返回数据:none;
586 *
587 * 注意: none;
588 ************************************************************************************/
589
590 bool LCD_Draw_line(BYTE x1,y1,x2,y2,bool flag)
591 {
592 1 R_BYTE i,temp;
593 1 float data k,b;
594 1
595 1 if ((x1>=MAX_BIT_X)||(x2>=MAX_BIT_X)||(y1>=MAX_BIT_Y)||(y2>=MAX_BIT_Y))
596 1 return false;
597 1
598 1 if (y1==y2)
599 1 {
600 2 if (x1>x2)
601 2 {
602 3 temp=x1;
603 3 x1=x2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -