?? key.s
字號:
.module key.c
.area text(rom, con, rel)
.dbfile D:\ICCAVR~1\模塊化~1\src\key.c
.dbfunc e key_scan _key_scan fc
; keynum -> R12
; x -> R20
; keytemp -> R10
; y -> R22
.even
_key_scan::
xcall push_xgsetF03C
.dbline -1
.dbline 13
; #include "common.h"
;
; unsigned char key_scan(void);
;
; /********************************************************************************************
; * 函數(shù)名稱:key_scan()
; * 功 能:返回用戶按下的鍵盤所對應的鍵盤號
; * 入口參數(shù):無
; * 出口參數(shù):返回0表示沒有鍵盤被按動,返回1~24對應被按動的鍵盤
; * 說 明:用戶可根據(jù)自己的鍵盤編號修改該函數(shù)
; *********************************************************************************************/
; unsigned char key_scan(void)
; {
.dbline 17
; unsigned char x,y;
; unsigned char keynum;
; unsigned char keytemp;
; for(x=0;x<4;x++)
clr R20
xjmp L5
L2:
.dbline 18
; {
.dbline 19
; PORTB=~(1<<x);
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 20
; keytemp=PINE;
in R10,0x1
.dbline 21
; for(y=0;y<4;y++)
clr R22
xjmp L9
L6:
.dbline 22
; {
.dbline 23
; if(((keytemp>>y)&0x01)!=0)
mov R16,R10
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,1
breq L10
X0:
.dbline 24
; {
.dbline 25
; delay_nms(5);
ldi R16,5
ldi R17,0
xcall _delay_nms
.dbline 26
; if(((keytemp>>y)&0x01)!=0)
mov R16,R10
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,1
breq L12
X1:
.dbline 27
; {
.dbline 28
; keynum=6*x+y;
ldi R24,6
mul R24,R20
mov R12,R0
add R12,R22
.dbline 29
; return (keynum+1);
mov R16,R12
subi R16,255 ; addi 1
xjmp L1
L12:
.dbline 31
; }
; }
L10:
.dbline 32
; }
L7:
.dbline 21
inc R22
L9:
.dbline 21
cpi R22,4
brlo L6
X2:
.dbline 33
; }
L3:
.dbline 17
inc R20
L5:
.dbline 17
cpi R20,4
brlo L2
X3:
.dbline -2
L1:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r keynum 12 c
.dbsym r x 20 c
.dbsym r keytemp 10 c
.dbsym r y 22 c
.dbend
; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -