📄 key.s
字号:
L37:
.dbline 140
; //处理电流/电压切换,默认状态是显示电压
; else if ( KEY_INPUT == A_V_DOWN )
lds R24,_KEY_INPUT
cpi R24,2
brne L43
.dbline 141
; {
.dbline 142
; KEY_A_V_STATE = !KEY_A_V_STATE; //切换AV状态
lds R2,_KEY_A_V_STATE
tst R2
brne L45
ldi R20,1
ldi R21,0
rjmp L46
L45:
clr R20
clr R21
L46:
sts _KEY_A_V_STATE,R20
.dbline 143
; KEY_INPUT = 0;
clr R2
sts _KEY_INPUT,R2
.dbline 144
; if ( KEY_A_V_STATE )
tst R20
breq L47
.dbline 145
; {
.dbline 146
; PORTB |= ( 1 << OUT_A ); //显示电流
sbi 0x18,7
.dbline 147
; eeprom_busy_wait();
rcall _eeprom_busy_wait
.dbline 148
; cli();
rcall _cli
.dbline 149
; eeprom_write_byte ( (char*)0x01, 0x01 );
ldi R18,1
ldi R19,0
ldi R16,1
ldi R17,0
rcall _eeprom_write_byte
.dbline 150
; sei();
rcall _sei
.dbline 151
; }
rjmp L48
L47:
.dbline 153
; else
; {
.dbline 154
; PORTB &= ~( 1 << OUT_A ); //显示电压
cbi 0x18,7
.dbline 155
; eeprom_busy_wait();
rcall _eeprom_busy_wait
.dbline 156
; cli();
rcall _cli
.dbline 157
; eeprom_write_byte ( (char*)0x01, 0x00 );
clr R18
clr R19
ldi R16,1
ldi R17,0
rcall _eeprom_write_byte
.dbline 158
; sei();
rcall _sei
.dbline 159
; }
L48:
.dbline 160
; }
L43:
L38:
.dbline 162
; //处理稳流/稳压切换,默认状态是稳流
; if ( KEY_INPUT == CC_CV_DOWN )
lds R24,_KEY_INPUT
cpi R24,4
brne L49
.dbline 163
; {
.dbline 164
; KEY_CC_CV_STATE = !KEY_CC_CV_STATE;
lds R2,_KEY_CC_CV_STATE
tst R2
brne L51
ldi R20,1
ldi R21,0
rjmp L52
L51:
clr R20
clr R21
L52:
sts _KEY_CC_CV_STATE,R20
.dbline 166
; //改变稳流/稳压按键的状态
; KEY_INPUT = 0;
clr R2
sts _KEY_INPUT,R2
.dbline 167
; if ( KEY_CC_CV_STATE )
tst R20
breq L53
.dbline 168
; {
.dbline 169
; PORTB |= ( 1 << OUT_CV ); //稳压
sbi 0x18,6
.dbline 170
; eeprom_busy_wait();
rcall _eeprom_busy_wait
.dbline 171
; cli();
rcall _cli
.dbline 172
; eeprom_write_byte ( (char*)0x05, 0x01 );
ldi R18,1
ldi R19,0
ldi R16,5
ldi R17,0
rcall _eeprom_write_byte
.dbline 173
; sei();
rcall _sei
.dbline 174
; }
rjmp L54
L53:
.dbline 176
; else
; {
.dbline 177
; PORTB &= ~( 1 << OUT_CV ); //稳流
cbi 0x18,6
.dbline 178
; eeprom_busy_wait();
rcall _eeprom_busy_wait
.dbline 179
; cli();
rcall _cli
.dbline 180
; eeprom_write_byte ( (char*)0x05, 0x00 );
clr R18
clr R19
ldi R16,5
ldi R17,0
rcall _eeprom_write_byte
.dbline 181
; sei();
rcall _sei
.dbline 182
; }
L54:
.dbline 183
; }
L49:
.dbline 185
; //处理手动/自动切换,默认状态是手动
; if ( KEY_INPUT == AUTO_MAN_DOWN )
lds R24,_KEY_INPUT
cpi R24,8
brne L22
.dbline 186
; {
.dbline 187
; KEY_AUTO_MAN_STATE = !KEY_AUTO_MAN_STATE;
lds R2,_KEY_AUTO_MAN_STATE
tst R2
brne L57
ldi R20,1
ldi R21,0
rjmp L58
L57:
clr R20
clr R21
L58:
sts _KEY_AUTO_MAN_STATE,R20
.dbline 189
; //改变手动/自动按键的状态
; KEY_INPUT = 0;
clr R2
sts _KEY_INPUT,R2
.dbline 190
; if ( KEY_AUTO_MAN_STATE )
tst R20
breq L59
.dbline 191
; {
.dbline 192
; PORTB |= ( 1 << OUT_AUTO ); //自动
sbi 0x18,5
.dbline 193
; eeprom_busy_wait();
rcall _eeprom_busy_wait
.dbline 194
; cli();
rcall _cli
.dbline 195
; eeprom_write_byte ( (char*)0x03, 0x01 );
ldi R18,1
ldi R19,0
ldi R16,3
ldi R17,0
rcall _eeprom_write_byte
.dbline 196
; sei();
rcall _sei
.dbline 197
; }
rjmp L22
L59:
.dbline 199
; else
; {
.dbline 200
; PORTB &= ~( 1 << OUT_AUTO ); //手动
cbi 0x18,5
.dbline 201
; eeprom_busy_wait();
rcall _eeprom_busy_wait
.dbline 202
; cli();
rcall _cli
.dbline 203
; eeprom_write_byte ( (char*)0x03, 0x00 );
clr R18
clr R19
ldi R16,3
ldi R17,0
rcall _eeprom_write_byte
.dbline 204
; sei();
rcall _sei
.dbline 205
; }
.dbline 206
; }
.dbline 207
; }
.dbline 208
; }
.dbline 209
; }
rjmp L22
L21:
.dbline 211
; else
; {
.dbline 212
; KEY_INPUT = KEY_TEMP = 0x00;
clr R2
sts _KEY_TEMP,R2
sts _KEY_INPUT,R2
.dbline 213
; KEY_DOWN_TIME = 0;
clr R3
sts L14+1,R3
sts L14,R2
.dbline 214
; }
L22:
.dbline 215
; if ( SET_STATU )
lds R2,_SET_STATU
tst R2
brne X9
rjmp L61
X9:
.dbline 216
; {
.dbline 217
; CHECK_EDATA_A();
rcall _CHECK_EDATA_A
.dbline 218
; if ( KEY_INPUT == POWER_DOWN )
lds R24,_KEY_INPUT
cpi R24,1
breq X10
rjmp L63
X10:
.dbline 219
; {
.dbline 220
; i++;
lds R24,L16
lds R25,L16+1
adiw R24,1
sts L16+1,R25
sts L16,R24
.dbline 221
; TIMER_NUM = 0;
clr R2
clr R3
sts _TIMER_NUM+1,R3
sts _TIMER_NUM,R2
.dbline 222
; NUM_CHANGE = TRUE;
ldi R24,1
ldi R25,0
sts L15+1,R25
sts L15,R24
.dbline 223
; if ( ( i % 25 ) == 0 )
ldi R18,25
ldi R19,0
lds R16,L16
lds R17,L16+1
rcall mod16u
cpi R16,0
cpc R16,R17
breq X11
rjmp L64
X11:
X2:
.dbline 224
; {
.dbline 225
; if ( MAX_A[0] > 0 )
lds R2,_MAX_A
lds R3,_MAX_A+1
tst R2
brne X3
tst R3
brne X12
rjmp L64
X12:
X3:
.dbline 226
; {
.dbline 227
; MAX_A[0]--;
lds R24,_MAX_A
lds R25,_MAX_A+1
sbiw R24,1
sts _MAX_A+1,R25
sts _MAX_A,R24
.dbline 228
; MAX_A[1] = MAX_A[2] = MAX_A[0];
movw R2,R24
sts _MAX_A+4+1,R3
sts _MAX_A+4,R2
sts _MAX_A+2+1,R3
sts _MAX_A+2,R2
.dbline 229
; }
.dbline 230
; }
.dbline 231
; }
rjmp L64
L63:
.dbline 232
; else if ( KEY_INPUT == CC_CV_DOWN )
lds R24,_KEY_INPUT
cpi R24,4
breq X13
rjmp L71
X13:
.dbline 233
; {
.dbline 234
; i++;
lds R24,L16
lds R25,L16+1
adiw R24,1
sts L16+1,R25
sts L16,R24
.dbline 235
; TIMER_NUM = 0;
clr R2
clr R3
sts _TIMER_NUM+1,R3
sts _TIMER_NUM,R2
.dbline 236
; NUM_CHANGE = TRUE;
ldi R24,1
ldi R25,0
sts L15+1,R25
sts L15,R24
.dbline 237
; if ( ( i % 25 ) == 0 )
ldi R18,25
ldi R19,0
lds R16,L16
lds R17,L16+1
rcall mod16u
cpi R16,0
cpc R16,R17
brne L73
X4:
.dbline 238
; {
.dbline 239
; if ( MAX_A[0] < 2000 )
lds R24,_MAX_A
lds R25,_MAX_A+1
cpi R24,208
ldi R30,7
cpc R25,R30
brsh L75
.dbline 240
; {
.dbline 241
; MAX_A[0]++;
lds R24,_MAX_A
lds R25,_MAX_A+1
adiw R24,1
sts _MAX_A+1,R25
sts _MAX_A,R24
.dbline 242
; MAX_A[1] = MAX_A[2] = MAX_A[0];
movw R2,R24
sts _MAX_A+4+1,R3
sts _MAX_A+4,R2
sts _MAX_A+2+1,R3
sts _MAX_A+2,R2
.dbline 243
; }
rjmp L76
L75:
.dbline 245
; else
; {
.dbline 246
; MAX_A[1] = MAX_A[2] = MAX_A[0] = 0;
clr R2
clr R3
sts _MAX_A+1,R3
sts _MAX_A,R2
sts _MAX_A+4+1,R3
sts _MAX_A+4,R2
sts _MAX_A+2+1,R3
sts _MAX_A+2,R2
.dbline 247
; }
L76:
.dbline 248
; }
L73:
.dbline 249
; }
L71:
L64:
.dbline 250
L61:
.dbline -2
L13:
adiw R28,2
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r key_first 10 c
.dbsym r key_end 20 c
.dbsym r key_press 22 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\key.c
_UP_DOWN_POWER::
.blkb 1
.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF/init.h
.dbsym e UP_DOWN_POWER _UP_DOWN_POWER c
_KEY_AUTO_MAN_STATE::
.blkb 1
.dbsym e KEY_AUTO_MAN_STATE _KEY_AUTO_MAN_STATE c
_KEY_CC_CV_STATE::
.blkb 1
.dbsym e KEY_CC_CV_STATE _KEY_CC_CV_STATE c
_POWER_STATE::
.blkb 1
.dbsym e POWER_STATE _POWER_STATE c
_KEY_A_V_STATE::
.blkb 1
.dbsym e KEY_A_V_STATE _KEY_A_V_STATE c
_KEY_INPUT::
.blkb 1
.dbsym e KEY_INPUT _KEY_INPUT c
_KEY_TEMP::
.blkb 1
.dbsym e KEY_TEMP _KEY_TEMP c
_SET_STATU::
.blkb 1
.dbsym e SET_STATU _SET_STATU c
_TIMER_EN::
.blkb 1
.dbsym e TIMER_EN _TIMER_EN c
_TIMER_NUM::
.blkb 2
.dbsym e TIMER_NUM _TIMER_NUM i
_adc_data_temp::
.blkb 2
.dbsym e adc_data_temp _adc_data_temp i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -