📄 key_new.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 + -