📄 windows.lst
字号:
949 1 x=len/2;
950 1 if(len%2)
951 1 {
952 2 bcd[0]=str[0] & 0x0f;
953 2 i=1;
954 2 j=1;
955 2 x++;
956 2 }
957 1 else
958 1 {
959 2 j=0;
960 2 i=0;
961 2 }
962 1 for(;i<x;i++)
963 1 {
964 2 bcd[i] = str[j++];
965 2 bcd[i] <<=4;
966 2 bcd[i] |= (str[j++] & 0x0F);
967 2 // bcd[i] = ((str[j++]<<4) | (str[j++] & 0x0f));
968 2 }
969 1 bcd[i]=0;
970 1 }
971
972 uchar GetBcd(uchar row, uchar col, uchar *bcd,uchar len,uchar *key)
973 {// Ln:BCD显示的行坐标;Col:BCD显示的列坐标;Len:输入BCD的长度;
974 1 uchar i,j,val,k,disparr[28],tp[28];
975 1 uchar lastposition = 0;
976 1 bit x=0,zero=0,win;
977 1
978 1 memset(disparr,0,sizeof(disparr));
979 1 memset(tp,0,sizeof(tp));
980 1 win=0;
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 17
981 1 if(len&0x80)win=1;
982 1 len &= 0x7F;
983 1 if(len>20) len = 20; //最大输入长度
984 1 j=len/2;
985 1 if(len%2)j++;
986 1 BcdToStr(j,bcd,disparr,0);
987 1 lastposition = strlen(disparr);
988 1 k=strlen(key);
989 1 while(1)
990 1 {
991 2 VfdDisplayInt(disparr,len,0);
992 2 LcdDisplay(row, col, disparr, 0); //显示数字
993 2 val = ScanNumber(row,col+lastposition*8,'_',4);
994 2 if(val<=16)
995 2 {
996 3 if(lastposition<len)
997 3 {
998 4 if(val == 16)
999 4 {
1000 5 disparr[lastposition++] = '0';
1001 5 if(lastposition<len)
1002 5 disparr[lastposition++] = '0';
1003 5 }
1004 4 else
1005 4 {
1006 5 if(val<10)
1007 5 disparr[lastposition++] = val + '0';
1008 5 else
1009 5 disparr[lastposition++] = val-10+'A';
1010 5 }
1011 4 disparr[lastposition] = 0;
1012 4 }
1013 3 }
1014 2 else
1015 2 {
1016 3 // val&=0x7f;
1017 3 switch(val)
1018 3 {
1019 4 case K_LEFT:
1020 4 case K_RIGHT:
1021 4 case K_UP:
1022 4 case K_DOWN: if(win)
1023 4 {
1024 5 x=1;
1025 5 break;
1026 5 }
1027 4 continue;
1028 4 case K_QC:
1029 4 if(lastposition>0)
1030 4 {
1031 5 for(i=0;i<j;i++)bcd[i]=0;
1032 5 disparr[0] = 0;
1033 5 lastposition = 0;
1034 5 for(i=0;i<=len;i++)tp[i]=' ';
1035 5 tp[i]=0;
1036 5 LcdDisplay(row,col,tp,0);
1037 5 }
1038 4 else
1039 4 if(win)x=1;
1040 4 break;
1041 4
1042 4 case K_LJ: LcdDisplay(row,col+lastposition*8," ",0);
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 18
1043 4 if(lastposition>0)
1044 4 {
1045 5 disparr[--lastposition] = 0;
1046 5 }
1047 4 else
1048 4 if(win)x=1;
1049 4 break;
1050 4
1051 4 case K_TC:
1052 4 case K_HJ: x=1;
1053 4 break;
1054 4
1055 4 default:
1056 4 for(i=0;i<k;i++)
1057 4 {
1058 5 if(val==key[i])
1059 5 {
1060 6 x=1;
1061 6 break;
1062 6 }
1063 5 }
1064 4 break;
1065 4 }
1066 3 if(x==1)
1067 3 {
1068 4 StrToBcd(len,disparr,bcd);
1069 4 LcdDisplay(row,col+lastposition*8," ",0);
1070 4 VfdClear();
1071 4 key[0]=val;
1072 4 return val;
1073 4 }
1074 3 }
1075 2 }
1076 1 }
1077
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 19
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Com017C (BEGIN)
0000 L?0381:
0000 L?0382:
0000 900000 R MOV DPTR,#i
0003 L?0383:
0003 E0 MOVX A,@DPTR
0004 L?0384:
0004 75F01A MOV B,#01AH
0007 A4 MUL AB
0008 2400 E ADD A,#LOW WinDat+02H
000A F9 MOV R1,A
000B 7400 E MOV A,#HIGH WinDat+02H
000D 35F0 ADDC A,B
000F FA MOV R2,A
0010 7B01 MOV R3,#01H
0012 22 RET
0013 L?0385:
0013 7A00 R MOV R2,#HIGH ?SC_0
0015 7900 R MOV R1,#LOW ?SC_0
0017 L?0386:
0017 900000 R MOV DPTR,#row
001A E0 MOVX A,@DPTR
001B FF MOV R7,A
001C 900000 R MOV DPTR,#lastposition
001F E0 MOVX A,@DPTR
0020 75F008 MOV B,#08H
0023 A4 MUL AB
0024 FE MOV R6,A
0025 900000 R MOV DPTR,#col
0028 E0 MOVX A,@DPTR
0029 2E ADD A,R6
002A FD MOV R5,A
002B 7BFF MOV R3,#0FFH
002D E4 CLR A
002E 900000 E MOV DPTR,#?_LcdDisplay?BYTE+05H
0031 F0 MOVX @DPTR,A
0032 22 RET
0033 L?0387:
0033 900000 R MOV DPTR,#str
0036 L?0388:
0036 120000 E LCALL ?C?PLDXDATA
0039 8E82 MOV DPL,R6
003B L?0389:
003B 758300 MOV DPH,#00H
003E 020000 E LJMP ?C?CLDOPTR
0041 L?0390:
0041 900000 R MOV DPTR,#k
0044 L?0391:
0044 E0 MOVX A,@DPTR
0045 FE MOV R6,A
0046 L?0392:
0046 900000 E MOV DPTR,#WinDat+01H
0049 L?0393:
0049 75F01A MOV B,#01AH
004C 120000 E LCALL ?C?OFFXADD
004F E0 MOVX A,@DPTR
0050 22 RET
0051 L?0394:
0051 900000 R MOV DPTR,#row
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 20
0054 E0 MOVX A,@DPTR
0055 FF MOV R7,A
0056 900000 R MOV DPTR,#lastposition
0059 E0 MOVX A,@DPTR
005A 75F008 MOV B,#08H
005D A4 MUL AB
005E FE MOV R6,A
005F 900000 R MOV DPTR,#col
0062 E0 MOVX A,@DPTR
0063 2E ADD A,R6
0064 FD MOV R5,A
0065 7BFF MOV R3,#0FFH
0067 E4 CLR A
0068 900000 E MOV DPTR,#?_LcdDisplay?BYTE+05H
006B F0 MOVX @DPTR,A
006C 22 RET
006D L?0395:
006D L?0396:
006D 900000 R MOV DPTR,#lastposition
0070 L?0397:
0070 E0 MOVX A,@DPTR
0071 2400 R ADD A,#LOW disparr
0073 L?0398:
0073 F582 MOV DPL,A
0075 E4 CLR A
0076 3400 R ADDC A,#HIGH disparr
0078 F583 MOV DPH,A
007A 22 RET
007B L?0399:
007B 900000 R MOV DPTR,#row
007E E0 MOVX A,@DPTR
007F FF MOV R7,A
0080 A3 INC DPTR
0081 E0 MOVX A,@DPTR
0082 FD MOV R5,A
0083 7B01 MOV R3,#01H
0085 E4 CLR A
0086 900000 E MOV DPTR,#?_LcdDisplay?BYTE+05H
0089 F0 MOVX @DPTR,A
008A 22 RET
008B L?0400:
008B L?0401:
008B 900000 R MOV DPTR,#xp
008E 120000 E LCALL ?C?PSTXDATA
0091 120000 E LCALL ?C?LLDPTR
0094 900000 R
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -