📄 led.s
字号:
.module LED.c
.area text(rom, con, rel)
.dbfile D:/icc/include/delay.h
.dbfunc e delay_nus _delay_nus fV
; time -> R16,R17
.even
_delay_nus::
.dbline -1
.dbline 33
;
; #include <iom16v.h> //包含单片机型号头文件
; #include <macros.h> //包含"位"操作头文件
; #include <delay.h> //包含延时头文件
; #include <AVR_XQV12.h> //包含通用函数及宏定义头文件
; /*******************************************************/
; /****** 函数名称: Scan_Int_Key() ******/
; /****** 功 能: 扫描INT0、INT1按键,使键值改变******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void Scan_Int_Key(void)
; {
; if(KEY0==0) //判断是否有键按下
; {
; delay_nms(10); //延时去抖
; if(KEY0==0) //再次判断是否有键按下
; {
; while(KEY0==0); //等待按键释放
; Key_Number++; //键值加1
; if(Key_Number>2)
; Key_Number=2;
; }
; }
; if(KEY1==0) //判断是否有键按下
; {
; delay_nms(10); //延时去抖
; if(KEY1==0) //再次判断是否有键按下
; {
; while(KEY1==0); //等待按键释放
; Key_Number--; //键值减1
; if(Key_Number>2)
; Key_Number=0;
xjmp L3
L2:
.dbline 35
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 37
subi R16,1
sbci R17,0
.dbline 38
L3:
.dbline 34
; }
cpi R16,0
cpc R16,R17
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; time -> R16,R17
.even
_delay_nms::
xcall push_gset1
.dbline -1
.dbline 41
; }
; }
;
; /*******************************************************/
; /****** 函数名称: main() ******/
; /****** 功 能: 流水灯、按键INT0、INT1改变显示方式**/
; /****** 参 数: 无 ******/
xjmp L7
L6:
.dbline 44
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void main(void)
.dbline 45
clr R20
clr R21
xjmp L12
L9:
.dbline 45
L10:
.dbline 45
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 45
cpi R20,44
ldi R30,6
cpc R21,R30
brlo L9
.dbline 46
subi R16,1
sbci R17,0
.dbline 47
L7:
.dbline 43
cpi R16,0
cpc R16,R17
brne L6
X1:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.area code(ram, con, rel)
.dbfile D:/icc/include/delay.h
.area lit(rom, con, rel)
_SMG_Conver::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.byte 'w,124
.byte 57,94
.byte 'y,'q
.byte 0,64
.dbfile D:/icc/include/AVR_XQV12.h
.dbsym e SMG_Conver _SMG_Conver A[18:18]kc
.area data(ram, con, rel)
.dbfile D:/icc/include/AVR_XQV12.h
.area text(rom, con, rel)
.dbfile D:/icc/include/AVR_XQV12.h
.dbfunc e Scan_Key _Scan_Key fc
; i -> R20
.even
_Scan_Key::
xcall push_gset1
.dbline -1
.dbline 126
; {
; unsigned char i;
; CPU_Init(); //初始化CPU
; En_Led(); //使能LED
; while(1)
; {
; switch(Key_Number) //选择LED扫描方式
; {
; case 0:
; while(1)
; {
; for(i=0;i<8;i++)
; {
; LED=0xff; //LED全部熄灭
; LED&=~BIT(i); //点亮相应位LED
; delay_nms(100); //延时大约100毫秒
; Scan_Int_Key(); //查询是否有按键按下
; if(Key_Number!=0)
; break; //如果键值改变退出
; }
; if(Key_Number!=0)
; break;
; for(i=9;i>1;i--)
; {
; LED=0xff; //LED全部熄灭
; LED&=~BIT(i-2); //点亮相应位LED
; delay_nms(100); //延时大约100毫秒
; Scan_Int_Key(); //查询是否有按键按下
; if(Key_Number!=0)
; break; //如果键值改变退出
; }
; if(Key_Number!=0)
; break;
; }
; break;
; case 1:
; while(1)
; {
; for(i=0;i<8;i++)
; {
; LED=0xff; //LED全部熄灭
; LED&=~BIT(i); //点亮相应位LED
; delay_nms(50); //延时大约50毫秒
; Scan_Int_Key(); //查询是否有按键按下
; if(Key_Number!=1)
; break; //如果键值改变退出
; }
; if(Key_Number!=1)
; break;
; }
; break;
; case 2:
; while(1)
; {
; for(i=9;i>1;i--)
; {
; LED=0xff; //LED全部熄灭
; LED&=~BIT(i-2); //点亮相应位LED
; delay_nms(50); //延时大约50毫秒
; Scan_Int_Key(); //查询是否有按键按下
; if(Key_Number!=2)
; break; //如果键值改变退出
; }
; if(Key_Number!=2)
; break;
; }
; break;
; }
;
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 128
; }
; }
clr R2
out 0x15,R2
.dbline 129
; }
ldi R24,240
out 0x14,R24
.dbline 130
; }
ldi R24,15
out 0x15,R24
.dbline 131
; }
ldi R16,1
ldi R17,0
xcall _delay_nus
.dbline 132
; }
in R20,0x13
andi R20,15
.dbline 133
; }
cpi R20,15
breq L14
.dbline 134
; }
.dbline 135
; }
clr R2
out 0x15,R2
.dbline 136
; }
ldi R24,15
out 0x14,R24
.dbline 137
; }
ldi R24,240
out 0x15,R24
.dbline 138
; }
ldi R16,10
ldi R17,0
xcall _delay_nus
.dbline 139
; }
in R24,0x13
andi R24,240
cpi R24,240
breq L16
.dbline 140
; }
.dbline 141
; }
in R24,0x13
andi R24,240
add R20,R24
L18:
.dbline 142
L19:
.dbline 142
; }
in R24,0x13
andi R24,240
cpi R24,240
brne L18
.dbline 143
; }
mov R16,R20
xjmp L13
L16:
.dbline 145
; }
; }
L14:
.dbline 146
; }
clr R16
.dbline -2
L13:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e Key_Num _Key_Num fc
; key -> R16
.even
_Key_Num::
xcall push_gset1
.dbline -1
.dbline 156
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 157
; }
mov R20,R16
clr R21
cpi R20,183
ldi R30,0
cpc R21,R30
brne X3
xjmp L27
X3:
cpi R20,187
ldi R30,0
cpc R21,R30
brne X4
xjmp L31
X4:
cpi R20,189
ldi R30,0
cpc R21,R30
brne X5
xjmp L35
X5:
cpi R20,190
ldi R30,0
cpc R21,R30
brne X6
xjmp L39
X6:
ldi R24,190
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L42
L41:
cpi R20,119
ldi R30,0
cpc R21,R30
brne X7
xjmp L28
X7:
cpi R20,123
ldi R30,0
cpc R21,R30
brne X8
xjmp L32
X8:
cpi R20,125
ldi R30,0
cpc R21,R30
brne X9
xjmp L36
X9:
cpi R20,126
ldi R30,0
cpc R21,R30
brne X10
xjmp L40
X10:
xjmp L22
L42:
cpi R20,215
ldi R30,0
cpc R21,R30
breq L26
cpi R20,219
ldi R30,0
cpc R21,R30
breq L30
cpi R20,221
ldi R30,0
cpc R21,R30
breq L34
cpi R20,222
ldi R30,0
cpc R21,R30
brne X11
xjmp L38
X11:
cpi R20,215
ldi R30,0
cpc R21,R30
brge X12
xjmp L22
X12:
L43:
cpi R20,231
ldi R30,0
cpc R21,R30
breq L25
cpi R20,235
ldi R30,0
cpc R21,R30
breq L29
cpi R20,237
ldi R30,0
cpc R21,R30
breq L33
cpi R20,238
ldi R30,0
cpc R21,R30
breq L37
xjmp L22
X2:
.dbline 158
; }
L25:
.dbline 159
; }
clr R16
xjmp L21
L26:
.dbline 160
; }
ldi R16,1
xjmp L21
L27:
.dbline 161
; }
ldi R16,2
xjmp L21
L28:
.dbline 162
; }
ldi R16,3
xjmp L21
L29:
.dbline 163
; }
ldi R16,4
xjmp L21
L30:
.dbline 164
; }
ldi R16,5
xjmp L21
L31:
.dbline 165
; }
ldi R16,6
xjmp L21
L32:
.dbline 166
; }
ldi R16,7
xjmp L21
L33:
.dbline 167
; }
ldi R16,8
xjmp L21
L34:
.dbline 168
; }
ldi R16,9
xjmp L21
L35:
.dbline 169
; }
ldi R16,10
xjmp L21
L36:
.dbline 170
; }
ldi R16,11
xjmp L21
L37:
.dbline 171
; }
ldi R16,12
xjmp L21
L38:
.dbline 172
; }
ldi R16,13
xjmp L21
L39:
.dbline 173
; }
ldi R16,14
xjmp L21
L40:
.dbline 174
; }
ldi R16,15
xjmp L21
L22:
.dbline 175
; }
ldi R16,16
.dbline -2
L21:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r key 16 c
.dbend
.dbfunc e Display_One_SMG _Display_One_SMG fV
; data -> R22
; bit -> R20
.even
_Display_One_SMG::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 186
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 187
; }
ldi R24,<_SMG_Conver
ldi R25,>_SMG_Conver
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x18,R30
.dbline 188
; }
sbi 0x1b,3
.dbline 189
; }
cbi 0x1b,3
.dbline 190
; }
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
out 0x18,R2
.dbline 191
; }
sbi 0x1b,2
.dbline 192
; }
cbi 0x1b,2
.dbline 193
; }
ldi R16,2
ldi R17,0
xcall _delay_nms
.dbline -2
L44:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r data 22 c
.dbsym r bit 20 c
.dbend
.dbfunc e Display_One_SMG_Point _Display_One_SMG_Point fV
; bit -> R20
.even
_Display_One_SMG_Point::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 201
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 202
; }
ldi R24,128
out 0x18,R24
.dbline 203
; }
sbi 0x1b,3
.dbline 204
; }
cbi 0x1b,3
.dbline 205
; }
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -