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

📄 led-16sm.lst

📁 大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多功能
💻 LST
字号:
__start:
__text_start:
      9C EFCF      LDI	R28,0xFF
      9D E2D1      LDI	R29,0x21
      9E BFCD      OUT	0x3D,R28
      9F BFDE      OUT	0x3E,R29
      A0 51CE      SUBI	R28,0x1E
      A1 40D0      SBCI	R29,0
      A2 EA0A      LDI	R16,0xAA
      A3 8308      STD	Y+0,R16
      A4 2400      CLR	R0
      A5 E4EE      LDI	R30,0x4E
      A6 E0F2      LDI	R31,2
      A7 E012      LDI	R17,2
      A8 35E4      CPI	R30,0x54
      A9 07F1      CPC	R31,R17
      AA F011      BEQ	0x00AD
      AB 9201      ST	R0,Z+
      AC CFFB      RJMP	0x00A8
      AD 8300      STD	Z+0,R16
      AE EEE9      LDI	R30,0xE9
      AF E0F0      LDI	R31,0
      B0 E0A0      LDI	R26,0
      B1 E0B2      LDI	R27,2
      B2 E011      LDI	R17,1
      B3 E000      LDI	R16,0
      B4 BF0B      OUT	0x3B,R16
      B5 33E7      CPI	R30,0x37
      B6 07F1      CPC	R31,R17
      B7 F021      BEQ	0x00BC
      B8 95C8      LPM
      B9 9631      ADIW	R30,1
      BA 920D      ST	R0,X+
      BB CFF9      RJMP	0x00B5
      BC 940E 00DD CALL	_main
_exit:
      BE CFFF      RJMP	_exit
