📄 calculator.src
字号:
LCALL ?C?SLDIV
MOV dt1?042+03H,R7
MOV dt1?042+02H,R6
MOV dt1?042+01H,R5
MOV dt1?042,R4
; display(Li,Ln); //显示输入的数字
; SOURCE LINE # 122
MOV R5,Ln?041
MOV R7,Li?040
LCALL _display
; if(dt1==0)break;
; SOURCE LINE # 123
CLR A
MOV R7,A
MOV R6,A
MOV R5,A
MOV R4,A
MOV R3,dt1?042+03H
MOV R2,dt1?042+02H
MOV R1,dt1?042+01H
MOV R0,dt1?042
CLR C
LCALL ?C?SLCMP
JNZ $ + 5H
LJMP ?C0001
; }
; SOURCE LINE # 124
?C0026:
INC Li?040
SJMP ?C0024
; END OF main
; }
; }
;
;
; void initial(void)
RSEG ?PR?initial?CALCULATOR
initial:
; SOURCE LINE # 129
; {
; SOURCE LINE # 130
; P0_0=FALSE;
; SOURCE LINE # 131
CLR P0_0
; P0_1=FALSE;
; SOURCE LINE # 132
CLR P0_1
; P0_2=FALSE;
; SOURCE LINE # 133
CLR P0_2
; P0_3=FALSE; //键盘驱动信号都设为低
; SOURCE LINE # 134
CLR P0_3
;
; }
; SOURCE LINE # 136
RET
; END OF initial
;
; unsigned char keyscan()
RSEG ?PR?keyscan?CALCULATOR
keyscan:
USING 0
; SOURCE LINE # 138
; {
; SOURCE LINE # 139
; RD=TRUE;
; SOURCE LINE # 140
SETB RD
; PinDrvKey1=TRUE;
; SOURCE LINE # 141
SETB P0_0
; if(PinScanKey1==TRUE)
; SOURCE LINE # 142
JNB P0_4,?C0030
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 143
LCALL L?0097
?C0030:
; if(PinScanKey1==TRUE)
; SOURCE LINE # 144
JNB P0_4,?C0031
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 145
LCALL L?0097
; if(PinScanKey1==TRUE)
; SOURCE LINE # 146
JNB P0_4,?C0031
; return 1;} //确认确实有按键信号,返回键值
; SOURCE LINE # 147
MOV R7,#01H
RET
?C0031:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 148
JNB P0_5,?C0034
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 149
LCALL L?0098
?C0034:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 150
JNB P0_5,?C0035
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 151
LCALL L?0098
; if(PinScanKey2==TRUE)
; SOURCE LINE # 152
JNB P0_5,?C0035
; return 2;} //确认确实有按键信号,返回键值
; SOURCE LINE # 153
MOV R7,#02H
RET
?C0035:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 154
JNB P0_6,?C0037
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 155
LCALL L?0098
?C0037:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 156
JNB P0_6,?C0038
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 157
LCALL L?0098
; if(PinScanKey3==TRUE)
; SOURCE LINE # 158
JNB P0_6,?C0038
; return 3;} //确认确实有按键信号,返回键值
; SOURCE LINE # 159
MOV R7,#03H
RET
?C0038:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 160
JNB P0_7,?C0040
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 161
LCALL L?0098
?C0040:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 162
JNB P0_5,?C0041
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 163
LCALL L?0098
; if(PinScanKey2==TRUE)
; SOURCE LINE # 164
JNB P0_5,?C0041
; return 10;} //确认确实有按键信号,返回键值
; SOURCE LINE # 165
MOV R7,#0AH
RET
?C0041:
; PinDrvKey1=FALSE; //以上语句扫描第一列
; SOURCE LINE # 166
CLR P0_0
;
; PinDrvKey2=TRUE;
; SOURCE LINE # 168
SETB P0_1
; if(PinScanKey1==TRUE)
; SOURCE LINE # 169
JNB P0_4,?C0043
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 170
LCALL L?0098
?C0043:
; if(PinScanKey1==TRUE)
; SOURCE LINE # 171
JNB P0_4,?C0044
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 172
LCALL L?0098
; if(PinScanKey1==TRUE)
; SOURCE LINE # 173
JNB P0_4,?C0044
; return 4;} //确认确实有按键信号,返回键值
; SOURCE LINE # 174
MOV R7,#04H
RET
?C0044:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 175
JNB P0_5,?C0046
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 176
LCALL L?0098
?C0046:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 177
JNB P0_5,?C0047
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 178
LCALL L?0098
; if(PinScanKey2==TRUE)
; SOURCE LINE # 179
JNB P0_5,?C0047
; return 5;} //确认确实有按键信号,返回键值
; SOURCE LINE # 180
MOV R7,#05H
RET
?C0047:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 181
JNB P0_6,?C0049
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 182
LCALL L?0098
?C0049:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 183
JNB P0_6,?C0050
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 184
LCALL L?0098
; if(PinScanKey3==TRUE)
; SOURCE LINE # 185
JNB P0_6,?C0050
; return 6;} //确认确实有按键信号,返回键值
; SOURCE LINE # 186
MOV R7,#06H
RET
?C0050:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 187
JNB P0_7,?C0052
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 188
LCALL L?0098
?C0052:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 189
JNB P0_7,?C0053
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 190
LCALL L?0098
; if(PinScanKey4==TRUE)
; SOURCE LINE # 191
JNB P0_7,?C0053
; return 11;} //确认确实有按键信号,返回键值
; SOURCE LINE # 192
MOV R7,#0BH
RET
?C0053:
; PinDrvKey2=FALSE; //以上语句扫描第二列
; SOURCE LINE # 193
CLR P0_1
;
; PinDrvKey3=TRUE;
; SOURCE LINE # 195
SETB P0_2
; if(PinScanKey1==TRUE)
; SOURCE LINE # 196
JNB P0_4,?C0055
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 197
LCALL L?0098
?C0055:
; if(PinScanKey1==TRUE)
; SOURCE LINE # 198
JNB P0_4,?C0056
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 199
LCALL L?0098
; if(PinScanKey1==TRUE)
; SOURCE LINE # 200
JNB P0_4,?C0056
; return 7;} //确认确实有按键信号,返回键值
; SOURCE LINE # 201
MOV R7,#07H
RET
?C0056:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 202
JNB P0_5,?C0058
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 203
LCALL L?0098
?C0058:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 204
JNB P0_5,?C0059
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 205
LCALL L?0098
; if(PinScanKey2==TRUE)
; SOURCE LINE # 206
JNB P0_5,?C0059
; return 8;} //确认确实有按键信号,返回键值
; SOURCE LINE # 207
MOV R7,#08H
RET
?C0059:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 208
JNB P0_6,?C0061
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 209
LCALL L?0098
?C0061:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 210
JNB P0_6,?C0062
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 211
LCALL L?0098
; if(PinScanKey3==TRUE)
; SOURCE LINE # 212
JNB P0_6,?C0062
; return 9;} //确认确实有按键信号,返回键值
; SOURCE LINE # 213
MOV R7,#09H
RET
?C0062:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 214
JNB P0_7,?C0064
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 215
LCALL L?0098
?C0064:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 216
JNB P0_7,?C0065
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 217
LCALL L?0098
; if(PinScanKey4==TRUE)
; SOURCE LINE # 218
JNB P0_7,?C0065
; return 12;} //确认确实有按键信号,返回键值
; SOURCE LINE # 219
MOV R7,#0CH
RET
?C0065:
; PinDrvKey3=FALSE; //以上语句扫描第三列
; SOURCE LINE # 220
CLR P0_2
;
; PinDrvKey4=TRUE;
; SOURCE LINE # 222
SETB P0_3
; if(PinScanKey4==TRUE)
; SOURCE LINE # 223
JNB P0_7,?C0067
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 224
LCALL L?0098
?C0067:
; if(PinScanKey1==TRUE)
; SOURCE LINE # 225
JNB P0_4,?C0068
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 226
LCALL L?0098
; if(PinScanKey1==TRUE)
; SOURCE LINE # 227
JNB P0_4,?C0068
; return 0;} //确认确实有按键信号,返回键值
; SOURCE LINE # 228
MOV R7,#00H
RET
?C0068:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 229
JNB P0_5,?C0070
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 230
LCALL L?0098
?C0070:
; if(PinScanKey2==TRUE)
; SOURCE LINE # 231
JNB P0_5,?C0071
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 232
LCALL L?0098
; if(PinScanKey2==TRUE)
; SOURCE LINE # 233
JNB P0_5,?C0071
; return 14;} //确认确实有按键信号,返回键值
; SOURCE LINE # 234
MOV R7,#0EH
RET
?C0071:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 235
JNB P0_6,?C0073
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 236
LCALL L?0098
?C0073:
; if(PinScanKey3==TRUE)
; SOURCE LINE # 237
JNB P0_6,?C0074
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 238
LCALL L?0098
; if(PinScanKey3==TRUE)
; SOURCE LINE # 239
JNB P0_6,?C0074
; return 14;} //确认确实有按键信号,返回键值
; SOURCE LINE # 240
MOV R7,#0EH
RET
?C0074:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 241
JNB P0_7,?C0076
; delay(DELAY_VALUE); //如果判断有信号,则延时一次
; SOURCE LINE # 242
LCALL L?0098
?C0076:
; if(PinScanKey4==TRUE)
; SOURCE LINE # 243
JNB P0_7,?C0077
; { delay(DELAY_VALUE); //假如判断还有信号,则再延时
; SOURCE LINE # 244
LCALL L?0098
; if(PinScanKey4==TRUE)
; SOURCE LINE # 245
JNB P0_7,?C0077
; return 13;} //假如判断还有信号,则再延时
; SOURCE LINE # 246
MOV R7,#0DH
RET
?C0077:
; PinDrvKey3=FALSE; //以上语句扫描第四列
; SOURCE LINE # 247
CLR P0_2
; RD=FALSE;
; SOURCE LINE # 248
CLR RD
; }
; SOURCE LINE # 249
?C0033:
RET
; END OF keyscan
;
;
; void display(unsigned char i,unsigned char num)
RSEG ?PR?_display?CALCULATOR
_display:
USING 0
;---- Variable 'i?347' assigned to Register 'R7' ----
;---- Variable 'num?348' assigned to Register 'R5' ----
; SOURCE LINE # 252
; { WR=TRUE;
; SOURCE LINE # 253
SETB WR
; if(num >= 0 && num <=9)
; SOURCE LINE # 254
MOV A,R5
CLR C
SUBB A,#00H
JC ?C0090
MOV A,R5
SETB C
SUBB A,#09H
JNC ?C0090
; {switch(i)
; SOURCE LINE # 255
MOV A,R7
CJNE A,#08H,?C0094
?C0094:
JNC ?C0090
MOV DPTR,#?C0095
MOV R0,A
ADD A,R0
ADD A,R0
JMP @A+DPTR
?C0095:
LJMP ?C0081
LJMP ?C0082
LJMP ?C0083
LJMP ?C0084
LJMP ?C0085
LJMP ?C0086
LJMP ?C0087
LJMP ?C0088
; { case 0:P1= LedSelect0 | num;
; SOURCE LINE # 256
?C0081:
MOV A,R5
ORL A,#080H
MOV P1,A
; //LedSelect0的高四位为选择第0个数码管的逻辑,低四位则为数码管显示的数字。
; break;
; SOURCE LINE # 258
RET
; case 1:P1= LedSelect1 | num;
; SOURCE LINE # 259
?C0082:
MOV A,R5
ORL A,#090H
MOV P1,A
; //LedSelect1的高四位为选择第1个数码管的逻辑,低四位则为数码管显示的数字。
; break;
; SOURCE LINE # 261
RET
; case 2:P1= LedSelect2 | num;
; SOURCE LINE # 262
?C0083:
MOV A,R5
ORL A,#0A0H
MOV P1,A
; //LedSelect2的高四位为选择第2个数码管的逻辑,低四位则为数码管显示的数字。
; break;
; SOURCE LINE # 264
RET
; case 3:P1= LedSelect3 | num;
; SOURCE LINE # 265
?C0084:
MOV A,R5
ORL A,#0B0H
MOV P1,A
; //LedSelect3的高四位为选择第3个数码管的逻辑,低四位则为数码管显示的数字。
; break;
; SOURCE LINE # 267
RET
; case 4:P1= LedSelect4 | num;
; SOURCE LINE # 268
?C0085:
MOV A,R5
ORL A,#0C0H
MOV P1,A
; //LedSelect4的高四位为选择第4个数码管的逻辑,低四位则为数码管显示的数字。
; break;
; SOURCE LINE # 270
RET
; case 5:P1= LedSelect5 | num;
; SOURCE LINE # 271
?C0086:
MOV A,R5
ORL A,#0D0H
MOV P1,A
; //LedSelect5的高四位为选择第5个数码管的逻辑,低四位则为数码管显示的数字。
; break;
; SOURCE LINE # 273
RET
; case 6:P1= LedSelect6 | num;
; SOURCE LINE # 274
?C0087:
MOV A,R5
ORL A,#0E0H
MOV P1,A
; //LedSelect6的高四位为选择6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -