⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.s

📁 AVR开发板实验源代码LED流水灯实验源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -