📄 lcdx1.lst
字号:
717 1 draw_rec(p1,p2,s);
718 1 p1.x=111+5;
719 1 p1.y=3;
720 1 p2.x=112+5;
721 1 p2.y=4;
722 1 if(s) {draw_srec(p1,p2,0xff);}
723 1 else {draw_srec(p1,p2,s);}
724 1 }
725
726 /*显示电量标志图:num为数值,s=1为显示,s=0为清除*/
727 void disp_bat(uchar num,bit s)
728 {
729 1 uchar i;
730 1 point p1,p2;
731 1 if(num!=batnum)
732 1 {
733 2 p1.x=94+5;
734 2 p1.y=1;
735 2 p2.x=109+5;
736 2 p2.y=6;
737 2 draw_srec(p1,p2,0);
C51 COMPILER V7.07 LCDX1 01/25/2005 13:50:05 PAGE 13
738 2 }
739 1 p1.x=95+5;
740 1 p1.y=2;
741 1 p2.x=98+5;
742 1 p2.y=5;
743 1 for(i=0;i<num;i++)
744 1 {
745 2 if(s) {draw_srec(p1,p2,0xff);}
746 2 else {draw_srec(p1,p2,s);}
747 2 p1.x+=5;
748 2 p2.x+=5;
749 2 }
750 1 batnum=num;
751 1 }
752
753 /*显示横向条形图的数值,入口参数:cursor.x以及cursor.y */
754 void transfer(uchar a)
755 {
756 1 if(a>=0&&a<10) {disp_one_hz(a,5,sntab,1);}
757 1 else if(a==100) {disp_one_hz(1,5,sntab,1);disp_one_hz(0,5,sntab,1);disp_one_hz(0,5,sntab,1);}
758 1 else
759 1 {
760 2 disp_one_hz(a/10,5,sntab,1);
761 2 disp_one_hz(a%10,5,sntab,1);
762 2 }
763 1 }
764
765 /*显示横向条形图:num范围0_100
766 当当前数值小于上一次的数值时,将上一次的数值保持(两条竖线或一条竖线)
767 直到下一次调用该程序
768 */
769 bit direction;
770 uchar max;
771 bit set1;
772 bit set2;
773 bit set3;
774 bit set4;
775
776 void disp_lbar(uchar num)
777 {
778 1 point p1,p2;
779 1 // uchar i,j;
780 1 p1.y=19;
781 1 p2.y=32;
782 1 if(lbarnum!=num)
783 1 {
784 2 if(lbarnum<num) /*本次数据大于上一次的数据*/
785 2 {
786 3 if(!direction) /*上一次的数据变化方向为下降*/
787 3 {
788 4 p1.x=max+1; /*清除保持的数字*/
789 4 p2.x=max+1+15;
790 4 draw_srec(p1,p2,0);
791 4 if(set4) /*上次数据下降一格的情况*/
792 4 {
793 5 p1.x=max-1;
794 5 p2.x=max-1;
795 5 draw_srec(p1,p2,0);
796 5 set4=0;
797 5 }
798 4 if(set2) /*上次数据下降两格的情况*/
799 4 {
C51 COMPILER V7.07 LCDX1 01/25/2005 13:50:05 PAGE 14
800 5 p1.x=max-1;
801 5 p2.x=max-1;
802 5 draw_srec(p1,p2,0);
803 5 set2=0;
804 5 }
805 4 if(set3) /*上次数据下降三格以上的情况*/
806 4 {
807 5 p1.x=max-2;
808 5 p2.x=max-1;
809 5 draw_srec(p1,p2,0);
810 5 set3=0;
811 5 }
812 4
813 4 }
814 3 p2.x=num-1; /*显示本次数据的条形图*/
815 3 p1.x=lbarnum;
816 3 draw_srec(p1,p2,0xff);
817 3 max=num; /*保存当前的最大值*/
818 3 direction=1; /*标志本次的数据变化方向为上升*/
819 3 }
820 2 else if(lbarnum>num) /*本次数据小于上一次的数据*/
821 2 {
822 3 if(direction) /*上一次数据变化的方向为上升*/
823 3 {
824 4 if(lbarnum-num==1) /*本次数据比上一次数据下降一格*/
825 4 {
826 5 p1.x=num;
827 5 p2.x=lbarnum-1;
828 5 draw_srec(p1,p2,0);
829 5 set1=1;
830 5 }
831 4 else if(lbarnum-num==2) /*本次数据比上一次数据下降两格*/
832 4 {
833 5 p1.x=num;
834 5 p2.x=lbarnum-2;
835 5 draw_srec(p1,p2,0);
836 5 cursor.x=max;
837 5 cursor.y=17;
838 5 transfer(max);
839 5 set2=1;
840 5 }
841 4 else /*本次数据比上一次数据下降三格以上*/
842 4 {
843 5 p1.x=num;
844 5 p2.x=lbarnum-3;
845 5 draw_srec(p1,p2,0);
846 5 cursor.x=max;
847 5 cursor.y=17;
848 5 transfer(max);
849 5 set3=1;
850 5 }
851 4
852 4 }
853 3 else /*上一次数据变化的方向为下降*/
854 3 {
855 4 p1.x=num;
856 4 p2.x=lbarnum-1;
857 4 draw_srec(p1,p2,0);
858 4 if(set1) /*当上一次下降一格而本次仍为下降时显示保持条及数字*/
859 4 {
860 5 p1.x=max-1;
861 5 p2.x=max-1;
C51 COMPILER V7.07 LCDX1 01/25/2005 13:50:05 PAGE 15
862 5 draw_srec(p1,p2,0xff);
863 5 cursor.x=max;
864 5 cursor.y=17;
865 5 transfer(max);
866 5 set1=0;
867 5 set4=1;
868 5 }
869 4 }
870 3 direction=0; /*标志本次数据变化方向为下降*/
871 3 }
872 2 p1.x=lbarnum; /*清除上一次条形图数字*/
873 2 p1.y=34;
874 2 p2.x=lbarnum+15;
875 2 p2.y=40;
876 2 draw_srec(p1,p2,0);
877 2
878 2 cursor.x=num; /*显示本次条形图数字*/
879 2 cursor.y=33;
880 2 transfer(num);
881 2 }
882 1 lbarnum=num; /*存储本次数据*/
883 1 }
884
885 /*标志闪动处理程序(处理电池符号的闪动)*/
886 void flash_func()
887 {
888 1 if(batf==1)
889 1 {
890 2 disp_bat(batnum,sec);
891 2 disp_bat_edge(sec);
892 2 }
893 1 }
894
895 /*定时器0初始化,2ms中断一次*/
896 void init0()
897 {
898 1 TMOD=0x21;
899 1 TH0=-(2000/256);
900 1 TL0=-(2000%256);
901 1 EA=1;
902 1 ET0=1;
903 1 TR0=1;
904 1 }
905
906 /*串口初始化,11.0592晶振,baud rate:9600bps*/
907 void init(void)
908 {
909 1 TMOD=0x21;
910 1 TH1=0xfd;
911 1 TL1=0xfd;
912 1 PCON=0;
913 1 TR1=1;
914 1 SCON=0x50;
915 1 }
916
917 /*定时器0中断程序,sec标志0.5秒翻转一次*/
918 void timer0(void)interrupt 1 using 1
919 {
920 1 TH0=-(2000/256);
921 1 TL0=-(2000%256);
922 1 if(counter==250) {sec=!sec; counter=0;}
923 1 else counter++;
C51 COMPILER V7.07 LCDX1 01/25/2005 13:50:05 PAGE 16
924 1 }
925
926 /*串口接收子程序*/
927 void receive(uchar idata* d)
928 {
929 1 uchar i;
930 1 do
931 1 {
932 2 while(RI==0) {flash_func();}
933 2 RI=0;
934 2 }
935 1 while((SBUF^ASK)!=0);
936 1 SBUF=RESP;
937 1 while(TI==0);TI=0;
938 1 while(1)
939 1 {
940 2 pf=0;
941 2 for(i=0;i<8;i++)
942 2 {
943 3 while(RI==0);RI=0;
944 3 d[i]=SBUF;
945 3 pf+=d[i];
946 3 }
947 2 while(RI==0);
948 2 RI=0;
949 2 if((SBUF^pf)==0)
950 2 {
951 3 SBUF=OK;
952 3 while(TI==0);TI=0;
953 3 break;
954 3 }
955 2 else
956 2 {
957 3 SBUF=ERR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -