📄 windows.lst
字号:
709 6 if(lastposition<len)
710 6 {
711 7 disparr[lastposition++] = '0';
712 7 dotlen--;
713 7 }
714 6 }
715 5 else disparr[lastposition++] = val + '0';
716 5 disparr[lastposition] = 0;
717 5 }
718 4 }
719 3 continue;
720 3 }
721 2
722 2 {
723 3 // val&=0x7F;
724 3 switch(val)
725 3 {
726 4 case K_LEFT:
727 4 case K_RIGHT:
728 4 case K_UP:
729 4 case K_DOWN: if(win)
730 4 {
731 5 x=1;
732 5 break;
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 13
733 5 }
734 4 continue;
735 4
736 4 case K_DOT: if(dot==1 || zero==0)continue;
737 4 if(lastposition<len)
738 4 {
739 5 disparr[lastposition++] ='.';
740 5 disparr[lastposition] = 0;
741 5 dot=1;
742 5 dotlen=2; //小数点后只能输入两位数字
743 5 }
744 4 break;
745 4
746 4 case K_QC: disparr[0] = 0;
747 4 lastposition = 0;
748 4 dot=0;
749 4 dotlen=0xFF;
750 4 zero=0;
751 4 for(i=0;i<=len;i++)tp[i]=' ';
752 4 tp[i]=0;
753 4 LcdDisplay(row,col,tp,0);
754 4 break;
755 4
756 4 case K_LJ: LcdDisplay(row,col+lastposition*8," ",0);
757 4 if(lastposition>0)
758 4 {
759 5 lastposition--;
760 5 if(lastposition==0)
761 5 {
762 6 zero=0;
763 6 }
764 5 if(disparr[lastposition]=='.')
765 5 {
766 6 dot=0;
767 6 dotlen=0xFF;
768 6 }
769 5 if(dot==1)dotlen++;
770 5 disparr[lastposition] = 0;
771 5 }
772 4 break;
773 4
774 4 // case K_TC:
775 4 case K_HJ: x=1;
776 4 break;
777 4
778 4 default: i=0;
779 4 while(key[i]!=0)
780 4 {
781 5 if(val==key[i])
782 5 {
783 6 x=1;
784 6 break;
785 6 }
786 5 i++;
787 5 }
788 4 break;;
789 4 }
790 3 if(x==1)
791 3 {
792 4 key[0] = val ;
793 4 i=0;
794 4 while(disparr[i]!=0)
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 14
795 4 {
796 5 if(disparr[i]!='.')
797 5 {
798 6 returnvalue=(ulong)returnvalue*10L+(ulong)disparr[i]-'0';
799 6 }
800 5 else
801 5 {
802 6 disparr[i+3] = 0; //只要两位小数
803 6 if(disparr[i+1]==0) disparr[i+1] = '0';
804 6 if(disparr[i+2]==0) disparr[i+2] = '0';
805 6 }
806 5 i++;
807 5 }
808 4 if(disparr[i-3]!='.') returnvalue *=100; //没有按小数点则*100
809 4 LcdDisplay(row,col+lastposition*8," ",0); //清除光标
810 4 VfdClear();
811 4 return returnvalue;
812 4 }
813 3 }
814 2 }
815 1 }
816
817 //返回输入的整数值
818 //row 整数显示的行坐标 col 整数显示的列坐标 dat 显示初始值
819 //len:输入数据最大允许长度
820 //key[]:返回时存放按键扫描码,keyvalue数组长度至少1字节
821 //存放有效按键的值,当输入键值与keyvalue数组中任意一位相等时退出
822 ulong GetInt(uchar row, uchar col, ulong dat, uchar len,uchar flg,uchar *key)
823 {
824 1 uchar i, val, k,disparr[26],tp[25];
825 1 uchar lastposition = 0;
826 1 ulong returnvalue=0;
827 1 bit x=0,zero=0,win;
828 1
829 1 win=0;
830 1 if(len&0x80)win=1;
831 1 len &= 0x7F;
832 1 if(len>24) len = 24; //输入数据最大允许长度
833 1 disparr[0]=0;
834 1 // if(dat!=0)
835 1 // {
836 1 NumToStr(dat,disparr,0);
837 1 // LcdDisNum(row, col, disparr, flg);
838 1 // }
839 1 lastposition = strlen(disparr);
840 1 k=strlen(key);
841 1 // VfdDisplayInt(disparr,len,flg);
842 1 while(1)
843 1 {
844 2 LcdDisNum(row, col, disparr, flg); //显示数字
845 2 VfdDisplayInt(disparr,len,flg);
846 2 val = ScanNumber(row,col+lastposition*8,'_',1);
847 2 if(RxdFlg==1)
848 2 {
849 3 key[0] = 0;
850 3 RxdFlg=0;
851 3 IEA &= 0xef;
852 3 LcdDisplay(row,col+lastposition*8," ",0);//清除光标
853 3 VfdClear();
854 3 return 0;
855 3 }
856 2 if(val>=0x0A && val<=0x0F)continue;
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 15
857 2 if(val<10 || val==16)
858 2 {
859 3 if(zero==0 && (val==0 || val==16))continue;
860 3 zero=1;
861 3 if(lastposition<len)
862 3 {
863 4 if(val == 16)
864 4 {
865 5 disparr[lastposition++] = '0';
866 5 if(lastposition<len)
867 5 disparr[lastposition++] = '0';
868 5 }
869 4 else disparr[lastposition++] = val + '0';
870 4 disparr[lastposition] = 0;
871 4 }
872 3 }
873 2 else
874 2 {
875 3 // val&=0x7f;
876 3 switch(val)
877 3 {
878 4 case K_LEFT:
879 4 case K_RIGHT:
880 4 case K_UP:
881 4 case K_DOWN:if(win)
882 4 {
883 5 x=1;
884 5 break;
885 5 }
886 4 continue;
887 4
888 4 case K_QC: disparr[0] = 0;
889 4 zero=0;
890 4 lastposition = 0;
891 4 for(i=0;i<=len;i++)tp[i]=' ';
892 4 tp[i]=0;
893 4 LcdDisplay(row,col,tp,0);
894 4 break;
895 4
896 4 case K_LJ: LcdDisplay(row,col+lastposition*8," ",0);
897 4 if(lastposition>0)
898 4 {
899 5 disparr[--lastposition] = 0;
900 5 }
901 4 break;
902 4
903 4 // case K_TC:
904 4 case K_HJ: x=1;
905 4 break;
906 4
907 4 default:
908 4 for(i=0;i<k;i++)
909 4 {
910 5 if(val==key[i])
911 5 {
912 6 x=1;
913 6 break;
914 6 }
915 5 }
916 4 if(x!=1)continue;
917 4 }
918 3 if(x==1)
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 16
919 3 {
920 4 key[0] = val;
921 4 i=0;
922 4 while(disparr[i]!=0)
923 4 {
924 5 returnvalue=(ulong)returnvalue*10L+(ulong)disparr[i]-'0';
925 5 i++;
926 5 }
927 4 LcdDisplay(row,col+lastposition*8," ",0);//清除光标
928 4 VfdClear();
929 4 return returnvalue;
930 4 }
931 3 }
932 2 }
933 1 }
934
935 //-------------------------------------------------------
936 // ASCII转换为BCD码
937 //-------------------------------------------------------
938 void StrToBcd(uchar len,uchar *str,uchar *bcd)
939 {//如果str长度是奇数,最高位补0
940 1 uchar i,j,x;
941 1
942 1 j=strlen(str);
943 1 for(i=0;i<j;i++)
944 1 {
945 2 if(str[i]>'9')str[i]=str[i]-'A'+10;
946 2 else str[i]-='0';
947 2 }
948 1 if(len>j)len=j;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -