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

📄 mkey.s

📁 AVR单片机视频教程的课件和每一次课的源程序是学习AVR单片机的首选 第5节
💻 S
字号:
	.module mkey.c
	.area code(ram, con, rel)
	.area lit(rom, con, rel)
_table::
	.word 63
	.word 6
	.word 91
	.word 79
	.word 102
	.word 109
	.word 125
	.word 7
	.word 127
	.word 111
	.word 119
	.word 124
	.word 57
	.word 94
	.word 121
	.word 113
	.word 255
	.dbfile I:\AVR视频教程\视频教程\lesson5\mkey\mkey.c
	.dbsym e table _table A[34:17]I
	.area text(rom, con, rel)
	.dbfile I:\AVR视频教程\视频教程\lesson5\mkey\mkey.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	rcall push_gset2
	.dbline -1
	.dbline 9
; #include <iom16v.h>
; #include <macros.h>
; #define  uchar unsigned char
; #define  uint  unsigned int
; #pragma data:code 
; const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
; 		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
; void delay(uint ms)
; {
	.dbline 11
;         uint i,j;
; 	for(i=0;i<ms;i++)
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 12
; 	   {
	.dbline 13
	clr R22
	clr R23
	rjmp L9
L6:
	.dbline 13
L7:
	.dbline 13
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 13
	cpi R22,117
	ldi R30,4
	cpc R23,R30
	brlo L6
	.dbline 14
L3:
	.dbline 11
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 11
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
	.dbline 15
; 	   for(j=0;j<1141;j++);
;        }
; }
L1:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e show _show fV
;              k -> R20
;              j -> R22
	.even
_show::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 17
; void show(uchar j,uchar k)
; {
	.dbline 18
;         PORTA|=BIT(3);
	sbi 0x1b,3
	.dbline 19
; 	PORTB=table[j];
	ldi R24,<_table
	ldi R25,>_table
	mov R16,R22
	clr R17
	lsl R16
	rol R17
	add R16,R24
	adc R17,R25
	rcall lpm16
	out 0x18,R16
	.dbline 20
; 	PORTA&=~BIT(3);
	cbi 0x1b,3
	.dbline 22
; 	
; 	PORTB=0XFF;
	ldi R24,255
	out 0x18,R24
	.dbline 23
; 	PORTB&=~BIT(k);
	ldi R16,1
	mov R17,R20
	rcall lsl8
	mov R2,R16
	com R2
	in R3,0x18
	and R3,R2
	out 0x18,R3
	.dbline 24
; 	PORTA|=BIT(4);
	sbi 0x1b,4
	.dbline 25
; 	PORTA&=~BIT(4);
	cbi 0x1b,4
	.dbline 26
; 	delay(1);
	ldi R16,1
	ldi R17,0
	rcall _delay
	.dbline -2
	.dbline 27
; }
L10:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e key_press _key_press fc
;              i -> R16
	.even
_key_press::
	.dbline -1
	.dbline 29
; uchar key_press()
; {
	.dbline 31
;      uchar i;
;      DDRD=0XFF;
	ldi R24,255
	out 0x11,R24
	.dbline 32
; 	 PORTD=0XF0;
	ldi R24,240
	out 0x12,R24
	.dbline 34
; 	 
; 	 DDRD=0X0F;
	ldi R24,15
	out 0x11,R24
	.dbline 36
; 	 
; 	 i=PIND;
	in R16,0x10
	.dbline 37
; 	 if(i==0XF0)
	cpi R16,240
	brne L12
	.dbline 38
; 	 {
	.dbline 39
; 	   DDRD=0XFF;
	ldi R24,255
	out 0x11,R24
	.dbline 40
; 	   return 0;
	clr R16
	rjmp L11
L12:
	.dbline 43
; 	 }
; 	 else
; 	 {
	.dbline 44
; 	   DDRD=0XFF;
	ldi R24,255
	out 0x11,R24
	.dbline 45
; 	   return 1;
	ldi R16,1
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e key_scan _key_scan fc
;              j -> R22
;            key -> R20
;              i -> R10
	.even
_key_scan::
	rcall push_gset3
	.dbline -1
	.dbline 50
; 	 }
; }
; 
; uchar key_scan()
; {
	.dbline 51
;      uchar key,i=0X7F,j;
	ldi R24,127
	mov R10,R24
	.dbline 52
;      delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 53
; 	 if(key_press())
	rcall _key_press
	tst R16
	brne X1
	rjmp L15
X1:
	.dbline 54
; 	 {
L17:
	.dbline 56
; 	    do
; 		{
	.dbline 57
; 		 i=(i<<1|i>>7);
	mov R2,R10
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	mov R3,R10
	lsl R3
	or R3,R2
	mov R10,R3
	.dbline 58
; 		 PORTD=i;
	out 0x12,R3
	.dbline 59
; 		 DDRD=0X0F;
	ldi R24,15
	out 0x11,R24
	.dbline 61
; 		 
; 		 key=PIND;
	in R20,0x10
	.dbline 62
; 		 j=key&0XF0;
	mov R22,R20
	andi R22,240
	.dbline 64
L18:
	.dbline 64
; 		 
; 	    }while(j==0XF0);
	cpi R22,240
	breq L17
L20:
	.dbline 66
L21:
	.dbline 66
; 		
; 		while(key_press());
	rcall _key_press
	tst R16
	brne L20
	.dbline 67
; 		switch(key)
	mov R22,R20
	clr R23
	cpi R22,183
	ldi R30,0
	cpc R23,R30
	brne X2
	rjmp L40
X2:
	cpi R22,187
	ldi R30,0
	cpc R23,R30
	brne X3
	rjmp L36
X3:
	cpi R22,189
	ldi R30,0
	cpc R23,R30
	brne X4
	rjmp L32
X4:
	cpi R22,190
	ldi R30,0
	cpc R23,R30
	brne X5
	rjmp L28
X5:
	ldi R24,190
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L43
L42:
	cpi R22,119
	ldi R30,0
	cpc R23,R30
	brne X6
	rjmp L41
X6:
	cpi R22,123
	ldi R30,0
	cpc R23,R30
	brne X7
	rjmp L37
X7:
	cpi R22,125
	ldi R30,0
	cpc R23,R30
	brne X8
	rjmp L33
X8:
	cpi R22,126
	ldi R30,0
	cpc R23,R30
	breq L29
	rjmp L23
L43:
	cpi R22,215
	ldi R30,0
	cpc R23,R30
	brne X9
	rjmp L39
X9:
	cpi R22,219
	ldi R30,0
	cpc R23,R30
	breq L35
	cpi R22,221
	ldi R30,0
	cpc R23,R30
	breq L31
	cpi R22,222
	ldi R30,0
	cpc R23,R30
	breq L27
	cpi R22,215
	ldi R30,0
	cpc R23,R30
	brge X10
	rjmp L23
X10:
L44:
	cpi R22,231
	ldi R30,0
	cpc R23,R30
	breq L38
	cpi R22,235
	ldi R30,0
	cpc R23,R30
	breq L34
	cpi R22,237
	ldi R30,0
	cpc R23,R30
	breq L30
	cpi R22,238
	ldi R30,0
	cpc R23,R30
	breq L26
	rjmp L23
X0:
	.dbline 68
; 		{
L26:
	.dbline 70
;        case 0xEE:
; 	   		key=0x0;
	clr R20
	.dbline 71
; 			break;
	rjmp L16
L27:
	.dbline 73
; 	   case 0xDE:
; 	   		key=0x1;
	ldi R20,1
	.dbline 74
; 			break; 
	rjmp L16
L28:
	.dbline 76
; 	   case 0xBE:
; 	   		key=0x2;
	ldi R20,2
	.dbline 77
; 			break;
	rjmp L16
L29:
	.dbline 79
; 	   case 0x7E:
; 	   		key=0x3;
	ldi R20,3
	.dbline 80
; 			break;
	rjmp L16
L30:
	.dbline 82
; 	   case 0xED:
; 	   		key=0x4;
	ldi R20,4
	.dbline 83
; 			break;
	rjmp L16
L31:
	.dbline 85
; 	   case 0xDD:
; 	   		key=0x5;
	ldi R20,5
	.dbline 86
; 			break;
	rjmp L16
L32:
	.dbline 88
; 	   case 0xBD:
; 	   		key=0x6;
	ldi R20,6
	.dbline 89
; 			break;
	rjmp L16
L33:
	.dbline 91
; 	   case 0x7D:
; 	   		key=0x7;
	ldi R20,7
	.dbline 92
; 			break;
	rjmp L16
L34:
	.dbline 94
; 	   case 0xEB:
; 	   		key=0x8;
	ldi R20,8
	.dbline 95
; 			break;
	rjmp L16
L35:
	.dbline 97
; 	   case 0xDB:
; 	   		key=0x9;
	ldi R20,9
	.dbline 98
; 			break;
	rjmp L16
L36:
	.dbline 100
; 	   case 0xBB:
; 	   		key=0xA;
	ldi R20,10
	.dbline 101
; 			break;
	rjmp L16
L37:
	.dbline 103
; 	   case 0x7B:
; 	   		key=0xB;
	ldi R20,11
	.dbline 104
; 			break;
	rjmp L16
L38:
	.dbline 106
; 	   case 0xE7:
; 	   		key=0xC;
	ldi R20,12
	.dbline 107
; 			break;
	rjmp L16
L39:
	.dbline 109
; 	   case 0xD7:
; 	   		key=0xD;
	ldi R20,13
	.dbline 110
; 			break;
	rjmp L16
L40:
	.dbline 112
; 	   case 0xB7:
; 	   		key=0xE;
	ldi R20,14
	.dbline 113
; 			break;
	rjmp L16
L41:
	.dbline 115
; 	   case 0x77:
; 	   		key=0xF;
	ldi R20,15
	.dbline 116
; 			break;
	rjmp L16
L23:
	.dbline 118
; 	   default:
; 	        key=16;		
	ldi R20,16
	.dbline 119
; 		}
	.dbline 120
; 	 }
	rjmp L16
L15:
	.dbline 122
; 	 else
; 	 {
	.dbline 123
; 	    key=16;
	ldi R20,16
	.dbline 124
; 	 }
L16:
	.dbline 125
; 	 return key;
	mov R16,R20
	.dbline -2
L14:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r j 22 c
	.dbsym r key 20 c
	.dbsym r i 10 c
	.dbend
	.dbfunc e main _main fV
;              l -> R20
	.even
_main::
	.dbline -1
	.dbline 128
; }
; void main()
; {
	.dbline 130
;      uchar l;
;      DDRA|=0X18;// 0001 1000
	in R24,0x1a
	ori R24,24
	out 0x1a,R24
	.dbline 131
;  	 DDRB=0XFF;
	ldi R24,255
	out 0x17,R24
	rjmp L47
L46:
	.dbline 133
; 	 while(1)
; 	 {
	.dbline 134
; 	   if(key_press())
	rcall _key_press
	tst R16
	breq L49
	.dbline 135
; 	   {
	.dbline 136
; 	      l=key_scan();
	rcall _key_scan
	mov R20,R16
	.dbline 137
; 		  show(l,0);
	clr R18
	rcall _show
	.dbline 138
; 	   }
L49:
	.dbline 139
L47:
	.dbline 132
	rjmp L46
X11:
	.dbline -2
	.dbline 141
; 	 }
; 	 
; }
L45:
	.dbline 0 ; func end
	ret
	.dbsym r l 20 c
	.dbend

⌨️ 快捷键说明

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