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

📄 key_new.s

📁 meg64实现LED,一个跑马灯程序,内容包括一部分初始化程序代码.
💻 S
字号:
	.module key_new.c
	.area text(rom, con, rel)
	.dbfile F:\AVR最新\HaiFeng\key可用\key_new\ICCAVR\key_new.c
	.dbfunc e delay _delay fV
;              t -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 4
; #include <iom128v.h>
; #include <macros.h>
; void delay(unsigned int t) //延时函数
; {
L2:
	.dbline 5
;  	 	while(t--);
L3:
	.dbline 5
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L2
	tst R3
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r t 16 i
	.dbend
	.area lit(rom, con, rel)
L6:
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 'w,124
	.byte 57,94
	.byte 'y,'q
	.area text(rom, con, rel)
	.dbfile F:\AVR最新\HaiFeng\key可用\key_new\ICCAVR\key_new.c
	.dbfunc e main _main fV
;          table -> y+0
;            key -> R20
	.even
_main::
	sbiw R28,16
	.dbline -1
	.dbline 9
; }
; 
; void main()
; {
	.dbline 10
;       unsigned char table[]={0x3f,0x06,0x5b,0x4f,//定义显示数据
	ldi R24,<L6
	ldi R25,>L6
	movw R30,R28
	ldi R16,16
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 15
;                              0x66,0x6d,0x7d,0x07,
;                              0x7f,0x6f,0x77,0x7c,
;                              0x39,0x5e,0x79,0x71};
;       unsigned char key; //定义键值函数
;       DDRB=0xf0;  //设置高四位为输出,低四位为输入
	ldi R24,240
	out 0x17,R24
	.dbline 16
;       PORTB|=0x0f;//打开低四位,关闭高四位,初始化A端口
	in R24,0x18
	ori R24,15
	out 0x18,R24
	.dbline 17
;       DDRD=0xff;
	ldi R24,255
	out 0x11,R24
	.dbline 18
;       PORTD=0x00;
	clr R2
	out 0x12,R2
	xjmp L8
L7:
	.dbline 20
;       while(1) 
;       {
L10:
	.dbline 22
;  		do
; 		{
	.dbline 23
; 		   		delay(16000); //延时去抖
	ldi R16,16000
	ldi R17,62
	xcall _delay
	.dbline 24
; 				PORTB=0xef;  //第一次高位输出1110
	ldi R24,239
	out 0x18,R24
	.dbline 25
; 				delay(1600);    //读数延时
	ldi R16,1600
	ldi R17,6
	xcall _delay
	.dbline 26
; 				switch((PINB&0x0f))//按键识别 (0,1,2,3)
	in R22,0x16
	clr R23
	andi R22,15
	andi R23,0
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L19
X1:
	cpi R22,11
	ldi R30,0
	cpc R23,R30
	breq L18
X2:
	cpi R22,13
	ldi R30,0
	cpc R23,R30
	breq L17
X3:
	cpi R22,14
	ldi R30,0
	cpc R23,R30
	breq L16
X4:
	xjmp L13
L16:
	.dbline 28
; 				{
; 				 		case 0x0e:key=0;break;
	clr R20
	.dbline 28
	xjmp L14
L17:
	.dbline 29
; 						case 0x0d:key=1;break;
	ldi R20,1
	.dbline 29
	xjmp L14
L18:
	.dbline 30
; 						case 0x0b:key=2;break;
	ldi R20,2
	.dbline 30
	xjmp L14
L19:
	.dbline 31
; 						case 0x07:key=3;break;
	ldi R20,3
	.dbline 31
L13:
L14:
	.dbline 33
; 				}
; 				PORTB=0xdf;  //第二次高位输出1101
	ldi R24,223
	out 0x18,R24
	.dbline 34
; 				delay(1600);
	ldi R16,1600
	ldi R17,6
	xcall _delay
	.dbline 35
; 				switch((PINB&0x0f))//按键识别 (4,5,6,7)
	in R22,0x16
	clr R23
	andi R22,15
	andi R23,0
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L26
X5:
	cpi R22,11
	ldi R30,0
	cpc R23,R30
	breq L25
X6:
	cpi R22,13
	ldi R30,0
	cpc R23,R30
	breq L24
X7:
	cpi R22,14
	ldi R30,0
	cpc R23,R30
	breq L23
X8:
	xjmp L20
L23:
	.dbline 37
; 				{
; 				                case 0x0e:key=4;break;
	ldi R20,4
	.dbline 37
	xjmp L21
L24:
	.dbline 38
; 						case 0x0d:key=5;break;
	ldi R20,5
	.dbline 38
	xjmp L21
L25:
	.dbline 39
; 						case 0x0b:key=6;break;
	ldi R20,6
	.dbline 39
	xjmp L21
L26:
	.dbline 40
; 						case 0x07:key=7;break;
	ldi R20,7
	.dbline 40
L20:
L21:
	.dbline 42
;               			} 
;                                 PORTB=0xbf; //第三次高位输出1011
	ldi R24,191
	out 0x18,R24
	.dbline 43
;                                 delay(1600);
	ldi R16,1600
	ldi R17,6
	xcall _delay
	.dbline 44
;                                 switch((PINB&0x0f))//按键识别 (8,9,a,b)
	in R22,0x16
	clr R23
	andi R22,15
	andi R23,0
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L33
X9:
	cpi R22,11
	ldi R30,0
	cpc R23,R30
	breq L32
X10:
	cpi R22,13
	ldi R30,0
	cpc R23,R30
	breq L31
X11:
	cpi R22,14
	ldi R30,0
	cpc R23,R30
	breq L30
X12:
	xjmp L27
L30:
	.dbline 46
;                                 {
;                                                 case 0x0e:key=8;break;
	ldi R20,8
	.dbline 46
	xjmp L28
L31:
	.dbline 47
;                                                 case 0x0d:key=9;break;
	ldi R20,9
	.dbline 47
	xjmp L28
L32:
	.dbline 48
;                                                 case 0x0b:key=10;break;
	ldi R20,10
	.dbline 48
	xjmp L28
L33:
	.dbline 49
;                                                 case 0x07:key=11;break;
	ldi R20,11
	.dbline 49
L27:
L28:
	.dbline 51
;                                }
;                                PORTB=0x7f; //第四次高位输出0111
	ldi R24,127
	out 0x18,R24
	.dbline 52
;                                delay(1600);
	ldi R16,1600
	ldi R17,6
	xcall _delay
	.dbline 53
;                                switch((PINB&0x0f))//按键识别 (c,d,e,f)
	in R22,0x16
	clr R23
	andi R22,15
	andi R23,0
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L40
X13:
	cpi R22,11
	ldi R30,0
	cpc R23,R30
	breq L39
X14:
	cpi R22,13
	ldi R30,0
	cpc R23,R30
	breq L38
X15:
	cpi R22,14
	ldi R30,0
	cpc R23,R30
	breq L37
X16:
	xjmp L34
L37:
	.dbline 55
;                                {   
;                                                 case 0x0e:key=12;break;
	ldi R20,12
	.dbline 55
	xjmp L35
L38:
	.dbline 56
;                                                 case 0x0d:key=13;break;
	ldi R20,13
	.dbline 56
	xjmp L35
L39:
	.dbline 57
;                                                 case 0x0b:key=14;break;
	ldi R20,14
	.dbline 57
	xjmp L35
L40:
	.dbline 58
;                                                 case 0x07:key=15;break;
	ldi R20,15
	.dbline 58
L34:
L35:
	.dbline 60
;                                }
;                 }while((PINB&0x0f)!=0x0f); //按键检测
L11:
	.dbline 60
	in R24,0x16
	andi R24,15
	cpi R24,15
	breq X19
	xjmp L10
X19:
X17:
	.dbline 61
;                 PORTD=table[key];
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x12,R2
	.dbline 62
; 		delay(16000);
	ldi R16,16000
	ldi R17,62
	xcall _delay
	.dbline 63
;       }
L8:
	.dbline 19
	xjmp L7
X18:
	.dbline -2
L5:
	.dbline 0 ; func end
	adiw R28,16
	ret
	.dbsym l table 0 A[16:16]c
	.dbsym r key 20 c
	.dbend
; }

⌨️ 快捷键说明

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