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

📄 led.lst

📁 AVR开发板实验源代码LED流水灯实验源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0303) 	DDRC=0x00;
    0182 BA24      OUT	0x14,R2
(0304) 	PORTD=0xff;
    0183 BB82      OUT	0x12,R24
(0305) 	DDRD=0x00;
    0184 BA21      OUT	0x11,R2
(0306) 	Un_Led();
    0185 DFCE      RCALL	_Un_Led
(0307) 	Clear_SMG();	
    0186 DFD3      RCALL	_Clear_SMG
    0187 9508      RET
FILE: F:\qihaijun\kaifa\1_LED\LED.c
(0001) 
(0002) #include <iom16v.h>				//包含单片机型号头文件
(0003) #include <macros.h>				//包含"位"操作头文件
(0004) #include <delay.h>				//包含延时头文件
(0005) #include <AVR_XQV12.h>			//包含通用函数及宏定义头文件
(0006) /*******************************************************/
(0007) /******   函数名称: Scan_Int_Key()                ******/
(0008) /******   功    能: 扫描INT0、INT1按键,使键值改变******/
(0009) /******   参    数: 无                            ******/
(0010) /******   返回值  : 无                            ******/
(0011) /*******************************************************/
(0012) void Scan_Int_Key(void)
(0013) {
(0014)  	if(KEY0==0)		   						//判断是否有键按下
_Scan_Int_Key:
    0188 9982      SBIC	0x10,2
    0189 C013      RJMP	0x019D
(0015) 	{										
(0016) 	 	delay_nms(10);						//延时去抖
    018A E00A      LDI	R16,0xA
    018B E010      LDI	R17,0
    018C DED5      RCALL	_delay_nms
(0017) 		if(KEY0==0)							//再次判断是否有键按下
    018D 9982      SBIC	0x10,2
    018E C00E      RJMP	0x019D
(0018) 		{									
(0019) 		 	while(KEY0==0);					//等待按键释放
    018F 9B82      SBIS	0x10,2
    0190 CFFE      RJMP	0x018F
(0020) 			Key_Number++;					//键值加1
    0191 91800062  LDS	R24,Key_Number
    0193 5F8F      SUBI	R24,0xFF
    0194 93800062  STS	Key_Number,R24
(0021) 			if(Key_Number>2)				
    0196 E082      LDI	R24,2
    0197 90200062  LDS	R2,Key_Number
    0199 1582      CP	R24,R2
    019A F410      BCC	0x019D
(0022) 			Key_Number=2;					
    019B 93800062  STS	Key_Number,R24
(0023) 		}									
(0024) 	}										
(0025) 	if(KEY1==0)								//判断是否有键按下
    019D 9983      SBIC	0x10,3
    019E C014      RJMP	0x01B3
(0026) 	{										
(0027) 	 	delay_nms(10);						//延时去抖
    019F E00A      LDI	R16,0xA
    01A0 E010      LDI	R17,0
    01A1 DEC0      RCALL	_delay_nms
(0028) 		if(KEY1==0)							//再次判断是否有键按下
    01A2 9983      SBIC	0x10,3
    01A3 C00F      RJMP	0x01B3
(0029) 		{									
(0030) 		 	while(KEY1==0);					//等待按键释放
    01A4 9B83      SBIS	0x10,3
    01A5 CFFE      RJMP	0x01A4
(0031) 			Key_Number--;					//键值减1
    01A6 91800062  LDS	R24,Key_Number
    01A8 5081      SUBI	R24,1
    01A9 93800062  STS	Key_Number,R24
(0032) 			if(Key_Number>2)				
    01AB E082      LDI	R24,2
    01AC 90200062  LDS	R2,Key_Number
    01AE 1582      CP	R24,R2
    01AF F418      BCC	0x01B3
(0033) 			Key_Number=0;					
    01B0 2422      CLR	R2
    01B1 92200062  STS	Key_Number,R2
(0034) 		}									
(0035) 	}										
    01B3 9508      RET
(0036) }
(0037) 
(0038) /*******************************************************/
(0039) /******   函数名称: main()                        ******/
(0040) /******   功    能: 流水灯、按键INT0、INT1改变显示方式**/
(0041) /******   参    数: 无                            ******/
(0042) /******   返回值  : 无                            ******/
(0043) /*******************************************************/
(0044) void main(void)
(0045) {
(0046)  	unsigned char i;
(0047) 	CPU_Init();	  		  		//初始化CPU
_main:
  i                    --> R22
    01B4 DFC2      RCALL	_CPU_Init
(0048) 	En_Led();					//使能LED
    01B5 DF99      RCALL	_En_Led
    01B6 C093      RJMP	0x024A
(0049) 	while(1)
(0050) 	{
(0051) 	 	switch(Key_Number)			//选择LED扫描方式
    01B7 91400062  LDS	R20,Key_Number
    01B9 2755      CLR	R21
    01BA 3040      CPI	R20,0
    01BB 0745      CPC	R20,R21
    01BC F409      BNE	0x01BE
    01BD C049      RJMP	0x0207
    01BE 3041      CPI	R20,1
    01BF E0E0      LDI	R30,0
    01C0 075E      CPC	R21,R30
    01C1 F409      BNE	0x01C3
    01C2 C064      RJMP	0x0227
    01C3 3042      CPI	R20,2
    01C4 E0E0      LDI	R30,0
    01C5 075E      CPC	R21,R30
    01C6 F409      BNE	0x01C8
    01C7 C081      RJMP	0x0249
    01C8 C081      RJMP	0x024A
(0052) 		{
(0053) 		 	case 0:
(0054) 				   while(1)
(0055) 				   {
(0056) 				   		for(i=0;i<8;i++)
    01C9 2766      CLR	R22
    01CA C015      RJMP	0x01E0
(0057) 						{
(0058) 		 				 	LED=0xff;			 //LED全部熄灭
    01CB EF8F      LDI	R24,0xFF
    01CC BB88      OUT	0x18,R24
(0059) 							LED&=~BIT(i);		 //点亮相应位LED
    01CD E001      LDI	R16,1
    01CE 2F16      MOV	R17,R22
    01CF 940E026E  CALL	lsl8
    01D1 2E20      MOV	R2,R16
    01D2 9420      COM	R2
    01D3 B238      IN	R3,0x18
    01D4 2032      AND	R3,R2
    01D5 BA38      OUT	0x18,R3
(0060) 							delay_nms(100);		 //延时大约100毫秒
    01D6 E604      LDI	R16,0x64
    01D7 E010      LDI	R17,0
    01D8 DE89      RCALL	_delay_nms
(0061) 							Scan_Int_Key();			 //查询是否有按键按下
    01D9 DFAE      RCALL	_Scan_Int_Key
(0062) 							if(Key_Number!=0)			 
    01DA 90200062  LDS	R2,Key_Number
    01DC 2022      TST	R2
    01DD F009      BEQ	0x01DF
(0063) 							break;				 //如果键值改变退出
    01DE C003      RJMP	0x01E2
    01DF 9563      INC	R22
    01E0 3068      CPI	R22,0x8
    01E1 F348      BCS	0x01CB
(0064) 						}
(0065) 						if(Key_Number!=0)
    01E2 90200062  LDS	R2,Key_Number
    01E4 2022      TST	R2
    01E5 F009      BEQ	0x01E7
(0066) 						break;
    01E6 C063      RJMP	0x024A
(0067) 						for(i=9;i>1;i--)
    01E7 E069      LDI	R22,0x9
    01E8 C016      RJMP	0x01FF
(0068) 						{
(0069) 		 				 	LED=0xff;			 //LED全部熄灭
    01E9 EF8F      LDI	R24,0xFF
    01EA BB88      OUT	0x18,R24
(0070) 							LED&=~BIT(i-2);		 //点亮相应位LED
    01EB 2F16      MOV	R17,R22
    01EC 5012      SUBI	R17,2
    01ED E001      LDI	R16,1
    01EE 940E026E  CALL	lsl8
    01F0 2E20      MOV	R2,R16
    01F1 9420      COM	R2
    01F2 B238      IN	R3,0x18
    01F3 2032      AND	R3,R2
    01F4 BA38      OUT	0x18,R3
(0071) 							delay_nms(100);		 //延时大约100毫秒
    01F5 E604      LDI	R16,0x64
    01F6 E010      LDI	R17,0
    01F7 DE6A      RCALL	_delay_nms
(0072) 							Scan_Int_Key();			 //查询是否有按键按下
    01F8 DF8F      RCALL	_Scan_Int_Key
(0073) 							if(Key_Number!=0)			 
    01F9 90200062  LDS	R2,Key_Number
    01FB 2022      TST	R2
    01FC F009      BEQ	0x01FE
(0074) 							break;				 //如果键值改变退出
    01FD C004      RJMP	0x0202
    01FE 956A      DEC	R22
    01FF E081      LDI	R24,1
    0200 1786      CP	R24,R22
    0201 F338      BCS	0x01E9
(0075) 						}
(0076) 						if(Key_Number!=0)
    0202 90200062  LDS	R2,Key_Number
    0204 2022      TST	R2
    0205 F009      BEQ	0x0207
(0077) 						break;
    0206 C043      RJMP	0x024A
    0207 CFC1      RJMP	0x01C9
(0078) 					}
(0079) 					break;
    0208 C041      RJMP	0x024A
(0080) 			case 1:
(0081) 				   while(1)
(0082) 				   {
(0083) 				   		for(i=0;i<8;i++)
    0209 2766      CLR	R22
    020A C015      RJMP	0x0220
(0084) 						{
(0085) 						 	LED=0xff;			 //LED全部熄灭
    020B EF8F      LDI	R24,0xFF
    020C BB88      OUT	0x18,R24
(0086) 							LED&=~BIT(i);		 //点亮相应位LED
    020D E001      LDI	R16,1
    020E 2F16      MOV	R17,R22
    020F 940E026E  CALL	lsl8
    0211 2E20      MOV	R2,R16
    0212 9420      COM	R2
    0213 B238      IN	R3,0x18
    0214 2032      AND	R3,R2
    0215 BA38      OUT	0x18,R3
(0087) 							delay_nms(50);		 //延时大约50毫秒
    0216 E302      LDI	R16,0x32
    0217 E010      LDI	R17,0
    0218 DE49      RCALL	_delay_nms
(0088) 							Scan_Int_Key();			 //查询是否有按键按下
    0219 DF6E      RCALL	_Scan_Int_Key
(0089) 							if(Key_Number!=1)			 
    021A 91800062  LDS	R24,Key_Number
    021C 3081      CPI	R24,1
    021D F009      BEQ	0x021F
(0090) 							break;				 //如果键值改变退出
    021E C003      RJMP	0x0222
    021F 9563      INC	R22
    0220 3068      CPI	R22,0x8
    0221 F348      BCS	0x020B
(0091) 						}
(0092) 						if(Key_Number!=1)
    0222 91800062  LDS	R24,Key_Number
    0224 3081      CPI	R24,1
    0225 F009      BEQ	0x0227
(0093) 						break;
    0226 C023      RJMP	0x024A
    0227 CFE1      RJMP	0x0209
(0094) 				   	}
(0095) 				   	break;
    0228 C021      RJMP	0x024A
(0096) 			case 2:
(0097) 				   while(1)
(0098) 				   {
(0099) 				   		for(i=9;i>1;i--)
    0229 E069      LDI	R22,0x9
    022A C016      RJMP	0x0241
(0100) 						{
(0101) 						 	LED=0xff;			 //LED全部熄灭
    022B EF8F      LDI	R24,0xFF
    022C BB88      OUT	0x18,R24
(0102) 							LED&=~BIT(i-2);		 //点亮相应位LED
    022D 2F16      MOV	R17,R22
    022E 5012      SUBI	R17,2
    022F E001      LDI	R16,1
    0230 940E026E  CALL	lsl8
    0232 2E20      MOV	R2,R16
    0233 9420      COM	R2
    0234 B238      IN	R3,0x18
    0235 2032      AND	R3,R2
    0236 BA38      OUT	0x18,R3
(0103) 							delay_nms(50);		 //延时大约50毫秒
    0237 E302      LDI	R16,0x32
    0238 E010      LDI	R17,0
    0239 DE28      RCALL	_delay_nms
(0104) 							Scan_Int_Key();			 //查询是否有按键按下
    023A DF4D      RCALL	_Scan_Int_Key
(0105) 							if(Key_Number!=2)			 
    023B 91800062  LDS	R24,Key_Number
    023D 3082      CPI	R24,2
    023E F009      BEQ	0x0240
(0106) 							break;				 //如果键值改变退出
    023F C004      RJMP	0x0244
    0240 956A      DEC	R22
    0241 E081      LDI	R24,1
    0242 1786      CP	R24,R22
    0243 F338      BCS	0x022B
(0107) 						}
(0108) 						if(Key_Number!=2)
    0244 91800062  LDS	R24,Key_Number
    0246 3082      CPI	R24,2
    0247 F009      BEQ	0x0249
(0109) 						break;
FILE: <library>
    0248 C001      RJMP	0x024A
    0249 CFDF      RJMP	0x0229
    024A CF6C      RJMP	0x01B7
    024B 9508      RET
pop_gset2:
    024C E0E2      LDI	R30,2
    024D 940C025B  JMP	pop
push_gset5:
    024F 92FA      ST	R15,-Y
    0250 92EA      ST	R14,-Y
push_gset4:
    0251 92DA      ST	R13,-Y
    0252 92CA      ST	R12,-Y
push_gset3:
    0253 92BA      ST	R11,-Y
    0254 92AA      ST	R10,-Y
push_gset2:
    0255 937A      ST	R23,-Y
    0256 936A      ST	R22,-Y
push_gset1:
    0257 935A      ST	R21,-Y
    0258 934A      ST	R20,-Y
    0259 9508      RET
pop_gset1:
    025A E0E1      LDI	R30,1
pop:
    025B 9149      LD	R20,Y+
    025C 9159      LD	R21,Y+
    025D FDE0      SBRC	R30,0
    025E 9508      RET
    025F 9169      LD	R22,Y+
    0260 9179      LD	R23,Y+
    0261 FDE1      SBRC	R30,1
    0262 9508      RET
    0263 90A9      LD	R10,Y+
    0264 90B9      LD	R11,Y+
    0265 FDE2      SBRC	R30,2
    0266 9508      RET
    0267 90C9      LD	R12,Y+
    0268 90D9      LD	R13,Y+
    0269 FDE3      SBRC	R30,3
    026A 9508      RET
    026B 90E9      LD	R14,Y+
    026C 90F9      LD	R15,Y+
    026D 9508      RET
lsl8:
    026E 2311      TST	R17
    026F F019      BEQ	0x0273
    0270 0F00      LSL	R16
    0271 951A      DEC	R17
    0272 CFFB      RJMP	lsl8
    0273 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -