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

📄 jianpan.s

📁 实现3*3 键盘的控制。从而实现用键盘来对单片机进行控制。
💻 S
📖 第 1 页 / 共 3 页
字号:
	clr R10
	clr R11
L95:
	movw R2,R12
	or R2,R10
	or R3,R11
	tst R2
	brne X8
	tst R3
	breq L90
X8:
	cpi R22,15
	brne L90
	.dbline 325
; 			{
	.dbline 326
; 			 trans_buf[0]=KeySet[KeyIndex];
	.dbline 327
; 			 flag=1;
	.dbline 328
; 			 numH=10*KeySet[KeyIndex]+flag;
	.dbline 329
; 			 NumBitH=num_bit(numH);
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R2,R20
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	lpm R30,Z
	sts _trans_buf,R30
	ldi R22,1
	movw R30,R2
	lpm R30,Z
	ldi R24,10
	mul R24,R30
	mov R2,R0
	add R2,R22
	sts _numH,R2
	mov R16,R2
	clr R17
	xcall _num_bit
	sts _NumBitH,R16
	.dbline 330
; 			}
	xjmp L91
L90:
	.dbline 331
; 			else if(KeySet[KeyIndex]==3&&(flag==STATE))
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,3
	brne L96
	cpi R22,15
	brne L96
	.dbline 332
; 			{
	.dbline 333
; 			 trans_buf[0]=KeySet[KeyIndex];
	.dbline 334
; 			 transmit();
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	sts _trans_buf,R30
	xcall _transmit
	.dbline 335
; 			 flag=0xff;
	ldi R22,255
	.dbline 336
; 			}
	xjmp L97
L96:
	.dbline 337
; 			else if((flag>=PAR1)&&(flag<=PAR7)&&( KeySet[KeyIndex]!=ENTER)&&( KeySet[KeyIndex]!=CANCEL))
	cpi R22,1
	brlo L98
	ldi R24,7
	cp R24,R22
	brlo L98
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	mov R24,R2
	cpi R24,15
	breq L98
	cpi R24,12
	breq L98
	.dbline 338
; 			{
	.dbline 339
; 			 numL=10*numL+KeySet[KeyIndex];
	.dbline 340
; 			 NumBitL=num_bit(numL);
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	lds R18,_numL
	lds R19,_numL+1
	ldi R16,10
	ldi R17,0
	xcall empy16s
	movw R4,R16
	add R4,R2
	adc R5,R3
	sts _numL+1,R5
	sts _numL,R4
	movw R16,R4
	xcall _num_bit
	sts _NumBitL,R16
	.dbline 341
; 			}
	xjmp L99
L98:
	.dbline 342
; 			else if(KeySet[KeyIndex]==CANCEL)
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,12
	brne L100
	.dbline 343
; 			{
	.dbline 344
; 			 numL = numL/10;
	.dbline 345
; 			 NumBitL = num_bit(numL);
	ldi R18,10
	ldi R19,0
	lds R16,_numL
	lds R17,_numL+1
	xcall div16u
	sts _numL+1,R17
	sts _numL,R16
	xcall _num_bit
	sts _NumBitL,R16
	.dbline 346
; 			}
	xjmp L101
L100:
	.dbline 347
; 			else if(KeySet[KeyIndex]==ENTER)
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,15
	breq X10
	xjmp L102
X10:
	.dbline 348
; 			{
	.dbline 349
; 			 trans_buf[flag]=numL;
	ldi R24,<_trans_buf
	ldi R25,>_trans_buf
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	lds R2,_numL
	lds R3,_numL+1
	std z+0,R2
	.dbline 350
; 			 flag++;
	.dbline 351
; 			 numH++;
	.dbline 352
; 			 numL=0;
	.dbline 353
; 			 NumBitL=0;
	.dbline 354
; 			 if ((flag==Model1_flag)&&(numH/10==1))//模式1参数个数Model1_flag
	inc R22
	lds R24,_numH
	subi R24,255    ; addi 1
	sts _numH,R24
	clr R2
	clr R3
	sts _numL+1,R3
	sts _numL,R2
	sts _NumBitL,R2
	cpi R22,8
	brne L104
	ldi R17,10
	mov R16,R24
	xcall div8u
	cpi R16,1
	brne L104
	.dbline 355
; 			 {
	.dbline 356
; 			  flag=0xff;
	.dbline 357
; 			  transmit();
	ldi R22,255
	xcall _transmit
	.dbline 358
; 			  numH=0;
	.dbline 359
; 			  NumBitH=0;
	clr R2
	sts _numH,R2
	sts _NumBitH,R2
	.dbline 360
; 			 }
	xjmp L103
L104:
	.dbline 361
; 			 else if ((flag==Model2_flag)&&(numH/10==2))//模式2参数个数Model2_flag
	cpi R22,4
	breq X11
	xjmp L103
X11:
	ldi R17,10
	lds R16,_numH
	xcall div8u
	cpi R16,2
	breq X12
	xjmp L103
X12:
	.dbline 362
; 			 {
	.dbline 363
; 			  flag=0xff;
	.dbline 364
; 			  transmit();
	ldi R22,255
	xcall _transmit
	.dbline 365
; 			  numH=0;
	.dbline 366
; 			  NumBitH=0;
	clr R2
	sts _numH,R2
	sts _NumBitH,R2
	.dbline 367
; 			 }
	.dbline 368
; 			}
	xjmp L103
L102:
	.dbline 369
; 			else if(((KeySet[KeyIndex]!=1)|(KeySet[KeyIndex]!=2)|(KeySet[KeyIndex]!=3))&&(flag==STATE)) {edit();}
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,1
	breq L110
	ldi R24,1
	ldi R25,0
	movw R14,R24
	xjmp L111
L110:
	clr R14
	clr R15
L111:
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,2
	breq L112
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L113
L112:
	clr R12
	clr R13
L113:
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,3
	breq L114
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L115
L114:
	clr R10
	clr R11
L115:
	movw R2,R14
	or R2,R12
	or R3,R13
	or R2,R10
	or R3,R11
	tst R2
	brne X9
	tst R3
	breq L108
X9:
	cpi R22,15
	brne L108
	.dbline 369
	.dbline 369
	xcall _edit
	.dbline 369
L108:
L103:
L101:
L99:
L97:
L91:
	.dbline 371
; 			
; 		}
L81:
	.dbline 372
; 	}
L79:
	.dbline 373
	xcall _display
	.dbline 374
L77:
	.dbline 312
	cpi R22,255
	breq X13
	xjmp L76
X13:
	.dbline 375
; 	display();
; 	}
;        mode=FREE;
	ldi R24,113
	sts _mode,R24
	.dbline -2
	.dbline 376
; }
L75:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r KeyIndex 20 c
	.dbsym r flag 22 c
	.dbsym r i 10 c
	.dbend
	.dbfunc e reset _reset fV
	.even
_reset::
	.dbline -1
	.dbline 379
; 
; void reset( void )
; {
	.dbline 380
; 	for(DelayCounter = 0; DelayCounter < 500;)
	clr R2
	clr R3
	sts _DelayCounter+1,R3
	sts _DelayCounter,R2
	xjmp L120
L117:
	.dbline 381
	.dbline 382
	ldi R24,255
	out 0x1b,R24
	.dbline 383
	in R2,0x18
	lsl R2
	out 0x18,R2
	.dbline 384
	wdr
	.dbline 385
L118:
	.dbline 380
L120:
	.dbline 380
	lds R24,_DelayCounter
	lds R25,_DelayCounter+1
	cpi R24,244
	ldi R30,1
	cpc R25,R30
	brlo L117
	.dbline 386
; 	{
; 		PORTA = 0xFF;
; 		PORTB <<= BIT(0);
; 		WDR();
; 	}
; 	SysCounter = 0;
	.dbline 387
; 	DelayCounter=0;
	.dbline 388
; 	Cursor = 0;
	.dbline 389
; 	CursorDir = 0;
	clr R2
	clr R3
	sts _SysCounter+1,R3
	sts _SysCounter,R2
	sts _DelayCounter+1,R3
	sts _DelayCounter,R2
	sts _Cursor,R2
	sts _CursorDir,R2
	.dbline -2
	.dbline 391
; 	//p_speed=speed_table[0];
; }
L116:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;       KeyIndex -> R20
;              i -> R22
	.even
_main::
	.dbline -1
	.dbline 394
; //
; void main(void)
; {
	.dbline 396
; 	uchar i;
; 	init_devices();
	xcall _init_devices
	.dbline 397
; 	reset();
	xcall _reset
	.dbline 398
; 	send(7,0x79);
	ldi R18,121
	ldi R16,7
	xcall _send
	xjmp L123
L122:
	.dbline 400
; 	while( 1 )
; 	{
	.dbline 401
; 		mode=FREE;	
	.dbline 402
; 		WDR();
	ldi R24,113
	sts _mode,R24
	wdr
	.dbline 403
; 		if( !(PIND & BIT(PD2)) )	// 检测按键状态
	sbic 0x10,2
	rjmp L125
	.dbline 404
; 		{ 
	.dbline 405
; 			display();					//延时
	xcall _display
	.dbline 406
; 			display();					//延时
	xcall _display
	.dbline 407
; 			if( !(PIND & BIT(PD2)) )	//再次检测按键状态
	sbic 0x10,2
	rjmp L126
	.dbline 408
; 		  	{
	.dbline 409
; 				uchar KeyIndex = scan_key();	// 读取扫描序号
	xcall _scan_key
	mov R20,R16
	xjmp L130
L129:
	.dbline 410
	.dbline 410
	wdr
	.dbline 410
	xcall _display
	.dbline 410
L130:
	.dbline 410
; 				while( !(PIND & BIT(PD2)) ) { WDR(); display(); };	//等待按键松开
	sbis 0x10,2
	rjmp L129
	.dbline 410
	.dbline 411
	clr R22
	xjmp L135
L132:
	.dbline 411
	.dbline 411
	xcall _display
	.dbline 411
L133:
	.dbline 411
	inc R22
L135:
	.dbline 411
; 				for( i = 0; i < 5; i ++ ) { display(); }		//延时
	cpi R22,5
	brlo L132
	.dbline 413
; 				//按下编辑键
; 				if(KeySet[KeyIndex]==EDIT)
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,14
	brne L136
	.dbline 414
; 				{
	.dbline 415
; 					mode=0x79;    //''E'
	.dbline 416
; 					edit();
	ldi R24,121
	sts _mode,R24
	xcall _edit
	.dbline 417
; 				}
	xjmp L126
L136:
	.dbline 418
; 				else if(KeySet[KeyIndex]==ENTER)	    
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,15
	breq X15
	xjmp L126
X15:
	.dbline 419
; 				{
	.dbline 420
; 					transmit();
	xcall _transmit
	.dbline 421
; 				}
	.dbline 422
; 			}
	.dbline 423
; 		}
	xjmp L126
L125:
	.dbline 425
; 		else
; 		{
	.dbline 426
; 			if( SysCounter > 500 )
	ldi R24,500
	ldi R25,1
	lds R2,_SysCounter
	lds R3,_SysCounter+1
	cp R24,R2
	cpc R25,R3
	brsh L140
	.dbline 427
; 			{
	.dbline 428
; 				SysCounter = 0;	
	.dbline 429
; 				if( CursorDir == 0 )
	clr R2
	clr R3
	sts _SysCounter+1,R3
	sts _SysCounter,R2
	lds R2,_CursorDir
	tst R2
	brne L142
	.dbline 430
; 				{
	.dbline 431
; 					if( ++Cursor == 7 ) { CursorDir = 1; }
	lds R24,_Cursor
	subi R24,255    ; addi 1
	mov R2,R24
	sts _Cursor,R2
	cpi R24,7
	brne L143
	.dbline 431
	.dbline 431
	ldi R24,1
	sts _CursorDir,R24
	.dbline 431
	.dbline 432
; 				}
	xjmp L143
L142:
	.dbline 433
; 				else if( CursorDir == 1 )
	lds R24,_CursorDir
	cpi R24,1
	brne L146
	.dbline 434
; 				{
	.dbline 435
; 					if( --Cursor == 0 )	{ CursorDir = 0; }
	lds R24,_Cursor
	subi R24,1
	mov R2,R24
	sts _Cursor,R2
	tst R24
	brne L148
	.dbline 435
	.dbline 435
	clr R2
	sts _CursorDir,R2
	.dbline 435
L148:
	.dbline 436
; 				}
L146:
L143:
	.dbline 437
; 			}
L140:
	.dbline 438
; 			PORTA = 0x40;	//显示'_'
	ldi R24,64
	out 0x1b,R24
	.dbline 439
; 			PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 440
; 			PORTB &= ~BIT( Cursor );
	lds R17,_Cursor
	ldi R16,1
	xcall lsl8
	mov R2,R16
	com R2
	in R3,0x18
	and R3,R2
	out 0x18,R3
	.dbline 441
; 			delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 442
; 		}
L126:
	.dbline 443
L123:
	.dbline 399
	xjmp L122
X14:
	.dbline -2
	.dbline 444
; 	}
; }
L121:
	.dbline 0 ; func end
	ret
	.dbsym r KeyIndex 20 c
	.dbsym r i 22 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
_receive_buf::
	.blkb 20
	.dbsym e receive_buf _receive_buf A[20:20]c
_trans_buf::
	.blkb 20
	.dbsym e trans_buf _trans_buf A[20:20]c

⌨️ 快捷键说明

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