FILE: C:\+samples-16small\LED-16sm\LED-16sm.c
(0001) /*
(0002) Title:	LED-16sm.c
(0003) Connection:
(0004) 	  Factory fixed setting:
(0005) 	  PORTA:
(0006) 	  		PA0-PA2 LCD control
(0007) 			PA3-PA7 4x7-segment display control
(0008) 			Drive LED group2 (the right group of LED)
(0009) 	  PORTB:
(0010) 	  		Shared by LCD and 4x7-segment displays
(0011) 	  		output 8-bit data to LCD or 8-bit data to 4x7-segment displays
(0012) 	  PORTC:
(0013) 	        shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
(0014) 			receive inputs from dipswitch, touch switches and buttons 				
(0015) 	  PORTD: 
(0016) 	  		Drive LED group1 (the left group of LED) 
(0017) Attention:
(0018) 	  1. J12 should be capped (connectted)
(0019) 	  2. J5 is the Jump for LCD back light power 	  
(0020) 
(0021) Operation:
(0022) 	  1. LED group1 does pattern show
(0023) 	  2. There are four patterns, which pattern in operation is controlled by SW4 and SW5
(0024) 	  3. The left three LEDs of LED group2 blinks and the others light consistently
(0025) 	  4. Segment plus dot of 4x7-segment displays lights in sequence
(0026) */
(0027)  
(0028) 
(0029) #include <iom16v.h>
(0030) #include <macros.h>
(0031) 
(0032) unsigned char pattern1[]= {0x01, 0x03, 0x07, 0x0F, 0x1f, 0x3f, 0x7f, 0xff, 0x7f,
(0033) 						  0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01};
(0034) unsigned char pattern2[]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x40,
(0035) 						  0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
(0036) unsigned char pattern3[]= {0x01, 0x80, 0x02, 0x40, 0x04, 0x20, 0x08, 0x10, 0x10,
(0037) 						  0x08, 0x20, 0x04, 0x40, 0x02, 0x80};
(0038) unsigned char pattern4[]= {0x11, 0x22, 0x44, 0x88, 0x44, 0x22, 0x11, 0x22, 0x44,
(0039) 						  0x88, 0x44, 0x22, 0x11, 0x00, 0x00};
(0040) unsigned char pattern5[]= {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};						  
(0041) const char dig0 = 0x40, dig1 = 0x80, dig2=0x10, dig3=0x08, dot=0x20;
(0042) char segconv[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
(0043) unsigned char BCD0, BCD1, BCD2, BCD3;
(0044) int count;
(0045) 
(0046) void port_init(void)
(0047) {
(0048)  DDRA  = 0xFF;		//set PortA output
_port_init:
      BF EF8F      LDI	R24,0xFF
      C0 BB8A      OUT	0x1A,R24
(0049)  DDRB  = 0xff;		//set PORTB output
      C1 BB87      OUT	0x17,R24
(0050)  DDRC  = 0x00;		//set PORTC output
      C2 2422      CLR	R2
      C3 BA24      OUT	0x14,R2
(0051)  PORTC = 0xff;
      C4 BB85      OUT	0x15,R24
(0052)  DDRD  = 0xFF;		//set PORTD output
      C5 BB81      OUT	0x11,R24
      C6 9508      RET
_delay:
  i                    --> R20
  j                    --> R22
  count                --> R16
      C7 940E 0168 CALL	push_xgsetF000
(0053) }
(0054) 
(0055) void delay(int count)
(0056) {
(0057)  int i, j;
(0058)  for(i=count; i>0; i--)
      C9 01A8      MOVW	R20,R16
      CA C00B      RJMP	0x00D6
(0059)     for(j=10; j>0; j--)
      CB E06A      LDI	R22,0xA
      CC E070      LDI	R23,0
      CD 5061      SUBI	R22,1
      CE 4070      SBCI	R23,0
      CF 2422      CLR	R2
      D0 2433      CLR	R3
      D1 1626      CP	R2,R22
      D2 0637      CPC	R3,R23
      D3 F3CC      BLT	0x00CD
      D4 5041      SUBI	R20,1
      D5 4050      SBCI	R21,0
      D6 2422      CLR	R2
      D7 2433      CLR	R3
      D8 1624      CP	R2,R20
      D9 0635      CPC	R3,R21
      DA F384      BLT	0x00CB
      DB 940C 016D JMP	pop_xgsetF000
(0060) 	   ;
(0061) } 
(0062) 
(0063) //*****************************************************************
(0064) 
(0065) void main(void)
(0066) {
(0067)  unsigned char outa=0x00, outb=0x00, outc=0x00, outd=0x00;
_main:
  outd                 --> R10
  outc                 --> R10
  outb                 --> R10
  outa                 --> R10
  j                    --> R22
  count                --> R10
  swin2                --> R12
  led_index            --> R20
  swin                 --> R14
      DD 24AA      CLR	R10
(0068)  int swin, swin2, led_index=0;  
      DE 2744      CLR	R20
      DF 2755      CLR	R21
(0069)  int j, count=0;
      E0 24BB      CLR	R11
(0070)  
(0071)  port_init();
      E1 DFDD      RCALL	_port_init
(0072)  PORTA=0xff;
      E2 EF8F      LDI	R24,0xFF
      E3 BB8B      OUT	0x1B,R24
      E4 C071      RJMP	0x0156
(0073)  while(1)
(0074)    {
(0075)     WDR();				  //Watchdog reset
      E5 95A8      WDR
(0076) 	if(++count>30)
      E6 01C5      MOVW	R24,R10
      E7 9601      ADIW	R24,1
      E8 015C      MOVW	R10,R24
      E9 E18E      LDI	R24,0x1E
      EA E090      LDI	R25,0
      EB 158A      CP	R24,R10
      EC 059B      CPC	R25,R11
      ED F4B4      BGE	0x0104
(0077) 	  {
(0078) 	  	count=0;
      EE 24AA      CLR	R10
      EF 24BB      CLR	R11
(0079) 		PORTA^=0x07;
      F0 E087      LDI	R24,7
      F1 B22B      IN	R2,0x1B
      F2 2628      EOR	R2,R24
      F3 BA2B      OUT	0x1B,R2
(0080) 		PORTB=pattern5[j++];
      F4 011B      MOVW	R2,R22
      F5 5F6F      SUBI	R22,0xFF
      F6 4F7F      SBCI	R23,0xFF
      F7 E38C      LDI	R24,0x3C
      F8 E092      LDI	R25,2
      F9 01F1      MOVW	R30,R2
      FA 0FE8      ADD	R30,R24
      FB 1FF9      ADC	R31,R25
      FC 8020      LDD	R2,Z+0
      FD BA28      OUT	0x18,R2
(0081)     	if(j>=8)
      FE 3068      CPI	R22,0x8
      FF E0E0      LDI	R30,0
     100 077E      CPC	R23,R30
     101 F014      BLT	0x0104
(0082)       	j=0;
     102 2766      CLR	R22
     103 2777      CLR	R23
(0083) 	  }
(0084) 	  
(0085) 	//PORTA=swin;
(0086) 	swin=PINC&0x30;
     104 B383      IN	R24,0x13
     105 2799      CLR	R25
     106 7380      ANDI	R24,0x30
     107 7090      ANDI	R25,0
     108 017C      MOVW	R14,R24
(0087) 	swin=swin>>4;
     109 94F5      ASR	R15
     10A 94E7      ROR	R14
     10B 94F5      ASR	R15
     10C 94E7      ROR	R14
     10D 94F5      ASR	R15
     10E 94E7      ROR	R14
     10F 94F5      ASR	R15
     110 94E7      ROR	R14
(0088) 	swin2=~PINC&0x0f;
     111 B383      IN	R24,0x13
     112 2799      CLR	R25
     113 9580      COM	R24
     114 9590      COM	R25
     115 708F      ANDI	R24,0xF
     116 7090      ANDI	R25,0
     117 016C      MOVW	R12,R24
(0089) 	
(0090) 	if(swin==0)
     118 20EE      TST	R14
     119 F451      BNE	0x0124
     11A 20FF      TST	R15
     11B F441      BNE	0x0124
(0091) 	  {
(0092) 	  PORTD=pattern1[led_index];	  
     11C E080      LDI	R24,0
     11D E092      LDI	R25,2
     11E 01FA      MOVW	R30,R20
     11F 0FE8      ADD	R30,R24
     120 1FF9      ADC	R31,R25
     121 8020      LDD	R2,Z+0
     122 BA22      OUT	0x12,R2
(0093) 	  }
     123 C021      RJMP	0x0145
(0094) 	else if(swin==0x01)
     124 01C7      MOVW	R24,R14
     125 3081      CPI	R24,1
     126 E0E0      LDI	R30,0
     127 079E      CPC	R25,R30
     128 F441      BNE	0x0131
(0095) 	  {
(0096) 	  PORTD=pattern2[led_index];	  
     129 E08F      LDI	R24,0xF
     12A E092      LDI	R25,2
     12B 01FA      MOVW	R30,R20
     12C 0FE8      ADD	R30,R24
     12D 1FF9      ADC	R31,R25
     12E 8020      LDD	R2,Z+0
     12F BA22      OUT	0x12,R2
(0097) 	  }
     130 C014      RJMP	0x0145
(0098) 	else if(swin==0x02)
     131 01C7      MOVW	R24,R14
     132 3082      CPI	R24,2
     133 E0E0      LDI	R30,0
     134 079E      CPC	R25,R30
     135 F441      BNE	0x013E
(0099) 	  {
(0100) 	  PORTD=pattern3[led_index];	  
     136 E18E      LDI	R24,0x1E
     137 E092      LDI	R25,2
     138 01FA      MOVW	R30,R20
     139 0FE8      ADD	R30,R24
     13A 1FF9      ADC	R31,R25
     13B 8020      LDD	R2,Z+0
     13C BA22      OUT	0x12,R2
(0101) 	  }
     13D C007      RJMP	0x0145
(0102) 	else
(0103) 	  {
(0104) 	  PORTD=pattern4[led_index];	  
     13E E28D      LDI	R24,0x2D
     13F E092      LDI	R25,2
     140 01FA      MOVW	R30,R20
     141 0FE8      ADD	R30,R24
     142 1FF9      ADC	R31,R25
     143 8020      LDD	R2,Z+0
     144 BA22      OUT	0x12,R2
(0105) 	  }
(0106) 	  
(0107) 	led_index++;
     145 5F4F      SUBI	R20,0xFF
     146 4F5F      SBCI	R21,0xFF
(0108) 	if(led_index>14)
     147 E08E      LDI	R24,0xE
     148 E090      LDI	R25,0
     149 1784      CP	R24,R20
     14A 0795      CPC	R25,R21
     14B F414      BGE	0x014E
(0109) 		led_index=0;			
     14C 2744      CLR	R20
     14D 2755      CLR	R21
(0110) 	
(0111)     delay(2000+800*swin2);
FILE: <library>
     14E E200      LDI	R16,0x20
     14F E013      LDI	R17,3
     150 0196      MOVW	R18,R12
     151 940E 0158 CALL	empy16s
     153 5300      SUBI	R16,0x30
     154 4F18      SBCI	R17,0xF8
     155 DF71      RCALL	_delay
     156 CF8E      RJMP	0x00E5
     157 9508      RET
empy16s:
     158 920A      ST	R0,-Y
     159 921A      ST	R1,-Y
     15A 938A      ST	R24,-Y
     15B 939A      ST	R25,-Y
     15C 9F02      MUL	R16,R18
     15D 01C0      MOVW	R24,R0
     15E 9F12      MUL	R17,R18
     15F 0D90      ADD	R25,R0
     160 9F03      MUL	R16,R19
     161 0D90      ADD	R25,R0
     162 018C      MOVW	R16,R24
     163 9199      LD	R25,Y+
     164 9189      LD	R24,Y+
     165 9019      LD	R1,Y+
     166 9009      LD	R0,Y+
     167 9508      RET
push_xgsetF000:
     168 937A      ST	R23,-Y
     169 936A      ST	R22,-Y
     16A 935A      ST	R21,-Y
     16B 934A      ST	R20,-Y
     16C 9508      RET
pop_xgsetF000:
     16D 9149      LD	R20,Y+
     16E 9159      LD	R21,Y+
     16F 9169      LD	R22,Y+
     170 9179      LD	R23,Y+
     171 9508      RET

⌨️ 快捷键说明

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