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

📄 key.s

📁 本次设计的自动往返电动小汽车
💻 S
字号:
	.module Key.C
	.area code(ram, con, rel)
	.area lit(rom, con, rel)
_keyset::
	.byte 12,13
	.byte 14,15
	.byte 8,9
	.byte 10,11
	.byte 4,5
	.byte 6,7
	.byte 0,1
	.byte 2,3
	.dbfile C:\DOCUME~1\Administrator\桌面\Car&Lcd\Key.C
	.dbsym e keyset _keyset A[16:16]kc
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Car&Lcd\Key.C
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Car&Lcd\Key.C
	.dbfunc e key_init _key_init fV
	.even
_key_init::
	.dbline -1
	.dbline 23
; /********************************************
; /* 键盘扫描函数
; /* PROTC口用于扫描键盘
; /* 函数返回键值,无按键时返回0x7F
; /* 在其他文件中调用函数时应做以下说明
; /* extern unsigned char scan_key(void); 
; /* extern unsigned char keypad(void);
; ********************************************/
; #include <io8515v.h>
; #include <Key.h>
; 
; #pragma data:code
; const  char keyset[]=
;             {
; 			 12,13,14,15,
; 			 8, 9, 10,11,
; 			 4, 5,  6, 7,
; 			 0, 1,  2, 3
; 			};	
; #pragma data:data	
; 
; void key_init(void)
; 	 {
	.dbline 24
; 	 JP = 0xFF;
	ldi R24,255
	out 0x15,R24
	.dbline 25
;          JP_FX  = 0x00;
	clr R2
	out 0x14,R2
	.dbline -2
	.dbline 26
; 	 }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e scan_key _scan_key fc
;              i -> R22
;           temp -> R10
	.even
_scan_key::
	rcall push_gset3
	.dbline -1
	.dbline 29
; 	 
; unsigned char scan_key(void)
; 	 {
	.dbline 31
; 	 unsigned char i,temp;
; 	 JP_FX=0x0F;
	ldi R24,15
	out 0x14,R24
	.dbline 32
; 	 JP=0xFF;
	ldi R24,255
	out 0x15,R24
	.dbline 33
; 	 for(i=0;i<4;i++)
	clr R22
	rjmp L6
L3:
	.dbline 34
; 	 	{
	.dbline 35
; 		 JP=~(1<<i);
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R16
	com R2
	out 0x15,R2
	.dbline 36
; 		 delay_nus(100);
	ldi R16,100
	ldi R17,0
	rcall _delay_nus
	.dbline 37
; 		 temp=JP_IN&0xF0;
	in R24,0x13
	andi R24,240
	mov R10,R24
	.dbline 38
; 		 if(temp!=0xF0)
	cpi R24,240
	brne X1
	rjmp L7
X1:
	.dbline 39
; 		 	{
	.dbline 40
; 			delay_nms(15);
	ldi R16,15
	ldi R17,0
	rcall _delay_nms
	.dbline 41
; 			temp=JP_IN&0xF0;
	in R24,0x13
	andi R24,240
	mov R10,R24
	.dbline 42
; 			if(temp!=0xF0)
	cpi R24,240
	brne X2
	rjmp L9
X2:
	.dbline 43
; 				{
	.dbline 44
; 				temp&=0xF0;
	andi R24,240
	mov R10,R24
	.dbline 45
; 				switch(temp)
	mov R20,R24
	clr R21
	cpi R20,176
	ldi R30,0
	cpc R21,R30
	breq L15
	ldi R24,176
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L19
L18:
	cpi R20,112
	ldi R30,0
	cpc R21,R30
	breq L14
	rjmp L11
L19:
	cpi R20,208
	ldi R30,0
	cpc R21,R30
	breq L16
	cpi R20,208
	ldi R30,0
	cpc R21,R30
	brge X3
	rjmp L11
X3:
L20:
	cpi R20,224
	ldi R30,0
	cpc R21,R30
	breq L17
	rjmp L11
X0:
	.dbline 46
; 					{
L14:
	.dbline 47
; 					case 0x70:temp=15-(3-i)*4;break;
	ldi R24,3
	sub R24,R22
	lsl R24
	lsl R24
	ldi R25,15
	mov R10,R25
	sub R10,R24
	.dbline 47
	rjmp L12
L15:
	.dbline 48
; 					case 0xb0:temp=14-(3-i)*4;break;
	ldi R24,3
	sub R24,R22
	lsl R24
	lsl R24
	ldi R25,14
	mov R10,R25
	sub R10,R24
	.dbline 48
	rjmp L12
L16:
	.dbline 49
; 					case 0xd0:temp=13-(3-i)*4;break;
	ldi R24,3
	sub R24,R22
	lsl R24
	lsl R24
	ldi R25,13
	mov R10,R25
	sub R10,R24
	.dbline 49
	rjmp L12
L17:
	.dbline 50
; 					case 0xe0:temp=12-(3-i)*4;break;
	ldi R24,3
	sub R24,R22
	lsl R24
	lsl R24
	ldi R25,12
	mov R10,R25
	sub R10,R24
	.dbline 50
	rjmp L12
L11:
	.dbline 51
; 					default:temp=0x7F;					
	ldi R24,127
	mov R10,R24
	.dbline 52
; 					}
L12:
	.dbline 53
; 				temp=keyset[temp];				
	ldi R24,<_keyset
	ldi R25,>_keyset
	mov R2,R10
	clr R3
	add R2,R24
	adc R3,R25
	mov R30,R2
	mov R31,R3
	lpm
	mov R10,R0
	.dbline 54
; 				return temp;
	mov R16,R10
	rjmp L2
L9:
	.dbline 56
; 				}			
; 			}
L7:
	.dbline 57
	ldi R24,127
	out 0x15,R24
	.dbline 58
L4:
	.dbline 33
	inc R22
L6:
	.dbline 33
	cpi R22,4
	brsh X4
	rjmp L3
X4:
	.dbline 59
; 		JP=0x7F;		
; 		}	 
; 	 return 0x7F;
	ldi R16,127
	.dbline -2
L2:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r temp 10 c
	.dbend
	.dbfunc e keypad _keypad fc
;          temp1 -> R20
;          temp2 -> R22
	.even
_keypad::
	rcall push_gset2
	.dbline -1
	.dbline 62
; 	 }	 
; unsigned char keypad(void)
; 	{
	.dbline 64
; 	unsigned char temp1,temp2;
; 	temp1=scan_key();
	rcall _scan_key
	mov R20,R16
	.dbline 65
; 	if(temp1==0x7F)
	cpi R16,127
	brne L22
	.dbline 66
; 		return 0x7F;
	ldi R16,127
	rjmp L21
L22:
L24:
	.dbline 68
; 	do 
; 	    temp2=scan_key();
	rcall _scan_key
	mov R22,R16
L25:
	.dbline 69
; 	while(temp1==temp2);
	cp R20,R22
	breq L24
	.dbline 70
; 	return temp1;		
	mov R16,R20
	.dbline -2
L21:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp1 20 c
	.dbsym r temp2 22 c
	.dbend

⌨️ 快捷键说明

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