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

📄 hour.src

📁 8051编程实例完全手册中的全部程序。相信能给大家带来很多方便
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; 
; void initial(void)

	RSEG  ?PR?initial?HOUR
initial:
			; SOURCE LINE # 205
; {
			; SOURCE LINE # 206
; 	P1_0=FALSE;
			; SOURCE LINE # 207
	CLR  	P1_0
; 	P1_1=FALSE;
			; SOURCE LINE # 208
	CLR  	P1_1
; 	P1_2=FALSE;
			; SOURCE LINE # 209
	CLR  	P1_2
; 	P1_3=FALSE;			//键盘驱动信号都设为低,避免干扰。  
			; SOURCE LINE # 210
	CLR  	P1_3
; 	P0_0=TRUE;			//发光二极管设为不亮
			; SOURCE LINE # 211
	SETB 	P0_0
; 	P0_1=TRUE;			//蜂鸣器不响
			; SOURCE LINE # 212
	SETB 	P0_1
; }
			; SOURCE LINE # 213
	RET  	
; END OF initial

; 
; void delay(short i)	//延迟子程序,为精确计时,需要用汇编语言来做。R6R7刚好存的是i的值

	RSEG  ?PR?_delay?HOUR
L?0081:
	USING	0
L?0082:
	CLR  	P0_1
L?0083:
	MOV  	R7,#03H
	MOV  	R6,#00H
_delay:
			; SOURCE LINE # 215
;---- Variable 'i?242' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 216
; short ii;
; ii=i;
			; SOURCE LINE # 218
	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 # 243
	RET  	
; END OF _delay

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

	RSEG  ?PR?_display?HOUR
_display:
			; SOURCE LINE # 245
;---- Variable 'num?345' assigned to Register 'R5' ----
;---- Variable 'i?344' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 246
; 	if(num >= 0 && num <=9)
			; SOURCE LINE # 247
	MOV  	A,R5
	CLR  	C
	SUBB 	A,#00H
	JC   	?C0046
	MOV  	A,R5
	SETB 	C
	SUBB 	A,#09H
	JNC  	?C0046
; 	{switch(i)
			; SOURCE LINE # 248
	MOV  	A,R7
	DEC  	A
	JZ   	?C0040
	DEC  	A
	JZ   	?C0041
	DEC  	A
	JZ   	?C0042
	DEC  	A
	JZ   	?C0043
	DEC  	A
	JZ   	?C0044
	ADD  	A,#05H
	JNZ  	?C0046
; 	{ case 0:P2= LedSelect0 | num;  
			; SOURCE LINE # 249
?C0039:
	MOV  	A,R5
	ORL  	A,#080H
	MOV  	P2,A
; 	//LedSelect0的高四位为选择第0个数码管的逻辑,低四位则为数码管显示的数字。
; 	break;
			; SOURCE LINE # 251
	RET  	
; 	  case 1:P2= LedSelect1 | num;
			; SOURCE LINE # 252
?C0040:
	MOV  	A,R5
	ORL  	A,#090H
	MOV  	P2,A
; 		  //LedSelect1的高四位为选择第1个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 254
	RET  	
; 	  case 2:P2= LedSelect2 | num;
			; SOURCE LINE # 255
?C0041:
	MOV  	A,R5
	ORL  	A,#0A0H
	MOV  	P2,A
; 		  //LedSelect2的高四位为选择第2个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 257
	RET  	
; 	  case 3:P2= LedSelect3 | num;
			; SOURCE LINE # 258
?C0042:
	MOV  	A,R5
	ORL  	A,#0B0H
	MOV  	P2,A
; 		  //LedSelect3的高四位为选择第3个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 260
	RET  	
; 	  case 4:P2= LedSelect4 | num;
			; SOURCE LINE # 261
?C0043:
	MOV  	A,R5
	ORL  	A,#0C0H
	MOV  	P2,A
; 		  //LedSelect4的高四位为选择第4个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 263
	RET  	
; 	  case 5:P2= LedSelect5 | num;
			; SOURCE LINE # 264
?C0044:
	MOV  	A,R5
	ORL  	A,#0D0H
	MOV  	P2,A
; 		  //LedSelect5的高四位为选择第5个数码管的逻辑,低四位则为数码管显示的数字。
; 		  break;
			; SOURCE LINE # 266
; 	  default:break;
			; SOURCE LINE # 267
; 	}
			; SOURCE LINE # 268
; 	}
			; SOURCE LINE # 269
; }
			; SOURCE LINE # 270
?C0046:
	RET  	
; END OF _display

; 
; unsigned char keyscan()

	RSEG  ?PR?keyscan?HOUR
keyscan:
	USING	0
			; SOURCE LINE # 272
; {
			; SOURCE LINE # 273
; 	PinDrvKey1=TRUE;
			; SOURCE LINE # 274
	SETB 	P1_0
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 275
	JNB  	P1_4,?C0047
; 		PinLamp=FALSE;
			; SOURCE LINE # 276
	CLR  	P0_0
?C0047:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 277
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 278
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 279
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 280
	SETB 	P0_1
; 	return 1;
			; SOURCE LINE # 281
	MOV  	R7,#01H
	RET  	
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 282
; 		PinLamp=FALSE;
			; SOURCE LINE # 283
?C0049:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 284
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 285
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 286
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 287
	SETB 	P0_1
; 	return 5;
			; SOURCE LINE # 288
	MOV  	R7,#05H
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 289
; 		PinLamp=FALSE;
			; SOURCE LINE # 290
?C0050:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 291
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 292
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 293
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 294
	SETB 	P0_1
; 	return 9;
			; SOURCE LINE # 295
	MOV  	R7,#09H
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 296
; 		PinLamp=FALSE;
			; SOURCE LINE # 297
?C0051:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 298
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 299
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 300
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 301
	SETB 	P0_1
; 	return 12;
			; SOURCE LINE # 302
	MOV  	R7,#0CH
	RET  	
; 	PinDrvKey1=FALSE;	//扫描第一列
			; SOURCE LINE # 303
; 	PinDrvKey2=TRUE;
			; SOURCE LINE # 304
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 305
; 		PinLamp=FALSE;
			; SOURCE LINE # 306
?C0052:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 307
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 308
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 309
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 310
	SETB 	P0_1
; 	return 2;
			; SOURCE LINE # 311
	DEC  	R7
	RET  	
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 312
; 		PinLamp=FALSE;
			; SOURCE LINE # 313
?C0053:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 314
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 315
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 316
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 317
	SETB 	P0_1
; 	return 6;
			; SOURCE LINE # 318
	MOV  	R7,#06H
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 319
; 		PinLamp=FALSE;
			; SOURCE LINE # 320
?C0054:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 321
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 322
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 323
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 324
	SETB 	P0_1
; 	return 0;
			; SOURCE LINE # 325
	MOV  	R7,#00H
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 326
; 		PinLamp=FALSE;
			; SOURCE LINE # 327
?C0055:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 328
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 329
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 330
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 331
	SETB 	P0_1
; 	return 13;
			; SOURCE LINE # 332
	MOV  	R7,#0DH
	RET  	
; 	PinDrvKey2=FALSE;	//扫描第二列
			; SOURCE LINE # 333
; 	PinDrvKey3=TRUE;
			; SOURCE LINE # 334
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 335
; 		PinLamp=FALSE;
			; SOURCE LINE # 336
?C0056:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 337
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 338
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 339
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 340
	SETB 	P0_1
; 	return 3;
			; SOURCE LINE # 341
	RET  	
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 342
; 		PinLamp=FALSE;
			; SOURCE LINE # 343
?C0057:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 344
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 345
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 346
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 347
	SETB 	P0_1
; 	return 7;
			; SOURCE LINE # 348
	MOV  	R7,#07H
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 349
; 		PinLamp=FALSE;
			; SOURCE LINE # 350
?C0058:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 351
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 352
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 353
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 354
	SETB 	P0_1
; 	return 10;
			; SOURCE LINE # 355
	MOV  	R7,#0AH
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 356
; 		PinLamp=FALSE;
			; SOURCE LINE # 357
?C0059:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 358
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 359
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 360
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 361
	SETB 	P0_1
; 	return 14;
			; SOURCE LINE # 362
	MOV  	R7,#0EH
	RET  	
; 	PinDrvKey3=FALSE;	//扫描第三列
			; SOURCE LINE # 363
; 	PinDrvKey4=TRUE;
			; SOURCE LINE # 364
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 365
; 		PinLamp=FALSE;
			; SOURCE LINE # 366
?C0060:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 367
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 368
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 369
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 370
	SETB 	P0_1
; 	return 4;
			; SOURCE LINE # 371
	INC  	R7
	RET  	
; 	if(PinScanKey2==TRUE)
			; SOURCE LINE # 372
; 		PinLamp=FALSE;
			; SOURCE LINE # 373
?C0061:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 374
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 375
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 376
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 377
	SETB 	P0_1
; 	return 8;
			; SOURCE LINE # 378
	MOV  	R7,#08H
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 379
; 		PinLamp=FALSE;
			; SOURCE LINE # 380
?C0062:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 381
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 382
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 383
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 384
	SETB 	P0_1
; 	return 11;
			; SOURCE LINE # 385
	MOV  	R7,#0BH
	RET  	
; 	if(PinScanKey1==TRUE)
			; SOURCE LINE # 386
; 		PinLamp=FALSE;
			; SOURCE LINE # 387
?C0063:
; 	PinSpeaker=FALSE;
			; SOURCE LINE # 388
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 389
	LCALL	L?0082
; 	PinLamp=TRUE;
			; SOURCE LINE # 390
	SETB 	P0_0
; 	PinSpeaker=TRUE;
			; SOURCE LINE # 391
	SETB 	P0_1
; 	return 15;
			; SOURCE LINE # 392
	MOV  	R7,#0FH
; 	PinDrvKey3=FALSE;	//扫描第四列
			; SOURCE LINE # 393
; 	return 16;
			; SOURCE LINE # 394
; }
			; SOURCE LINE # 395
?C0048:
	RET  	
; END OF keyscan

; 
; void updatee()

	RSEG  ?PR?updatee?HOUR
updatee:
	USING	0
			; SOURCE LINE # 397
; {
			; SOURCE LINE # 398
; 	if(s0==9)	//如果10ms位需要进位,则进入语句
			; SOURCE LINE # 399
	MOV  	A,s0
	XRL  	A,#09H
	JNZ  	?C0064
; 	{
			; SOURCE LINE # 400
; 		s0=0;
			; SOURCE LINE # 401
	MOV  	s0,A
; 		if(s1==5)	//如果100ms位需要进位,则进入语句
			; SOURCE LINE # 402
	MOV  	A,s1
	XRL  	A,#05H
	JNZ  	?C0065
; 		{
			; SOURCE LINE # 403
; 			s1=0;
			; SOURCE LINE # 404
	MOV  	s1,A
; 			if(m0==9)	//如果1sec位需要进位,则进入语句
			; SOURCE LINE # 405
	MOV  	A,m0
	XRL  	A,#09H
	JNZ  	?C0066
; 			{
			; SOURCE LINE # 406
; 				m0=0;
			; SOURCE LINE # 407
	MOV  	m0,A
; 				if(m1==5)	//如果10sec位需要进位,则进入语句
			; SOURCE LINE # 408
	MOV  	A,m1
	XRL  	A,#05H
	JNZ  	?C0067
; 				{
			; SOURCE LINE # 409
; 					m1=0;
			; SOURCE LINE # 410
	MOV  	m1,A
; 					if(h0==9&&h1<=1)
			; SOURCE LINE # 411
	MOV  	A,h0
	CJNE 	A,#09H,?C0068
	MOV  	A,h1
	SETB 	C
	SUBB 	A,#01H
	JNC  	?C0068
; 					{h0=0;
			; SOURCE LINE # 412
	CLR  	A
	MOV  	h0,A
; 					h1+=1;}
			; SOURCE LINE # 413
	INC  	h1
	SJMP 	?C0075
?C0068:
; 					else if(h0==3&&h1==2)
			; SOURCE LINE # 414
	MOV  	A,h0
	CJNE 	A,#03H,?C0070
	MOV  	A,h1
	CJNE 	A,#02H,?C0070
; 					{h0=0;
			; SOURCE LINE # 415
	CLR  	A
	MOV  	h0,A
; 					h1=0;}
			; SOURCE LINE # 416
	MOV  	h1,A
	SJMP 	?C0075
?C0070:
; 					else h0+=1;
			; SOURCE LINE # 417
	INC  	h0
; 				}
			; SOURCE LINE # 418
	SJMP 	?C0075
?C0067:
; 				else m1+=1;
			; SOURCE LINE # 419
	INC  	m1
; 			}
			; SOURCE LINE # 420
	SJMP 	?C0075
?C0066:
; 			else m0+=1;
			; SOURCE LINE # 421
	INC  	m0
; 		}
			; SOURCE LINE # 422
	SJMP 	?C0075
?C0065:
; 		else s1+=1;
			; SOURCE LINE # 423
	INC  	s1
; 	}
			; SOURCE LINE # 424
	SJMP 	?C0075
?C0064:
; 	else s0+=1;
			; SOURCE LINE # 425
	INC  	s0
?C0075:
; 	display(0,s0);
			; SOURCE LINE # 426
	MOV  	R5,s0
	CLR  	A
	MOV  	R7,A
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 427
	LCALL	L?0083
; 	display(1,s1);
			; SOURCE LINE # 428
	MOV  	R5,s1
	MOV  	R7,#01H
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 429
	MOV  	R7,#03H
	LCALL	_delay
; 	display(2,m0);
			; SOURCE LINE # 430
	MOV  	R5,m0
	DEC  	R7
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 431
	INC  	R7
	LCALL	_delay
; 	display(3,m1);
			; SOURCE LINE # 432
	MOV  	R5,m1
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 433
	LCALL	_delay
; 	display(4,h0);
			; SOURCE LINE # 434
	MOV  	R5,h0
	INC  	R7
	LCALL	_display
; 	delay(DELAY_VALUE);
			; SOURCE LINE # 435
	DEC  	R7
	LCALL	_delay
; 	display(5,h1);
			; SOURCE LINE # 436
	MOV  	R5,h1
	MOV  	R7,#05H
	LCALL	_display
; 	delay(DELAY_VALUE); //以上语句则在数码管上显示各个数字
			; SOURCE LINE # 437
	MOV  	R7,#03H
	LJMP 	_delay
; END OF updatee

	END

⌨️ 快捷键说明

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