📄 main.s
字号:
; led_ch=led_ch>>1;
lds R2,_led_ch
lsr R2
sts _led_ch,R2
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
.dbfunc e flash_led_type2 _flash_led_type2 fV
.even
_flash_led_type2::
.dbline -1
.dbline 160
; }
;
; void flash_led_type2(void) //PD口的跑马灯显示 从左到右
; {
.dbline 161
; if (led_ch==0x00) led_ch=0x02;
lds R2,_led_ch
tst R2
brne L27
.dbline 161
ldi R24,2
sts _led_ch,R24
L27:
.dbline 162
; PORTD=~(led_ch);
lds R2,_led_ch
com R2
out 0x12,R2
.dbline 163
; led_ch=led_ch<<1;
lds R2,_led_ch
lsl R2
sts _led_ch,R2
.dbline -2
L26:
.dbline 0 ; func end
ret
.dbend
.dbfunc e flash_led_type3 _flash_led_type3 fV
.even
_flash_led_type3::
.dbline -1
.dbline 167
; }
;
; void flash_led_type3(void) //PD口的跑马灯显示 反相
; {
.dbline 168
; PORTD^=0XFC;
ldi R24,252
ldi R25,0
in R2,0x12
clr R3
eor R2,R24
eor R3,R25
out 0x12,R2
.dbline -2
L29:
.dbline 0 ; func end
ret
.dbend
.dbfunc e flash_led_type4 _flash_led_type4 fV
; tmp_PD -> R16
.even
_flash_led_type4::
.dbline -1
.dbline 172
; }
;
; void flash_led_type4(void) //PD口的跑马灯显示 流水
; {
.dbline 174
; unsigned char tmp_PD;
; tmp_PD=PIND;
in R16,0x10
.dbline 175
; tmp_PD|=0XFC;
ori R16,252
.dbline 176
; led_ch++;
lds R24,_led_ch
subi R24,255 ; addi 1
sts _led_ch,R24
.dbline 177
; if (led_ch==0X87) led_ch=0X80;
cpi R24,135
brne L31
.dbline 177
ldi R24,128
sts _led_ch,R24
L31:
.dbline 178
; switch (led_ch)
lds R16,_led_ch
clr R17
cpi R16,129
ldi R30,0
cpc R17,R30
breq L36
cpi R16,130
ldi R30,0
cpc R17,R30
breq L37
cpi R16,131
ldi R30,0
cpc R17,R30
breq L38
cpi R16,132
ldi R30,0
cpc R17,R30
breq L39
cpi R16,133
ldi R30,0
cpc R17,R30
breq L40
cpi R16,134
ldi R30,0
cpc R17,R30
breq L41
xjmp L33
X0:
.dbline 179
; {
L36:
.dbline 181
;
; case 0X81: PORTD=~(0X78); break; //0111 10 00 代码
ldi R24,135
out 0x12,R24
.dbline 181
xjmp L34
L37:
.dbline 182
; case 0X82: PORTD=~(0XD4); break; //1011 01 00 代码
ldi R24,-213
ldi R25,-1
out 0x12,R24
.dbline 182
xjmp L34
L38:
.dbline 183
; case 0X83: PORTD=~(0XCC); break; //1100 11 00 代码
ldi R24,-205
ldi R25,-1
out 0x12,R24
.dbline 183
xjmp L34
L39:
.dbline 184
; case 0X84: PORTD=~(0XCC); break; //1100 11 00 代码
ldi R24,-205
ldi R25,-1
out 0x12,R24
.dbline 184
xjmp L34
L40:
.dbline 185
; case 0X85: PORTD=~(0XD4); break; //1011 01 00 代码
ldi R24,-213
ldi R25,-1
out 0x12,R24
.dbline 185
xjmp L34
L41:
.dbline 186
; case 0X86: PORTD=~(0X78); break; //0111 10 00 代码
ldi R24,135
out 0x12,R24
.dbline 186
L33:
L34:
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbsym r tmp_PD 16 c
.dbend
.dbfunc e delay30ms _delay30ms fV
; tmp_delay_cn -> R16,R17
.even
_delay30ms::
.dbline -1
.dbline 192
; }
; }
;
;
; void delay30ms(void) //延时30毫秒的子程序
; {
.dbline 194
; unsigned int tmp_delay_cn;
; for (tmp_delay_cn=0;tmp_delay_cn<300;tmp_delay_cn++)
clr R16
clr R17
xjmp L46
L43:
.dbline 195
L44:
.dbline 194
subi R16,255 ; offset = 1
sbci R17,255
L46:
.dbline 194
cpi R16,44
ldi R30,1
cpc R17,R30
brlo L43
.dbline -2
L42:
.dbline 0 ; func end
ret
.dbsym r tmp_delay_cn 16 i
.dbend
.dbfunc e check_key_pressed _check_key_pressed fc
; key_tem -> R16
.even
_check_key_pressed::
.dbline -1
.dbline 200
; ;
; }
;
;
; unsigned char check_key_pressed(void) //检查是否有键盘按下
; {
.dbline 202
; unsigned char key_tem;
; key_tem=PINA &= ~(0XC3);
in R24,0x19
andi R24,60
out 0x19,R24
mov R16,R24
.dbline 203
; if(key_tem!=0X3C)
cpi R24,60
breq L48
.dbline 204
; return 1;
ldi R16,1
xjmp L47
L48:
.dbline 206
; else
; return 0;
clr R16
.dbline -2
L47:
.dbline 0 ; func end
ret
.dbsym r key_tem 16 c
.dbend
.dbfunc e find_key_code _find_key_code fc
; uuu -> R20
.even
_find_key_code::
xcall push_gset1
.dbline -1
.dbline 211
; }
;
;
; unsigned char find_key_code(void)
; {
.dbline 213
; unsigned char uuu;
; if(check_key_pressed()==1)
xcall _check_key_pressed
cpi R16,1
brne L51
.dbline 214
; {
.dbline 215
; delay30ms(); //延时去抖动
xcall _delay30ms
.dbline 216
; if(check_key_pressed()==1)
xcall _check_key_pressed
cpi R16,1
brne L53
.dbline 217
; {
.dbline 218
; uuu=(PINA & 0X3C);
in R20,0x19
andi R20,60
.dbline 219
; return uuu; //屏蔽最高和最低两位
mov R16,R20
xjmp L50
L53:
.dbline 221
; }
; }
L51:
.dbline 222
; return 0XC3;
ldi R16,195
.dbline -2
L50:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r uuu 20 c
.dbend
.area vector(rom, abs)
.org 36
jmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 227
; }
;
; #pragma interrupt_handler timer0_ovf_isr:10 //
; void timer0_ovf_isr(void)
; {
.dbline 228
; TCNT0 = 0xB2; //计数器初始值重载
ldi R24,178
out 0x32,R24
.dbline 229
; if (tmp_cn_0==100) //固定时间产生变化
lds R24,_tmp_cn_0
cpi R24,100
breq X2
xjmp L56
X2:
.dbline 230
; {
.dbline 231
; switch (key_code) //根据按下的键盘产生一定的闪灯花样
lds R20,_key_code
clr R21
cpi R20,44
ldi R30,0
cpc R21,R30
breq L62
ldi R24,44
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L66
L65:
cpi R20,28
ldi R30,0
cpc R21,R30
breq L61
xjmp L58
L66:
cpi R20,52
ldi R30,0
cpc R21,R30
breq L63
cpi R20,52
ldi R30,0
cpc R21,R30
brlt L58
L67:
cpi R20,56
ldi R30,0
cpc R21,R30
breq L64
xjmp L58
X1:
.dbline 232
; {
L61:
.dbline 233
; case 0X1C: flash_led_type4(); break;
xcall _flash_led_type4
.dbline 233
xjmp L59
L62:
.dbline 234
; case 0X2c: flash_led_type3(); break;
xcall _flash_led_type3
.dbline 234
xjmp L59
L63:
.dbline 235
; case 0X34: flash_led_type2(); break;
xcall _flash_led_type2
.dbline 235
xjmp L59
L64:
.dbline 236
; case 0X38: flash_led_type1(); break;
xcall _flash_led_type1
.dbline 236
xjmp L59
L58:
.dbline 237
; default: flash_led_type4(); break;
xcall _flash_led_type4
.dbline 237
L59:
.dbline 240
; }
;
; disp_led(LED_INDEX[tmp_led_index]); //循环显示8段数字LED
ldi R24,<_LED_INDEX
ldi R25,>_LED_INDEX
lds R30,_tmp_led_index
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _disp_led
.dbline 241
; tmp_led_index++;
lds R24,_tmp_led_index
subi R24,255 ; addi 1
sts _tmp_led_index,R24
.dbline 242
; if (tmp_led_index==10) tmp_led_index=0; //LED计数器归零
cpi R24,10
brne L68
.dbline 242
clr R2
sts _tmp_led_index,R2
L68:
.dbline 244
;
; tmp_cn_0=0; //临时计数器0归零
clr R2
sts _tmp_cn_0,R2
.dbline 245
; }
xjmp L57
L56:
.dbline 247
.dbline 248
lds R24,_tmp_cn_0
subi R24,255 ; addi 1
sts _tmp_cn_0,R24
.dbline 249
L57:
.dbline -2
L55:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
; tmp_key_code -> R20
.even
_main::
.dbline -1
.dbline 256
; else
; {
; tmp_cn_0=tmp_cn_0+1; //临时计数器递增
; }
; }
;
;
; //****************** MAIN 程序的入口*************************//
;
; void main()
; {
.dbline 258
; unsigned char tmp_key_code;
; init_devices();
xcall _init_devices
xjmp L72
L71:
.dbline 260
; while(1)
; {
.dbline 261
; start_adc_0(); //循环进行ADC转换
xcall _start_adc_0
.dbline 263
;
; tmp_key_code=find_key_code() & 0X3C; //判断是否按下键盘
xcall _find_key_code
mov R20,R16
andi R20,60
.dbline 265
;
; if (tmp_key_code!=0x3c) key_code=tmp_key_code;
cpi R20,60
breq L74
.dbline 265
sts _key_code,R20
L74:
.dbline 268
L72:
.dbline 259
xjmp L71
X3:
.dbline -2
L70:
.dbline 0 ; func end
ret
.dbsym r tmp_key_code 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
_key_code::
.blkb 1
.dbsym e key_code _key_code c
_tmp_cn_1::
.blkb 1
.dbsym e tmp_cn_1 _tmp_cn_1 c
_tmp_cn_0::
.blkb 1
.dbsym e tmp_cn_0 _tmp_cn_0 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -