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

📄 jianpan.s

📁 实现3*3 键盘的控制。从而实现用键盘来对单片机进行控制。
💻 S
📖 第 1 页 / 共 3 页
字号:
; {
	.dbline 207
;  WDR(); //this prevents a timout on enabling
	wdr
	.dbline 208
;  WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
	ldi R24,10
	out 0x21,R24
	.dbline -2
	.dbline 209
; }
L43:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 213
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 215
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 216
;  port_init();
	xcall _port_init
	.dbline 217
;  timer0_init(); 
	xcall _timer0_init
	.dbline 218
;  uart0_init();
	xcall _uart0_init
	.dbline 221
;  //watchdog_init();
;  
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 222
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 223
;  TIMSK = 0x01; //timer interrupt sources
	ldi R24,1
	out 0x39,R24
	.dbline 224
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
	.dbline 226
;  //all peripherals are now initialised
; }
L44:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e display _display fV
;            tmp -> R20,R21
	.even
_display::
	xcall push_gset2
	.dbline -1
	.dbline 229
; //显示
; void display( void )
; {
	.dbline 231
; 	uint tmp;
; 	send( 7, mode );
	lds R18,_mode
	ldi R16,7
	xcall _send
	.dbline 232
; 	tmp=numL;
	.dbline 233
; 	switch( NumBitL )
	lds R20,_numL
	lds R21,_numL+1
	lds R22,_NumBitL
	clr R23
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	brne X3
	xjmp L53
X3:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	brne X4
	xjmp L52
X4:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	brne X5
	xjmp L51
X5:
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	brne X6
	xjmp L50
X6:
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	breq L49
	xjmp L46
X1:
	.dbline 234
; 	{
L49:
	.dbline 235
; 		case 5: send( 0, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	mov R18,R16
	clr R16
	xcall _send
	.dbline 236
; 			tmp=tmp/10;
	.dbline 237
; 			send( 1, tmp% 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,1
	xcall _send
	.dbline 238
; 			tmp=tmp/10;
	.dbline 239
;     			send( 2, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,2
	xcall _send
	.dbline 240
;     			tmp=tmp/10;
	.dbline 241
;     			send( 3, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,3
	xcall _send
	.dbline 242
;     			tmp=tmp/10;
	.dbline 243
;     			send( 4, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,4
	xcall _send
	.dbline 244
;     			delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 245
;     			break;
	xjmp L47
L50:
	.dbline 246
; 		case 4:send( 0, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	mov R18,R16
	clr R16
	xcall _send
	.dbline 247
; 			tmp=tmp/10;
	.dbline 248
; 			send( 1, tmp% 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,1
	xcall _send
	.dbline 249
; 			tmp/=10;
	.dbline 250
;     			send( 2, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,2
	xcall _send
	.dbline 251
;     			tmp/=10;
	.dbline 252
;     			send( 3, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,3
	xcall _send
	.dbline 253
;     			delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 254
;     			break;
	xjmp L47
L51:
	.dbline 255
; 		case 3: send( 0, numL % 10 );
	ldi R18,10
	ldi R19,0
	lds R16,_numL
	lds R17,_numL+1
	xcall mod16u
	mov R18,R16
	clr R16
	xcall _send
	.dbline 256
; 			tmp=numL/10;
	.dbline 257
; 			send( 1, tmp% 10 );
	ldi R18,10
	ldi R19,0
	lds R16,_numL
	lds R17,_numL+1
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,1
	xcall _send
	.dbline 258
; 			tmp/=10;
	.dbline 259
;     			send( 2, tmp % 10 );
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,2
	xcall _send
	.dbline 260
;     			delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 261
;     			break;		
	xjmp L47
L52:
	.dbline 262
; 		case 2: send( 0, numL% 10 );
	ldi R18,10
	ldi R19,0
	lds R16,_numL
	lds R17,_numL+1
	xcall mod16u
	mov R18,R16
	clr R16
	xcall _send
	.dbline 263
;     			send( 1, numL / 10 % 10 );
	ldi R18,10
	ldi R19,0
	lds R16,_numL
	lds R17,_numL+1
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	mov R18,R16
	ldi R16,1
	xcall _send
	.dbline 264
;     			delay(2);
	ldi R16,2
	ldi R17,0
	xcall _delay
	.dbline 265
;     			break;
	xjmp L47
L53:
	.dbline 266
;     case 1: send( 0, numL % 10 );
	ldi R18,10
	ldi R19,0
	lds R16,_numL
	lds R17,_numL+1
	xcall mod16u
	mov R18,R16
	clr R16
	xcall _send
	.dbline 267
;     			delay(3);
	ldi R16,3
	ldi R17,0
	xcall _delay
	.dbline 268
;     			break;
	xjmp L47
L46:
	.dbline 269
;     default: delay(3); 
	ldi R16,3
	ldi R17,0
	xcall _delay
	.dbline 270
;     			break;
L47:
	.dbline 273
; 	}
; 	
; 	switch(NumBitH)
	lds R20,_NumBitH
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L58
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L57
	xjmp L54
X2:
	.dbline 274
; 	{
L57:
	.dbline 275
; 			case 2: send( 5, numH% 10 );
	ldi R17,10
	lds R16,_numH
	xcall mod8u
	mov R18,R16
	ldi R16,5
	xcall _send
	.dbline 276
;     			send( 6, numH / 10 % 10 );
	ldi R17,10
	lds R16,_numH
	xcall div8u
	ldi R17,10
	xcall mod8u
	mov R18,R16
	ldi R16,6
	xcall _send
	.dbline 277
;     			delay(2);
	ldi R16,2
	ldi R17,0
	xcall _delay
	.dbline 278
;     			break;
	xjmp L55
L58:
	.dbline 279
;     	case 1: send(5,numH%10);
	ldi R17,10
	lds R16,_numH
	xcall mod8u
	mov R18,R16
	ldi R16,5
	xcall _send
	.dbline 280
;     			delay(2);
	ldi R16,2
	ldi R17,0
	xcall _delay
	.dbline 281
;     			break;
	xjmp L55
L54:
	.dbline 282
	ldi R16,3
	ldi R17,0
	xcall _delay
	.dbline 283
L55:
	.dbline -2
	.dbline 285
;     	default: delay(3); 
;     			break;
;    }
; }
L45:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r tmp 20 i
	.dbend
	.dbfunc e num_bit _num_bit fc
;            bit -> R20
;            Val -> R16,R17
	.even
_num_bit::
	xcall push_gset1
	.dbline -1
	.dbline 288
; 
; uchar num_bit( uint Val )
; {
	.dbline 290
; 	uchar bit;
; 	if(Val>=10000) 		{ bit = 5; }
	cpi R16,16
	ldi R30,39
	cpc R17,R30
	brlo L60
	.dbline 290
	.dbline 290
	ldi R20,5
	.dbline 290
	xjmp L61
L60:
	.dbline 291
; 	else if(Val>=1000) 	{ bit = 4; }
	cpi R16,232
	ldi R30,3
	cpc R17,R30
	brlo L62
	.dbline 291
	.dbline 291
	ldi R20,4
	.dbline 291
	xjmp L63
L62:
	.dbline 292
; 	else if(Val>=100 )	{ bit = 3; }
	cpi R16,100
	ldi R30,0
	cpc R17,R30
	brlo L64
	.dbline 292
	.dbline 292
	ldi R20,3
	.dbline 292
	xjmp L65
L64:
	.dbline 293
; 	else if(Val>=10 )	{ bit = 2; }
	cpi R16,10
	ldi R30,0
	cpc R17,R30
	brlo L66
	.dbline 293
	.dbline 293
	ldi R20,2
	.dbline 293
	xjmp L67
L66:
	.dbline 294
; 	else if( Val )		{ bit = 1; }
	cpi R16,0
	cpc R16,R17
	breq L68
X7:
	.dbline 294
	.dbline 294
	ldi R20,1
	.dbline 294
	xjmp L69
L68:
	.dbline 295
; 	else { bit = 1; }
	.dbline 295
	ldi R20,1
	.dbline 295
L69:
L67:
L65:
L63:
L61:
	.dbline 296
; 	return ( bit );
	mov R16,R20
	.dbline -2
L59:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r bit 20 c
	.dbsym r Val 16 i
	.dbend
	.dbfunc e init_transbuf _init_transbuf fV
;            tmp -> R16
	.even
_init_transbuf::
	.dbline -1
	.dbline 300
; }
; //
; void init_transbuf(void)
; {
	.dbline 302
; 	uchar tmp;
; 	for(tmp=0;tmp<20;tmp++)
	clr R16
	xjmp L74
L71:
	.dbline 303
	ldi R24,<_trans_buf
	ldi R25,>_trans_buf
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,255
	std z+0,R24
L72:
	.dbline 302
	inc R16
L74:
	.dbline 302
	cpi R16,20
	brlo L71
	.dbline -2
	.dbline 304
; 	 trans_buf[tmp]=0xff;
; 	}
L70:
	.dbline 0 ; func end
	ret
	.dbsym r tmp 16 c
	.dbend
	.dbfunc e edit _edit fV
;       KeyIndex -> R20
;           flag -> R22
;              i -> R10
	.even
_edit::
	xcall push_gset5
	.dbline -1
	.dbline 307
; //
; void edit(void)
; {
	.dbline 308
; 	uchar flag=STATE;
	ldi R22,15
	.dbline 310
; 	uchar i;
; 	init_transbuf();
	xcall _init_transbuf
	.dbline 311
; 	numL=0;
	clr R2
	clr R3
	sts _numL+1,R3
	sts _numL,R2
	xjmp L77
L76:
	.dbline 313
; 	while(flag!=0xff)
; 	{
	.dbline 314
; 	if( !(PIND&BIT(PD2)) )	// 检测按键状态
	sbic 0x10,2
	rjmp L79
	.dbline 315
; 	{ 
	.dbline 316
; 		display();					//延时
	xcall _display
	.dbline 317
; 		display();					//延时
	xcall _display
	.dbline 318
; 		if( !(PIND & BIT(PD2)) )	//再次检测按键状态
	sbic 0x10,2
	rjmp L81
	.dbline 319
; 	  	{
	.dbline 320
; 			uchar KeyIndex = scan_key();	// 读取扫描序号
	xcall _scan_key
	mov R20,R16
	xjmp L84
L83:
	.dbline 321
	.dbline 321
	wdr
	.dbline 321
	xcall _display
	.dbline 321
L84:
	.dbline 321
; 			while( !(PIND & BIT(PD2)) ) { WDR(); display(); };	//等待按键松开
	sbis 0x10,2
	rjmp L83
	.dbline 321
	.dbline 322
	clr R10
	xjmp L89
L86:
	.dbline 322
	.dbline 322
	xcall _display
	.dbline 322
L87:
	.dbline 322
	inc R10
L89:
	.dbline 322
; 			for( i = 0; i < 5; i ++ ) { display(); }		//延时
	mov R24,R10
	cpi R24,5
	brlo L86
	.dbline 324
; 			//backspace
; 			if((KeySet[KeyIndex]==1|(KeySet[KeyIndex]==2))&&(flag==STATE))
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,1
	brne L92
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L93
L92:
	clr R12
	clr R13
L93:
	ldi R24,<_KeySet
	ldi R25,>_KeySet
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cpi R30,2
	brne L94
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L95
L94:

⌨️ 快捷键说明

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