📄 lcd.lst
字号:
440 1 }
441
442 /****************************************************************************/
443 /* 函数名:wait_ready */
444 /* 功 能:等待ready:等待LCD内部操作完成 */
445 /* 作 者:spot */
446 /* 输 入:无 */
447 /* 输 出:无 */
448 /* */
449 /* 历史记录: */
450 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
451 /****************************************************************************/
452 void wait_ready(void)
453 {
454 1 RS = 0;/*指令*/
455 1 RW = 1;/*读*/
456 1 _nop_();
457 1 while(lcd_data & status_busy); /*读入LCD状态,1=忙,一直等待LCD内部操作完成*/
458 1 }
459
460 /****************************************************************************/
461 /* 函数名:lcd_init */
462 /* 功 能:122x32LCD初始化,开机后仅调用一次 */
463 /* 作 者:spot */
464 /* 输 入:无 */
465 /* 输 出:无 */
466 /* */
467 /* 历史记录: */
468 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
469 /****************************************************************************/
470 void lcd_init(void)
471 {
472 1 send_mi(reset); /* 复位m-left,s-right */
473 1 send_si(reset);
474 1
475 1 send_mi(disp_off); /* 关闭显示 */
476 1 send_si(disp_off);
477 1
478 1 send_mi(dynamic_driver);
479 1 send_si(dynamic_driver);
480 1
481 1 send_mi(clk32);
482 1 send_si(clk32);
483 1
484 1 send_mi(adc_select); /* clockwise */
485 1 send_si(adc_select);
486 1
487 1 send_mi(mode_write);
488 1 send_si(mode_write);
489 1
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 9
490 1 send_mi(col_addr_set);
491 1 send_mi(disp_start_line); /* 归回零列,设定显示起始行首 */
492 1
493 1 send_si(col_addr_set);
494 1 send_si(disp_start_line);
495 1
496 1 send_mi(disp_on); /* 开显示 */
497 1 send_si(disp_on);
498 1
499 1 lcd_clr();
500 1 }
501
502 /****************************************************************************/
503 /* 函数名:lcd_clr */
504 /* 功 能:LCD清屏 */
505 /* 作 者:spot */
506 /* 输 入:无 */
507 /* 输 出:无 */
508 /* */
509 /* 历史记录: */
510 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
511 /****************************************************************************/
512 void lcd_clr(void)
513 {
514 1 u_char i, page;
515 1
516 1 for (page=0; page<4; page++)
517 1 {
518 2 send_mi(page_addr_set|page);
519 2 send_si(page_addr_set|page);
520 2
521 2 send_mi(col_addr_set); /* 主窗口设置为0列 */
522 2
523 2 for (i=0; i<62; i++)
524 2 {
525 3 send_md(0x00);
526 3 }
527 2
528 2 send_si(col_addr_set); /* 从窗口设置为0列 */
529 2 for (i=0; i<62; i++)
530 2 {
531 3 send_sd(0x00);
532 3 }
533 2 }
534 1 }
535
536 /****************************************************************************/
537 /* 函数名:set_page */
538 /* 功 能:同时设置主(左)从(右)显示页为0-1页 */
539 /* 作 者:spot */
540 /* 输 入:page */
541 /* 输 出:无 */
542 /* */
543 /* 历史记录: */
544 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
545 /****************************************************************************/
546 void set_page(u_char page)
547 {
548 1 send_mi(page_addr_set|page);
549 1 send_si(page_addr_set|page);
550 1 }
551
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 10
552 /****************************************************************************/
553 /* 函数名:set_page */
554 /* 功 能:同时设置主从列地址为0-61列 */
555 /* 作 者:spot */
556 /* 输 入:address */
557 /* 输 出:无 */
558 /* */
559 /* 历史记录: */
560 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
561 /****************************************************************************/
562 void set_address(u_char address)
563 {
564 1 send_mi(address&0x7F); /* &0x7F,考虑到防止越限 */
565 1 send_si(address&0x7F);
566 1 }
567
568 /****************************************************************************/
569 /* 函数名:putchar_l */
570 /* 功 能:在左页(主窗口)当前地址画一个字节(8点) */
571 /* 作 者:spot */
572 /* 输 入:c */
573 /* 输 出:无 */
574 /* */
575 /* 历史记录: */
576 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
577 /****************************************************************************/
578 void putchar_l(u_char c)
579 {
580 1 send_md(c);
581 1 }
582
583 /****************************************************************************/
584 /* 函数名:putchar_r */
585 /* 功 能:在右页(从窗口)当前地址画一个字节(8点) */
586 /* 作 者:spot */
587 /* 输 入:c */
588 /* 输 出:无 */
589 /* */
590 /* 历史记录: */
591 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
592 /****************************************************************************/
593 void putchar_r(u_char c)
594 {
595 1 send_sd(c);
596 1 }
597
598 /****************************************************************************/
599 /* 函数名:draw_bmp */
600 /* 功 能:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16 */
601 /* 作 者:spot */
602 /* 输 入: */
603 /* col 图型的起始位置0~121 */
604 /* layer 图形的位置(Y坐标)0-下半部分 非0-上半部分 */
605 /* width 图形宽度8,16可选 */
606 /* bmp 图形数据指针 */
607 /* */
608 /* 输 出:无 */
609 /* */
610 /* 历史记录: */
611 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
612 /****************************************************************************/
613 void draw_bmp(u_char col,u_char layer,u_char width,u_char *bmp)
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 11
614 {
615 1 u_char x;
616 1 u_char address; /* address表示显存的物理地址 */
617 1 u_char p=0;
618 1 u_char page=0; /* page表示上下两页,window表示左右窗口(0左,1右) */
619 1 u_char window=0;
620 1
621 1 if (layer)
622 1 {
623 2 page=2; /* 左-主窗口,右-从窗口 */
624 2 }
625 1
626 1 for (x=col; x<col+width; x++)
627 1 {
628 2 if (x>121)
629 2 return; /* 防止显示乱码 */
630 2
631 2 if (x>60) /* 左右窗口定位 */
632 2 {
633 3 window=1; /* 右-从窗口 */
634 3 address=x%61;
635 3 }
636 2 else
637 2 {
638 3 address=x; /* 主窗口输出 */
639 3 }
640 2
641 2 set_page(page); /* 上层数据输出 */
642 2 set_address(address);
643 2
644 2 if (window)
645 2 putchar_r(bmp[p]);
646 2 else
647 2 putchar_l(bmp[p]);
648 2
649 2 set_page(page+1); /* 下层数据输出 */
650 2 set_address(address); /* 列保持不变 */
651 2
652 2 if (window)
653 2 putchar_r(bmp[p+width]);
654 2 else
655 2 putchar_l(bmp[p+width]);
656 2
657 2 p++;
658 2 }
659 1 }
660
661 /****************************************************************************/
662 /* 函数名:disp_one_ascii */
663 /* 功 能:显示单个ASCII码 */
664 /* 作 者:spot */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -