⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.src

📁 用单片机系统实现8位的加减乘除运算
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	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 + -