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