📄 key.lis
字号:
.module key.c
.area text(rom, con, rel)
0000 .dbfile C:\BJQD\key.c
0000 .dbfunc e key_init _key_init fV
.even
0000 _key_init::
0000 .dbline -1
0000 .dbline 18
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <eeprom.h>
0000 ; #include "delay.h"
0000 ; #include "key.h"
0000 ; #include "main.h"
0000 ;
0000 ; extern unsigned char state;
0000 ; extern unsigned char state0;
0000 ; extern unsigned char state_other;
0000 ; extern unsigned char key;
0000 ; extern unsigned char state2;
0000 ; extern unsigned char in_out_number;
0000 ; /****************************************************
0000 ; 键盘初始化函数
0000 ; ****************************************************/
0000 ; void key_init(void)
0000 ; {
0000 .dbline 19
0000 ; SFIOR&=0b11111011;
0000 80B7 in R24,0x30
0002 8B7F andi R24,251
0004 80BF out 0x30,R24
0006 .dbline -2
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
0008 .dbend
0008 .dbfunc e out_init _out_init fV
.even
0008 _out_init::
0008 .dbline -1
0008 .dbline 24
0008 ; }
0008 ;
0008 ; /*外控初始化*/
0008 ; void out_init(void)
0008 ; {
0008 .dbline 25
0008 ; PINA&=~((1<<EX_RS)|(1<<EX_ZF));
0008 89B3 in R24,0x19
000A 8F73 andi R24,63
000C 89BB out 0x19,R24
000E .dbline 26
000E ; PORTA|=(1<<EX_RS)|(1<<EX_ZF);
000E 8BB3 in R24,0x1b
0010 806C ori R24,192
0012 8BBB out 0x1b,R24
0014 .dbline 27
0014 ; PIND&=~(1<<EX_PULL);
0014 8298 cbi 0x10,2
0016 .dbline 28
0016 ; PORTD|=(1<<EX_PULL);
0016 929A sbi 0x12,2
0018 .dbline -2
0018 L2:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e scan_key _scan_key fc
001A ; what_key -> R16
.even
001A _scan_key::
001A .dbline -1
001A .dbline 38
001A ; }
001A ; /****************************************************
001A ; 键盘扫描函数,注意本函数不作按键释放检查
001A ; 返回值:1、没有键按下返回0x7f
001A ; 2、如果shift按下,返回值最高位为1
001A ; 3、其余键按下时,返回键名对应数值
001A ;
001A ; ****************************************************/
001A ; unsigned char scan_key(void)
001A ; {
001A .dbline 40
001A ; unsigned char what_key;
001A ; what_key=0;
001A 0027 clr R16
001C .dbline 41
001C ; return what_key; //返回按键值
001C .dbline -2
001C L3:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r what_key 16 c
001E .dbend
001E .dbfunc e rs _rs fV
.even
001E _rs::
001E .dbline -1
001E .dbline 46
001E ; }
001E ;
001E ;
001E ; void rs(void)
001E ; {
001E .dbline 47
001E ; key=runstop_nu;
001E 81E0 ldi R24,1
0020 80930000 sts _key,R24
0024 .dbline -2
0024 L4:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e zf _zf fV
.even
0026 _zf::
0026 .dbline -1
0026 .dbline 51
0026 ; }
0026 ;
0026 ; void zf(void)
0026 ; {
0026 .dbline 52
0026 ; key=cwccw_nu;
0026 82E0 ldi R24,2
0028 80930000 sts _key,R24
002C .dbline -2
002C L5:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbend
002E .dbfunc e out_key _out_key fV
002E ; sta0 -> R22
002E ; sta -> R20
002E ; i -> R22
.even
002E _out_key::
002E 0E940000 xcall push_gset2
0032 .dbline -1
0032 .dbline 57
0032 ; }
0032 ;
0032 ; /*外控按键处理函数*/
0032 ; void out_key(void)//abcd
0032 ; {
0032 .dbline 61
0032 ; unsigned char i;
0032 ; unsigned char sta;
0032 ; unsigned char sta0;
0032 ; sta=state;
0032 40910000 lds R20,_state
0036 .dbline 62
0036 ; sta0=state0;
0036 60910000 lds R22,_state0
003A .dbline 65
003A ;
003A ; //正反转
003A ; if (in_out_number>=2)
003A 80910000 lds R24,_in_out_number
003E 8230 cpi R24,2
0040 A0F0 brlo L7
0042 .dbline 66
0042 ; {
0042 .dbline 67
0042 ; i=PINA;
0042 69B3 in R22,0x19
0044 .dbline 68
0044 ; if ((i&(1<<EX_RS))==0) //高电平
0044 66FD sbrc R22,6
0046 04C0 rjmp L9
0048 .dbline 69
0048 ; {
0048 .dbline 70
0048 ; if (sta&(1<<RUN_STOP)) //启停判断
0048 43FF sbrs R20,3
004A 05C0 rjmp L10
004C .dbline 71
004C ; {rs();}
004C .dbline 71
004C E8DF xcall _rs
004E .dbline 71
004E .dbline 72
004E ; }
004E 03C0 xjmp L10
0050 L9:
0050 .dbline 74
0050 ; else //低电平
0050 ; {
0050 .dbline 75
0050 ; if ((sta&(1<<RUN_STOP))==0) //启停判断
0050 43FD sbrc R20,3
0052 01C0 rjmp L13
0054 .dbline 76
0054 ; {rs();}
0054 .dbline 76
0054 E4DF xcall _rs
0056 .dbline 76
0056 L13:
0056 .dbline 77
0056 ; }
0056 L10:
0056 .dbline 78
0056 ; i=PINA;
0056 69B3 in R22,0x19
0058 .dbline 79
0058 ; if ((i&(1<<EX_ZF))==0) //高电平
0058 67FD sbrc R22,7
005A 04C0 rjmp L15
005C .dbline 80
005C ; {
005C .dbline 81
005C ; if (sta&(1<<CW_CCW)) //正反判断
005C 40FF sbrs R20,0
005E 05C0 rjmp L16
0060 .dbline 82
0060 ; {zf();}
0060 .dbline 82
0060 E2DF xcall _zf
0062 .dbline 82
0062 .dbline 83
0062 ; }
0062 03C0 xjmp L16
0064 L15:
0064 .dbline 85
0064 ; else //低电平
0064 ; {
0064 .dbline 86
0064 ; if ((sta&(1<<CW_CCW))==0) //正反判断
0064 40FD sbrc R20,0
0066 01C0 rjmp L19
0068 .dbline 87
0068 ; {zf();}
0068 .dbline 87
0068 DEDF xcall _zf
006A .dbline 87
006A L19:
006A .dbline 88
006A ; }
006A L16:
006A .dbline 89
006A L7:
006A .dbline -2
006A L6:
006A 0E940000 xcall pop_gset2
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbsym r sta0 22 c
0070 .dbsym r sta 20 c
0070 .dbsym r i 22 c
0070 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -