📄 e.lst
字号:
535 //* Function: 设置显示开始行
536 //*********************************/
537 char SetStarLine(char line)
538 {
539 1 char state;
540 1 line=(line&0x3F)|0xC0;
541 1 state=WrCommandLcd(line);
542 1 return(state);
543 1 }
544
545
546
547 void InitDis(void)
548 {
549 1 SetStarLine(0x00);
550 1 WrCommandLcd(0x3F);//kai xian shi
C51 COMPILER V8.02 E 11/05/2008 19:09:21 PAGE 10
551 1 }
552
553
554 char SysInit(void)
555 {
556 1 unsigned char i, state;
557 1
558 1 // Rst_Lcd=0; //复位lcd
559 1 for(i=0xFF;i>0;i--) //延时1ms
560 1 { ; }
561 1 //Rst_Lcd=1;
562 1 SetStarLine(0x00);
563 1 InitDis( );
564 1
565 1 return(state);
566 1 }
567 //********************************/
568 //* Name: SetStarLine
569 //* Function: 设置当前页地址
570 //* Input: page=页地址
571 //***************************************/
572 char SetPageAddr(char page)
573 {
574 1 char state;
575 1 page=(page&0x07)|0xB8;
576 1 state=WrCommandLcd(page);
577 1 return(state);
578 1 }
579 //*******************/
580 //* Name: SetStarLine
581 //* Function: 设置当Y地址
582 //* Input: line=开始显示的行数?
583 /////////// **********/
584 char SetYAddr(char y)
585 {
586 1 char state;
587 1 y=(y&0x3F)|0x40;
588 1 state=WrCommandLcd(y);
589 1 return(state);
590 1 }
591 //////////////////////////////////////////////////////////
592 //
593 //////////////////////////////////////////////////////////
594 ////////////////////////////////////////////////////显示某点
595 void Dispoint(unsigned char page,unsigned char y)
596 {
597 1 unsigned char tmp=0;
598 1 unsigned char state=0;
599 1
600 1 SetPageAddr(page/8);
601 1 SetYAddr(y);
602 1 if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
603 1 else {Cs1_Lcd=0;Cs2_Lcd=1;}
604 1
605 1 En_Lcd=0;
606 1 for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)
607 1 { ; }
608 1 if(tmp==0)
609 1 { state=0xFF; }
610 1 else
611 1 {
612 2 Rs_Lcd=1;
C51 COMPILER V8.02 E 11/05/2008 19:09:21 PAGE 11
613 2 Rw_Lcd=1;
614 2
615 2 En_Lcd=1; delay_us(2);
616 2 dat=DataBuss;
617 2 En_Lcd=0; delay_us(2);
618 2
619 2 En_Lcd=1; delay_us(2);
620 2 dat=DataBuss;
621 2 En_Lcd=0; delay_us(2);
622 2
623 2 }
624 1
625 1 dat|=(1<<(page%8));
626 1 SetPageAddr(page/8);
627 1 SetYAddr(y);
628 1 if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
629 1 else {Cs1_Lcd=0;Cs2_Lcd=1;}
630 1 for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)//ban mang ?
631 1 { ; }
632 1 if(tmp==0)
633 1 { state=0xFF; }
634 1 else
635 1 {
636 2 Rw_Lcd=0;
637 2 Rs_Lcd=1;
638 2
639 2 DataBuss=dat;
640 2
641 2 En_Lcd=1;
642 2 En_Lcd=0;
643 2 }
644 1
645 1 }
646
647 ////////////////////////////////////////////////////清除某点
648 void Clrpoint(unsigned char page,unsigned char y)
649 {
650 1 unsigned char tmp=0;
651 1 unsigned char state=0;
652 1
653 1 SetPageAddr(page/8);
654 1 SetYAddr(y);
655 1 if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
656 1 else {Cs1_Lcd=0;Cs2_Lcd=1;}
657 1
658 1 En_Lcd=0;
659 1 for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)
660 1 { ; }
661 1 if(tmp==0)
662 1 { state=0xFF; }
663 1 else
664 1 {
665 2 Rs_Lcd=1;
666 2 Rw_Lcd=1;
667 2
668 2 En_Lcd=1; delay_us(10);
669 2 dat=DataBuss;
670 2 En_Lcd=0; delay_us(10);
671 2
672 2 En_Lcd=1; delay_us(10);
673 2 dat=DataBuss;
674 2 En_Lcd=0; delay_us(10);
C51 COMPILER V8.02 E 11/05/2008 19:09:21 PAGE 12
675 2
676 2 }
677 1 dat&=~(1<<(page%8));
678 1 SetPageAddr(page/8);
679 1 SetYAddr(y);
680 1 if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
681 1 else {Cs1_Lcd=0;Cs2_Lcd=1;}
682 1 for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)//ban mang ?
683 1 { ; }
684 1 if(tmp==0)
685 1 { state=0xFF; }
686 1 else
687 1 {
688 2 Rw_Lcd=0;
689 2 Rs_Lcd=1;
690 2
691 2 DataBuss=dat;
692 2
693 2 En_Lcd=1;
694 2 En_Lcd=0;
695 2 }
696 1
697 1 }
698
699 ////////////////////////////////////////////////////请屏幕
700 void ClrScreen(void)
701 {
702 1 char i,j,state;
703 1
704 1 for(j=0;j<8;j++)
705 1 {
706 2 state=SetPageAddr(j);
707 2 state=SetYAddr(0x00);
708 2
709 2 Cs1_Lcd=1;
710 2 Cs2_Lcd=0;
711 2 for(i=0;i<64;i++) //清
712 2 {
713 3 state=WrDataLcd(0);
714 3 }
715 2 Cs1_Lcd=0;
716 2 Cs2_Lcd=1;
717 2 for(i=0;i<64;i++) //清
718 2 {
719 3 state=WrDataLcd(0);
720 3 }
721 2 }
722 1 }
723
724 void DisChar(unsigned char *p,unsigned char page,unsigned char y,char state)
725 {
726 1 unsigned char i,j,tmp;
727 1
728 1 for(j=0;j<2;j++)
729 1 {
730 2 SetPageAddr(page+j);
731 2 if(y<64)
732 2 { i=y; }
733 2 else
734 2 { i=y-64; }
735 2 SetYAddr(i);
736 2 //SetStarLine(i);
C51 COMPILER V8.02 E 11/05/2008 19:09:21 PAGE 13
737 2
738 2 if(y<64)
739 2 {
740 3 Cs1_Lcd=1;
741 3 Cs2_Lcd=0;
742 3 }
743 2 else
744 2 {
745 3 Cs1_Lcd=0;
746 3 Cs2_Lcd=1;
747 3 }
748 2
749 2 for(i=8;i<16;i++)
750 2 {
751 3 tmp=p[i-8*j];
752 3 if(state==0x01)
753 3 { tmp=~tmp; }
754 3 WrDataLcd(tmp);
755 3 }
756 2 }
757 1 }
758
759 ////////////////////////////////////////////////////状态机按键
760 unsigned char read_key(unsigned char a,unsigned char key)
761 {
762 1 char key_press, key_return = 0;
763 1
764 1 key_press = key;// 读按键I/O电平
765 1
766 1 switch (key_state[a])
767 1 {
768 2 case key_state_0:// 按键初始态
769 2 if (!key_press) key_state[a] = key_state_1;// 键被按下,状态转换到键确认态
770 2 break;
771 2
772 2 case key_state_1:// 按键确认态
773 2 if (!key_press)
774 2 {
775 3 key_return = 1; // 按键仍按下,按键确认输出为“1”
776 3 key_state[a] = key_state_2; // 状态转换到键释放态
777 3 }
778 2 else
779 2 key_state[a] = key_state_0; // 按键已抬起,转换到按键初始态
780 2 break;
781 2
782 2 case key_state_2:
783 2 if (key_press) key_state[a] = key_state_0; //按键已释放,转换到按键初始态
784 2 break;
785 2 }
786 1
787 1
788 1 return key_return;
789 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3211 ----
CONSTANT SIZE = 324 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 31
IDATA SIZE = 155 ----
C51 COMPILER V8.02 E 11/05/2008 19:09:21 PAGE 14
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -