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

📄 second.src

📁 这是单片机C51典型应用设计代码
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; 
; 
; void delay(short i)	//延迟子程序,为精确计时,需要用汇编语言来做。R7刚好存的是i的值

	RSEG  ?PR?_delay?SECOND
L?0070:
	USING	0
L?0071:
	CLR  	P0_1
L?0072:
	MOV  	R7,#03H
	MOV  	R6,#00H
_delay:
			; SOURCE LINE # 179
;---- Variable 'i?242' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 180
; short ii;
; ii=i;
			; SOURCE LINE # 182
	MOV  	ii?243,R6
	MOV  	ii?243+01H,R7
; #pragma asm
; X_delay:
	  X_delay:
; 	USING	0
	  USING	0
; 	CLR  	A
	  CLR  	A
; 	MOV  	R4,A
	  MOV  	R4,A
; 	MOV  	R5,A
	  MOV  	R5,A
; XC0025:
	  XC0025:
; 	CLR  	C
	  CLR  	C
; 	MOV  	A,R5
	  MOV  	A,R5
; 	SUBB 	A,R7
	  SUBB 	A,R7
; 	MOV  	A,R6
	  MOV  	A,R6
; 	XRL  	A,#080H
	  XRL  	A,#080H
; 	MOV  	R0,A
	  MOV  	R0,A
; 	MOV  	A,R4
	  MOV  	A,R4
; 	XRL  	A,#080H
	  XRL  	A,#080H
; 	SUBB 	A,R0
	  SUBB 	A,R0
; 	JNC  	XC0028
	  JNC  	XC0028
; 	INC  	R5
	  INC  	R5
; 	CJNE 	R5,#00H,XC0069
	  CJNE 	R5,#00H,XC0069
; 	INC  	R4
	  INC  	R4
; XC0069:
	  XC0069:
; 	SJMP 	XC0025
	  SJMP 	XC0025
; XC0028:
	  XC0028:
; #pragma endasm
; }
			; SOURCE LINE # 207
	RET  	
; END OF _delay

; 
; void display(unsigned char i,unsigned char num)

	RSEG  ?PR?_display?SECOND
_display:
			; SOURCE LINE # 209
;---- Variable 'num?345' assigned to Register 'R5' ----
;---- Variable 'i?344' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 210
; 	if(num >= 0 && num <=9)
			; SOURCE LINE # 211
	MOV  	A,R5
	CLR  	C
	SUBB 	A,#00H
	JC   	?C0035
	MOV  	A,R5
	SETB 	C
	SUBB 	A,#09H
	JNC  	?C0035
; 	{switch(i)
			; SOURCE LINE # 212
	MOV  	A,R7
	DEC  	A
	JZ   	?C0029
	DEC  	A
	JZ   	?C0030
	DEC  	A
	JZ   	?C0031
	DEC  	A
	JZ   	?C0032
	DEC  	A
	JZ   	?C0033
	ADD  	A,#05H
	JNZ  	?C0035
; 	{ case 0:P2= LedSelect0 | num;  
			; SOURCE LINE # 213
?C0028:
	MOV  	A,R5
	ORL  	A,#080H
	MOV  	P2,A
; 	//LedSelect0的高四位为选择第0个数码管的逻辑,低四位则为数码管显示的数字。
; 	break;
			; SOURCE LINE # 215
	RET  	
; 	  case 1:P2= LedSelect1 | num;
			; SOURCE LINE # 216
?C0029:
	MOV  	A,R5
	ORL  	A,#090H
	MOV  	P2,A
; 		  //LedSelect1的高四位为选择第1个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 218
	RET  	
; 	  case 2:P2= LedSelect2 | num;
			; SOURCE LINE # 219
?C0030:
	MOV  	A,R5
	ORL  	A,#0A0H
	MOV  	P2,A
; 		  //LedSelect2的高四位为选择第2个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 221
	RET  	
; 	  case 3:P2= LedSelect3 | num;
			; SOURCE LINE # 222
?C0031:
	MOV  	A,R5
	ORL  	A,#0B0H
	MOV  	P2,A
; 		  //LedSelect3的高四位为选择第3个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 224
	RET  	
; 	  case 4:P2= LedSelect4 | num;
			; SOURCE LINE # 225
?C0032:
	MOV  	A,R5
	ORL  	A,#0C0H
	MOV  	P2,A
; 		  //LedSelect4的高四位为选择第4个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 227
	RET  	
; 	  case 5:P2= LedSelect5 | num;
			; SOURCE LINE # 228
?C0033:
	MOV  	A,R5
	ORL  	A,#0D0H
	MOV  	P2,A
; 		  //LedSelect5的高四位为选择第5个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 230
; 	  default:break;
			; SOURCE LINE # 231
; 	}
			; SOURCE LINE # 232
; 	}
			; SOURCE LINE # 233
; }
			; SOURCE LINE # 234
?C0035:
	RET  	
; END OF _display

; 
; unsigned char keyscan()

	RSEG  ?PR?keyscan?SECOND
keyscan:
	USING	0
			; SOURCE LINE # 236
; {
			; SOURCE LINE # 237
; 	PinDrvKey1=TRUE;
			; SOURCE LINE # 238
	SETB 	P1_0
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 239
	JNB  	P1_4,?C0036
; 		PinLamp=FALSE;
			; SOURCE LINE # 240
	CLR  	P0_0
?C0036:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 241
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 242
	LCALL	L?0071
; 	PinLamp=TRUE;
			; SOURCE LINE # 243
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 244
	SETB 	P0_1
; 	return 1;
			; SOURCE LINE # 245
	MOV  	R7,#01H
	RET  	
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 246
; 		PinLamp=FALSE;
			; SOURCE LINE # 247
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 5;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 253
; 		PinLamp=FALSE;
			; SOURCE LINE # 254
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 9;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 260
; 		PinLamp=FALSE;
			; SOURCE LINE # 261
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 12;
; 	PinDrvKey1=FALSE;	//扫描第一列
			; SOURCE LINE # 267
; 	PinDrvKey2=TRUE;
			; SOURCE LINE # 268
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 269
; 		PinLamp=FALSE;
			; SOURCE LINE # 270
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 2;
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 276
; 		PinLamp=FALSE;
			; SOURCE LINE # 277
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 6;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 283
; 		PinLamp=FALSE;
			; SOURCE LINE # 284
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 0;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 290
; 		PinLamp=FALSE;
			; SOURCE LINE # 291
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 13;
; 	PinDrvKey2=FALSE;	//扫描第二列
			; SOURCE LINE # 297
; 	PinDrvKey3=TRUE;
			; SOURCE LINE # 298
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 299
; 		PinLamp=FALSE;
			; SOURCE LINE # 300
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 3;
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 306
; 		PinLamp=FALSE;
			; SOURCE LINE # 307
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 7;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 313
; 		PinLamp=FALSE;
			; SOURCE LINE # 314
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 10;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 320
; 		PinLamp=FALSE;
			; SOURCE LINE # 321
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 14;
; 	PinDrvKey3=FALSE;	//扫描第三列
			; SOURCE LINE # 327
; 	PinDrvKey4=TRUE;
			; SOURCE LINE # 328
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 329
; 		PinLamp=FALSE;
			; SOURCE LINE # 330
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 4;
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 336
; 		PinLamp=FALSE;
			; SOURCE LINE # 337
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 8;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 343
; 		PinLamp=FALSE;
			; SOURCE LINE # 344
; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 11;
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 350
; 		PinLamp=FALSE;
			; SOURCE LINE # 351
; END OF keyscan

; 	PinSpeaker=FALSE;
; 	delay(DELAY_VALUE);
; 	PinLamp=TRUE;
; 	PinSpeaker=TRUE;
; 	return 15;
; 	PinDrvKey3=FALSE;	//扫描第四列
; 	return 16;
; }
; 
; void updatee()

	RSEG  ?PR?updatee?SECOND
updatee:
	USING	0
			; SOURCE LINE # 361
; {
			; SOURCE LINE # 362
; 	if(s00==9)	//如果10ms位需要进位,则进入语句
			; SOURCE LINE # 363
	MOV  	A,s00
	XRL  	A,#09H
	JNZ  	?C0053
; 	{
			; SOURCE LINE # 364
; 		s00=0;
			; SOURCE LINE # 365
	MOV  	s00,A
; 		if(s01==9)	//如果100ms位需要进位,则进入语句
			; SOURCE LINE # 366
	MOV  	A,s01
	XRL  	A,#09H
	JNZ  	?C0054
; 		{
			; SOURCE LINE # 367
; 			s01=0;
			; SOURCE LINE # 368
	MOV  	s01,A
; 			if(s0==9)	//如果1sec位需要进位,则进入语句
			; SOURCE LINE # 369
	MOV  	A,s0
	XRL  	A,#09H
	JNZ  	?C0055
; 			{
			; SOURCE LINE # 370
; 				s0=0;
			; SOURCE LINE # 371
	MOV  	s0,A
; 				if(s1==5)	//如果10sec位需要进位,则进入语句
			; SOURCE LINE # 372
	MOV  	A,s1
	CJNE 	A,#05H,?C0056
; 				{
			; SOURCE LINE # 373
; 					s1=0;
			; SOURCE LINE # 374
	CLR  	A
	MOV  	s1,A
; 					if(m0==9)
			; SOURCE LINE # 375
	MOV  	A,m0
	CJNE 	A,#09H,?C0057
; 					{m0=0;
			; SOURCE LINE # 376
	CLR  	A
	MOV  	m0,A
; 					if(m1==5)m1=0;
			; SOURCE LINE # 377
	MOV  	A,m1
	CJNE 	A,#05H,?C0058
	CLR  	A
	MOV  	m1,A
	SJMP 	?C0064
?C0058:
; 					else m1+=1;
			; SOURCE LINE # 378
	INC  	m1
; 					}
			; SOURCE LINE # 379
	SJMP 	?C0064
?C0057:
; 					else m0+=1;
			; SOURCE LINE # 380
	INC  	m0
; 				}
			; SOURCE LINE # 381
	SJMP 	?C0064
?C0056:
; 				else s1+=1;
			; SOURCE LINE # 382
	INC  	s1
; 			}
			; SOURCE LINE # 383
	SJMP 	?C0064
?C0055:
; 			else s0+=1;
			; SOURCE LINE # 384
	INC  	s0
; 		}
			; SOURCE LINE # 385
	SJMP 	?C0064
?C0054:
; 		else s01+=1;
			; SOURCE LINE # 386
	INC  	s01
; 	}
			; SOURCE LINE # 387
	SJMP 	?C0064
?C0053:
; 	else s00+=1;
			; SOURCE LINE # 388
	INC  	s00
?C0064:
; 	display(0,s00);
			; SOURCE LINE # 389
	MOV  	R5,s00
	CLR  	A
	MOV  	R7,A
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 390
	LCALL	L?0072
; 	display(1,s01);
			; SOURCE LINE # 391
	MOV  	R5,s01
	MOV  	R7,#01H
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 392
	MOV  	R7,#03H
	LCALL	_delay
; 	display(2,s0);
			; SOURCE LINE # 393
	MOV  	R5,s0
	DEC  	R7
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 394
	INC  	R7
	LCALL	_delay
; 	display(3,s1);
			; SOURCE LINE # 395
	MOV  	R5,s1
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 396
	LCALL	_delay
; 	display(4,m0);
			; SOURCE LINE # 397
	MOV  	R5,m0
	INC  	R7
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 398
	DEC  	R7
	LCALL	_delay
; 	display(5,m1);
			; SOURCE LINE # 399
	MOV  	R5,m1
	MOV  	R7,#05H
	LCALL	_display
; 	delay(DELAY_VALUE); //以上语句则在数码管上显示各个数字
			; SOURCE LINE # 400
	MOV  	R7,#03H
	LJMP 	_delay
; END OF updatee

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -