📄 key.s
字号:
.module key.c
.area text(rom, con, rel)
.dbfile C:\BJQD\key.c
.dbfunc e key_init _key_init fV
.even
_key_init::
.dbline -1
.dbline 18
; #include <iom16v.h>
; #include <macros.h>
; #include <eeprom.h>
; #include "delay.h"
; #include "key.h"
; #include "main.h"
;
; extern unsigned char state;
; extern unsigned char state0;
; extern unsigned char state_other;
; extern unsigned char key;
; extern unsigned char state2;
; extern unsigned char in_out_number;
; /****************************************************
; 键盘初始化函数
; ****************************************************/
; void key_init(void)
; {
.dbline 19
; SFIOR&=0b11111011;
in R24,0x30
andi R24,251
out 0x30,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e out_init _out_init fV
.even
_out_init::
.dbline -1
.dbline 24
; }
;
; /*外控初始化*/
; void out_init(void)
; {
.dbline 25
; PINA&=~((1<<EX_RS)|(1<<EX_ZF));
in R24,0x19
andi R24,63
out 0x19,R24
.dbline 26
; PORTA|=(1<<EX_RS)|(1<<EX_ZF);
in R24,0x1b
ori R24,192
out 0x1b,R24
.dbline 27
; PIND&=~(1<<EX_PULL);
cbi 0x10,2
.dbline 28
; PORTD|=(1<<EX_PULL);
sbi 0x12,2
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e scan_key _scan_key fc
; what_key -> R16
.even
_scan_key::
.dbline -1
.dbline 38
; }
; /****************************************************
; 键盘扫描函数,注意本函数不作按键释放检查
; 返回值:1、没有键按下返回0x7f
; 2、如果shift按下,返回值最高位为1
; 3、其余键按下时,返回键名对应数值
;
; ****************************************************/
; unsigned char scan_key(void)
; {
.dbline 40
; unsigned char what_key;
; what_key=0;
clr R16
.dbline 41
; return what_key; //返回按键值
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r what_key 16 c
.dbend
.dbfunc e rs _rs fV
.even
_rs::
.dbline -1
.dbline 46
; }
;
;
; void rs(void)
; {
.dbline 47
; key=runstop_nu;
ldi R24,1
sts _key,R24
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e zf _zf fV
.even
_zf::
.dbline -1
.dbline 51
; }
;
; void zf(void)
; {
.dbline 52
; key=cwccw_nu;
ldi R24,2
sts _key,R24
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e out_key _out_key fV
; sta0 -> R22
; sta -> R20
; i -> R22
.even
_out_key::
xcall push_gset2
.dbline -1
.dbline 57
; }
;
; /*外控按键处理函数*/
; void out_key(void)//abcd
; {
.dbline 61
; unsigned char i;
; unsigned char sta;
; unsigned char sta0;
; sta=state;
lds R20,_state
.dbline 62
; sta0=state0;
lds R22,_state0
.dbline 65
;
; //正反转
; if (in_out_number>=2)
lds R24,_in_out_number
cpi R24,2
brlo L7
.dbline 66
; {
.dbline 67
; i=PINA;
in R22,0x19
.dbline 68
; if ((i&(1<<EX_RS))==0) //高电平
sbrc R22,6
rjmp L9
.dbline 69
; {
.dbline 70
; if (sta&(1<<RUN_STOP)) //启停判断
sbrs R20,3
rjmp L10
.dbline 71
; {rs();}
.dbline 71
xcall _rs
.dbline 71
.dbline 72
; }
xjmp L10
L9:
.dbline 74
; else //低电平
; {
.dbline 75
; if ((sta&(1<<RUN_STOP))==0) //启停判断
sbrc R20,3
rjmp L13
.dbline 76
; {rs();}
.dbline 76
xcall _rs
.dbline 76
L13:
.dbline 77
; }
L10:
.dbline 78
; i=PINA;
in R22,0x19
.dbline 79
; if ((i&(1<<EX_ZF))==0) //高电平
sbrc R22,7
rjmp L15
.dbline 80
; {
.dbline 81
; if (sta&(1<<CW_CCW)) //正反判断
sbrs R20,0
rjmp L16
.dbline 82
; {zf();}
.dbline 82
xcall _zf
.dbline 82
.dbline 83
; }
xjmp L16
L15:
.dbline 85
; else //低电平
; {
.dbline 86
; if ((sta&(1<<CW_CCW))==0) //正反判断
sbrc R20,0
rjmp L19
.dbline 87
; {zf();}
.dbline 87
xcall _zf
.dbline 87
L19:
.dbline 88
; }
L16:
.dbline 89
L7:
.dbline -2
L6:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r sta0 22 c
.dbsym r sta 20 c
.dbsym r i 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -