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

📄 键盘.s

📁 本文为4*4键盘扫描程序
💻 S
字号:
	.module _键盘.c
	.area text(rom, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
_A::
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 125,7
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 'w,127
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 57,63
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.blkb 2
	.area idata
	.byte 'y,'q
	.area data(ram, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.dbsym e A _A A[16:16]c
	.area text(rom, con, rel)
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;              x -> R16,R17
	.even
_delay::
	xcall push_xgsetF000
	.dbline -1
	.dbline 10
; //ICC-AVR application builder : 2008-10-16 19:41:41
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; unsigned char A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x79,0x71};
; 
; void delay(unsigned int x)
; {
	.dbline 12
; int i,j;
; for(i=0;i<x;i++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 13
; for(j=0;j<8000;j++)
	clr R22
	clr R23
L6:
	.dbline 14
; ;
L7:
	.dbline 13
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 13
	cpi R22,64
	ldi R30,31
	cpc R23,R30
	brlt L6
X0:
L3:
	.dbline 12
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 12
	cp R20,R16
	cpc R21,R17
	brlo L2
X1:
	.dbline -2
L1:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r i 20 I
	.dbsym r j 22 I
	.dbsym r x 16 i
	.dbend
	.dbfunc e read_key _read_key fc
;              l -> <dead>
;              k -> <dead>
;      key_value -> R10
;              j -> R22
;              i -> R20
	.even
_read_key::
	xcall push_xgsetF00C
	mov R20,R16
	.dbline -1
	.dbline 18
; }
; 
; unsigned char read_key(unsigned char i)
; {
	.dbline 19
; unsigned char j,k,l,key_value=0;
	clr R10
	.dbline 20
; PORTD=0x0F;
	ldi R24,15
	out 0x12,R24
	.dbline 22
; //DDRD=0xF0;
; if((PIND&0X0f)==0x0f) return 0xff;
	in R24,0x10
	andi R24,15
	cpi R24,15
	brne L11
X2:
	.dbline 22
	ldi R16,255
	xjmp L10
L11:
	.dbline 24
; else
; {delay(5);
	.dbline 24
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 25
; if((PIND&0x0f)==0x0f) return 0xff;
	in R24,0x10
	andi R24,15
	cpi R24,15
	brne L13
X3:
	.dbline 25
	ldi R16,255
	xjmp L10
L13:
	.dbline 27
; else
;       for(i=4;i<8;i++)
	ldi R20,4
	xjmp L18
L15:
	.dbline 28
; 	  {   
	.dbline 29
; 	PORTD=~(1<<i)| 0x0f;
	ldi R16,1
	mov R17,R20
	xcall lsl8
	mov R24,R16
	com R24
	ori R24,15
	out 0x12,R24
	.dbline 30
; 	for(j=0;j<4;j++)
	clr R22
	xjmp L22
L19:
	.dbline 31
; 		{
	.dbline 32
; 	 	if((PIND&(1<<j))==0)
	ldi R16,1
	mov R17,R22
	xcall lsl8
	in R2,0x10
	and R2,R16
	brne L23
X4:
	.dbline 33
; 		key_value=(i-4)*4+j;
	mov R24,R20
	subi R24,4
	mov R10,R24
	lsl R10
	lsl R10
	add R10,R22
L23:
	.dbline 34
; 		}
L20:
	.dbline 30
	inc R22
L22:
	.dbline 30
	cpi R22,4
	brlo L19
X5:
	.dbline 35
;     }
L16:
	.dbline 27
	inc R20
L18:
	.dbline 27
	cpi R20,8
	brlo L15
X6:
	.dbline 36
;    return key_value;
	mov R16,R10
	.dbline -2
L10:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym l l 1 c
	.dbsym l k 1 c
	.dbsym r key_value 10 c
	.dbsym r j 22 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e main _main fV
	.area  func_lit(rom, con, rel)
L63:
	.word `L32
	.word `L33
	.word `L35
	.word `L37
	.word `L39
	.word `L41
	.word `L43
	.word `L45
	.word `L47
	.word `L49
	.word `L51
	.word `L53
	.word `L55
	.word `L57
	.word `L59
	.word `L61
	.area text(rom, con, rel)
;              m -> R10
	.even
_main::
	.dbline -1
	.dbline 40
;   }
; }
; void main()
; {
	.dbline 42
; unsigned char m;
; PORTA=0xFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 43
; DDRA=0xFF;
	out 0x1a,R24
	.dbline 44
; PORTD=0x0F;
	ldi R24,15
	out 0x12,R24
	.dbline 45
; DDRD=0xF0;
	ldi R24,240
	out 0x11,R24
	xjmp L27
L26:
	.dbline 47
; while(1)
; {
	.dbline 48
; m=read_key(4);
	ldi R16,4
	xcall _read_key
	mov R10,R16
	.dbline 49
; switch(m)
	mov R20,R10
	clr R21
	cpi R20,0
	ldi R30,0
	cpc R21,R30
	brge X11
	xjmp L29
X11:
X7:
	ldi R24,15
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X12
	xjmp L29
X12:
X8:
	ldi R24,<L63
	ldi R25,>L63
	movw R30,R20
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	lpm R2,Z+
	lpm R3,Z
	movw R30,R2
	 ijmp
X9:
	.dbfile D:\学习工具\单片机程序\键盘\键盘.c
	.dbline 50
; {
L32:
	.dbline 52
;  
;  case 0:PORTA=A[0];break;
	lds R2,_A
	out 0x1b,R2
	.dbline 52
	xjmp L30
L33:
	.dbline 53
;  case 1:PORTA=A[1];break;
	lds R2,_A+1
	out 0x1b,R2
	.dbline 53
	xjmp L30
L35:
	.dbline 54
;  case 2:PORTA=A[2];break;
	lds R2,_A+2
	out 0x1b,R2
	.dbline 54
	xjmp L30
L37:
	.dbline 55
;  case 3:PORTA=A[3];break;
	lds R2,_A+3
	out 0x1b,R2
	.dbline 55
	xjmp L30
L39:
	.dbline 56
;  case 4:PORTA=A[4];break;
	lds R2,_A+4
	out 0x1b,R2
	.dbline 56
	xjmp L30
L41:
	.dbline 57
;  case 5:PORTA=A[5];break;
	lds R2,_A+5
	out 0x1b,R2
	.dbline 57
	xjmp L30
L43:
	.dbline 58
;  case 6:PORTA=A[6];break;
	lds R2,_A+6
	out 0x1b,R2
	.dbline 58
	xjmp L30
L45:
	.dbline 59
;  case 7:PORTA=A[7];break;
	lds R2,_A+7
	out 0x1b,R2
	.dbline 59
	xjmp L30
L47:
	.dbline 60
;  case 8:PORTA=A[8];break;
	lds R2,_A+8
	out 0x1b,R2
	.dbline 60
	xjmp L30
L49:
	.dbline 61
;  case 9:PORTA=A[9];break;
	lds R2,_A+9
	out 0x1b,R2
	.dbline 61
	xjmp L30
L51:
	.dbline 62
;  case 10:PORTA=A[10];break;
	lds R2,_A+10
	out 0x1b,R2
	.dbline 62
	xjmp L30
L53:
	.dbline 63
;  case 11:PORTA=A[11];break;
	lds R2,_A+11
	out 0x1b,R2
	.dbline 63
	xjmp L30
L55:
	.dbline 64
;  case 12:PORTA=A[12];break;
	lds R2,_A+12
	out 0x1b,R2
	.dbline 64
	xjmp L30
L57:
	.dbline 65
;  case 13:PORTA=A[13];break;
	lds R2,_A+13
	out 0x1b,R2
	.dbline 65
	xjmp L30
L59:
	.dbline 66
;  case 14:PORTA=A[14];break;
	lds R2,_A+14
	out 0x1b,R2
	.dbline 66
	xjmp L30
L61:
	.dbline 67
;  case 15:PORTA=A[15];break;
	lds R2,_A+15
	out 0x1b,R2
	.dbline 67
L29:
L30:
	.dbline 69
; }
; }
L27:
	.dbline 46
	xjmp L26
X10:
	.dbline -2
L25:
	.dbline 0 ; func end
	ret
	.dbsym r m 10 c
	.dbend
; }

⌨️ 快捷键说明

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