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

📄 lius.lst

📁 本人编写的mega16单片机控制的 八种花样流水灯源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      2A E5CF      LDI	R28,0x5F
      2B E0D4      LDI	R29,4
      2C BFCD      OUT	0x3D,R28
      2D BFDE      OUT	0x3E,R29
      2E 51CE      SUBI	R28,0x1E
      2F 40D0      SBCI	R29,0
      30 EA0A      LDI	R16,0xAA
      31 8308      STD	Y+0,R16
      32 2400      CLR	R0
      33 E6E0      LDI	R30,0x60
      34 E0F0      LDI	R31,0
      35 E010      LDI	R17,0
      36 36E0      CPI	R30,0x60
      37 07F1      CPC	R31,R17
      38 F011      BEQ	0x003B
      39 9201      ST	R0,Z+
      3A CFFB      RJMP	0x0036
      3B 8300      STD	Z+0,R16
      3C E5E4      LDI	R30,0x54
      3D E0F0      LDI	R31,0
      3E E6A0      LDI	R26,0x60
      3F E0B0      LDI	R27,0
      40 E010      LDI	R17,0
      41 E000      LDI	R16,0
      42 BF0B      OUT	0x3B,R16
      43 35E4      CPI	R30,0x54
      44 07F1      CPC	R31,R17
      45 F021      BEQ	0x004A
      46 95C8      LPM
      47 9631      ADIW	R30,1
      48 920D      ST	R0,X+
      49 CFF9      RJMP	0x0043
      4A 940E 013B CALL	_main
_exit:
      4C CFFF      RJMP	_exit
_Delay:
  a                    --> R16
  b                    --> R18
  c                    --> R20
      4D 934A      ST	R20,-Y
FILE: D:\试验\ls.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int 
(0005)  
(0006) void Delay()                        //延时函数
(0007)     {
(0008)     uchar a, b, c;
(0009)     for (a = 1; a; a++)
      4E E001      LDI	R16,1
      4F C00B      RJMP	0x005B
(0010)         for (b = 1; b; b++)
      50 E021      LDI	R18,1
      51 C006      RJMP	0x0058
(0011)             for (c = 0; c<10; c++)  //循环次数=255*255*10
      52 2744      CLR	R20
      53 C001      RJMP	0x0055
      54 9543      INC	R20
      55 304A      CPI	R20,0xA
      56 F3E8      BCS	0x0054
      57 9523      INC	R18
      58 2322      TST	R18
      59 F7C1      BNE	0x0052
      5A 9503      INC	R16
      5B 2300      TST	R16
      5C F799      BNE	0x0050
      5D 9149      LD	R20,Y+
      5E 9508      RET
_DelayMs:
  j                    --> R20
  i                    --> R16
      5F 934A      ST	R20,-Y
      60 935A      ST	R21,-Y
(0012)           ;
(0013)     }
(0014)  
(0015) void DelayMs(uint i)                //1ms延时,准确性较Delay();高
(0016)    {
      61 C00A      RJMP	0x006C
(0017)     while(i--)
(0018)     {                          
(0019)      uint j;                
(0020)         for(j=1;j<=613;j++)   
      62 E041      LDI	R20,1
      63 E050      LDI	R21,0
      64 C002      RJMP	0x0067
      65 5F4F      SUBI	R20,0xFF
      66 4F5F      SBCI	R21,0xFF
      67 E685      LDI	R24,0x65
      68 E092      LDI	R25,2
      69 1784      CP	R24,R20
      6A 0795      CPC	R25,R21
      6B F7C8      BCC	0x0065
      6C 0118      MOVW	R2,R16
      6D 5001      SUBI	R16,1
      6E 4010      SBCI	R17,0
      6F 2022      TST	R2
      70 F789      BNE	0x0062
      71 2033      TST	R3
      72 F779      BNE	0x0062
      73 9159      LD	R21,Y+
      74 9149      LD	R20,Y+
      75 9508      RET
(0021)       ;               
(0022)     }                       
(0023)    }
(0024)    
(0025) void LED_on()                            //打开所有LED
(0026)     {
(0027)  PORTC =0X00; 
_LED_on:
      76 2422      CLR	R2
      77 BA25      OUT	0x15,R2
(0028)  Delay();
      78 DFD4      RCALL	_Delay
      79 9508      RET
(0029)  } 
(0030)  
(0031) void LED_off()                           //关闭所有LED
(0032)     {
(0033)  PORTC = 0xFF;
_LED_off:
      7A EF8F      LDI	R24,0xFF
      7B BB85      OUT	0x15,R24
(0034)  Delay(); 
      7C DFD0      RCALL	_Delay
      7D 9508      RET
_LED_01:
  i                    --> R10
      7E 92AA      ST	R10,-Y
      7F 92BA      ST	R11,-Y
      80 0158      MOVW	R10,R16
(0035)  }
(0036) 
(0037) void LED_01(int i)                  //LED亮灭控制
(0038)     {
(0039)     PORTC = ~BIT(i);                //输出低电平 
      81 E001      LDI	R16,1
      82 E010      LDI	R17,0
      83 0195      MOVW	R18,R10
      84 940E 0238 CALL	lsl16
      86 0118      MOVW	R2,R16
      87 9420      COM	R2
      88 9430      COM	R3
      89 BA25      OUT	0x15,R2
(0040)     DelayMs(100);                   //调用延时程序
      8A E604      LDI	R16,0x64
      8B E010      LDI	R17,0
      8C DFD2      RCALL	_DelayMs
      8D 90B9      LD	R11,Y+
      8E 90A9      LD	R10,Y+
      8F 9508      RET
_LED_02:
  i                    --> R20
      90 934A      ST	R20,-Y
      91 935A      ST	R21,-Y
      92 01A8      MOVW	R20,R16
(0041)     }
(0042)  
(0043) void LED_02(int i)                  //间隔点亮
(0044)     {
(0045)  PORTC=~(BIT(i)|BIT(i-2));
      93 019A      MOVW	R18,R20
      94 5022      SUBI	R18,2
      95 4030      SBCI	R19,0
      96 E001      LDI	R16,1
      97 E010      LDI	R17,0
      98 940E 0238 CALL	lsl16
      9A 0118      MOVW	R2,R16
      9B E001      LDI	R16,1
      9C E010      LDI	R17,0
      9D 019A      MOVW	R18,R20
      9E 940E 0238 CALL	lsl16
      A0 0128      MOVW	R4,R16
      A1 2842      OR	R4,R2
      A2 2853      OR	R5,R3
      A3 9440      COM	R4
      A4 9450      COM	R5
      A5 BA45      OUT	0x15,R4
(0046)  DelayMs(100);
      A6 E604      LDI	R16,0x64
      A7 E010      LDI	R17,0
      A8 DFB6      RCALL	_DelayMs
      A9 9159      LD	R21,Y+
      AA 9149      LD	R20,Y+
      AB 9508      RET
_LED_03:
  i                    --> R20
      AC 934A      ST	R20,-Y
      AD 935A      ST	R21,-Y
      AE 01A8      MOVW	R20,R16
(0047)  }
(0048)  
(0049) void LED_03(int i)                 //相临点亮
(0050)     {
(0051)  PORTC=~(BIT(i)|BIT(i-1));      //~后内容需用括号括起来
      AF 019A      MOVW	R18,R20
      B0 5021      SUBI	R18,1
      B1 4030      SBCI	R19,0
      B2 E001      LDI	R16,1
      B3 E010      LDI	R17,0
      B4 940E 0238 CALL	lsl16
      B6 0118      MOVW	R2,R16
      B7 E001      LDI	R16,1
      B8 E010      LDI	R17,0
      B9 019A      MOVW	R18,R20
      BA 940E 0238 CALL	lsl16
      BC 0128      MOVW	R4,R16
      BD 2842      OR	R4,R2
      BE 2853      OR	R5,R3
      BF 9440      COM	R4
      C0 9450      COM	R5
      C1 BA45      OUT	0x15,R4
(0052)  DelayMs(100);
      C2 E604      LDI	R16,0x64
      C3 E010      LDI	R17,0
      C4 DF9A      RCALL	_DelayMs
      C5 9159      LD	R21,Y+
      C6 9149      LD	R20,Y+
      C7 9508      RET
_LED_04:
  i                    --> R20
      C8 934A      ST	R20,-Y
      C9 935A      ST	R21,-Y
      CA 01A8      MOVW	R20,R16
(0053)  }
(0054)  
(0055) void LED_04(int i)                 //发散聚集点亮
(0056)     {
(0057)  switch(i)
      CB 3040      CPI	R20,0
      CC 0745      CPC	R20,R21
      CD F069      BEQ	0x00DB
      CE 3041      CPI	R20,1
      CF E0E0      LDI	R30,0
      D0 075E      CPC	R21,R30
      D1 F079      BEQ	0x00E1
      D2 3042      CPI	R20,2
      D3 E0E0      LDI	R30,0
      D4 075E      CPC	R21,R30
      D5 F089      BEQ	0x00E7
      D6 3043      CPI	R20,3
      D7 E0E0      LDI	R30,0
      D8 075E      CPC	R21,R30
      D9 F099      BEQ	0x00ED
      DA C017      RJMP	0x00F2
(0058)   {
(0059)   case 0:PORTC=0xE7;DelayMs(100);break;    //延时100ms
      DB EE87      LDI	R24,0xE7
      DC BB85      OUT	0x15,R24
      DD E604      LDI	R16,0x64
      DE E010      LDI	R17,0
      DF DF7F      RCALL	_DelayMs
      E0 C011      RJMP	0x00F2
(0060)   case 1:PORTC=0xDB;DelayMs(100);break;
      E1 ED8B      LDI	R24,0xDB
      E2 BB85      OUT	0x15,R24
      E3 E604      LDI	R16,0x64
      E4 E010      LDI	R17,0
      E5 DF79      RCALL	_DelayMs
      E6 C00B      RJMP	0x00F2
(0061)   case 2:PORTC=0xBD;DelayMs(100);break;
      E7 EB8D      LDI	R24,0xBD
      E8 BB85      OUT	0x15,R24
      E9 E604      LDI	R16,0x64
      EA E010      LDI	R17,0
      EB DF73      RCALL	_DelayMs
      EC C005      RJMP	0x00F2
(0062)   case 3:PORTC=0x7E;DelayMs(100);break;
      ED E78E      LDI	R24,0x7E
      EE BB85      OUT	0x15,R24
      EF E604      LDI	R16,0x64
      F0 E010      LDI	R17,0
      F1 DF6D      RCALL	_DelayMs
(0063)   default:break;
      F2 9159      LD	R21,Y+
      F3 9149      LD	R20,Y+
      F4 9508      RET
_LED_05:
  i                    --> R20
      F5 934A      ST	R20,-Y
      F6 935A      ST	R21,-Y
      F7 01A8      MOVW	R20,R16
(0064)   }
(0065)  }
(0066)  
(0067) void LED_05(int i)                 //00,0F,F0,FF方式显示
(0068)     {
(0069)  switch(i)
      F8 3040      CPI	R20,0
      F9 0745      CPC	R20,R21
      FA F069      BEQ	0x0108
      FB 3041      CPI	R20,1
      FC E0E0      LDI	R30,0
      FD 075E      CPC	R21,R30
      FE F079      BEQ	0x010E
      FF 3042      CPI	R20,2
     100 E0E0      LDI	R30,0
     101 075E      CPC	R21,R30
     102 F089      BEQ	0x0114
     103 3043      CPI	R20,3
     104 E0E0      LDI	R30,0
     105 075E      CPC	R21,R30
     106 F099      BEQ	0x011A
     107 C017      RJMP	0x011F
(0070)   {
(0071)   case 0:PORTC=0x00;DelayMs(100);break;    //延时100ms
     108 2422      CLR	R2
     109 BA25      OUT	0x15,R2
     10A E604      LDI	R16,0x64
     10B E010      LDI	R17,0
     10C DF52      RCALL	_DelayMs
     10D C011      RJMP	0x011F
(0072)   case 1:PORTC=0x0F;DelayMs(100);break;
     10E E08F      LDI	R24,0xF
     10F BB85      OUT	0x15,R24
     110 E604      LDI	R16,0x64
     111 E010      LDI	R17,0
     112 DF4C      RCALL	_DelayMs
     113 C00B      RJMP	0x011F
(0073)   case 2:PORTC=0xF0;DelayMs(100);break;
     114 EF80      LDI	R24,0xF0
     115 BB85      OUT	0x15,R24
     116 E604      LDI	R16,0x64
     117 E010      LDI	R17,0
     118 DF46      RCALL	_DelayMs
     119 C005      RJMP	0x011F
(0074)   case 3:PORTC=0xFF;DelayMs(100);break;
     11A EF8F      LDI	R24,0xFF
     11B BB85      OUT	0x15,R24
     11C E604      LDI	R16,0x64
     11D E010      LDI	R17,0
     11E DF40      RCALL	_DelayMs
(0075)   default:break;
     11F 9159      LD	R21,Y+
     120 9149      LD	R20,Y+
     121 9508      RET
_LED_06:
  i                    --> R20
     122 934A      ST	R20,-Y
     123 935A      ST	R21,-Y
     124 01A8      MOVW	R20,R16
(0076)   }
(0077)  }
(0078)  
(0079) void LED_06(int i)
(0080)    {
(0081)    switch(i)
     125 3040      CPI	R20,0
     126 0745      CPC	R20,R21
     127 F029      BEQ	0x012D
     128 3041      CPI	R20,1
     129 E0E0      LDI	R30,0
     12A 075E      CPC	R21,R30
     12B F039      BEQ	0x0133
     12C C00B      RJMP	0x0138
(0082)     {
(0083)  case 0:PORTC=0XAA;DelayMs(100);break;
     12D EA8A      LDI	R24,0xAA
     12E BB85      OUT	0x15,R24
     12F E604      LDI	R16,0x64
     130 E010      LDI	R17,0
     131 DF2D      RCALL	_DelayMs
     132 C005      RJMP	0x0138
(0084)  case 1:PORTC=0X55;DelayMs(100);break;
     133 E585      LDI	R24,0x55
     134 BB85      OUT	0x15,R24
     135 E604      LDI	R16,0x64

⌨️ 快捷键说明

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