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

📄 1602test.lst

📁 基于M16的字符液晶1602的驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
      49 E5CF      LDI	R28,0x5F
      4A E0D4      LDI	R29,4
      4B BFCD      OUT	0x3D,R28
      4C BFDE      OUT	0x3E,R29
      4D 51CE      SUBI	R28,0x1E
      4E 40D0      SBCI	R29,0
      4F EA0A      LDI	R16,0xAA
      50 8308      STD	Y+0,R16
      51 2400      CLR	R0
      52 E8E2      LDI	R30,0x82
      53 E0F0      LDI	R31,0
      54 E010      LDI	R17,0
      55 38E2      CPI	R30,0x82
      56 07F1      CPC	R31,R17
      57 F011      BEQ	0x005A
      58 9201      ST	R0,Z+
      59 CFFB      RJMP	0x0055
      5A 8300      STD	Z+0,R16
      5B E7E0      LDI	R30,0x70
      5C E0F0      LDI	R31,0
      5D E6A0      LDI	R26,0x60
      5E E0B0      LDI	R27,0
      5F E010      LDI	R17,0
      60 E000      LDI	R16,0
      61 BF0B      OUT	0x3B,R16
      62 39E2      CPI	R30,0x92
      63 07F1      CPC	R31,R17
      64 F021      BEQ	0x0069
      65 95C8      LPM
      66 9631      ADIW	R30,1
      67 920D      ST	R0,X+
      68 CFF9      RJMP	0x0062
      69 940E 0375 CALL	_main
_exit:
      6B CFFF      RJMP	_exit
FILE: E:\avr\1602测试程序\delay.c
(0001) #define _DELAY_C_
(0002) #include "DELAY.H" //用户自己定义的头文件
(0003) 
(0004) //1us延时函数
(0005) void delay_1us( void )
(0006) {
(0007)    uint i = 1;
_delay_1us:
  i                    --> R16
      6C E001      LDI	R16,1
      6D E010      LDI	R17,0
      6E C001      RJMP	0x0070
(0008)    while( i-- )
(0009)    {
(0010)       asm("nop");
      6F 0000      NOP
      70 0118      MOVW	R2,R16
      71 5001      SUBI	R16,1
      72 4010      SBCI	R17,0
      73 2022      TST	R2
      74 F7D1      BNE	0x006F
      75 2033      TST	R3
      76 F7C1      BNE	0x006F
      77 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
      78 940E 0517 CALL	push_xgset300C
      7A 0158      MOVW	R10,R16
(0011)    }
(0012) }
(0013) 
(0014) //nus延时函数
(0015) void delay_nus( uint n )
(0016) {
(0017)    uint i = 0;
      7B 2744      CLR	R20
      7C 2755      CLR	R21
(0018)    for (i = 0; i < n; i++)
      7D C003      RJMP	0x0081
(0019)    delay_1us();
      7E DFED      RCALL	_delay_1us
      7F 5F4F      SUBI	R20,0xFF
      80 4F5F      SBCI	R21,0xFF
      81 154A      CP	R20,R10
      82 055B      CPC	R21,R11
      83 F3D0      BCS	0x007E
      84 940C 051C JMP	pop_xgset300C
(0020) }
(0021) 
(0022) //1ms延时函数
(0023) void delay_1ms( void )
(0024) {
(0025)    uint i;
(0026)    for (i = 0; i < 1140; i++)
_delay_1ms:
  i                    --> R16
      86 2700      CLR	R16
      87 2711      CLR	R17
      88 C002      RJMP	0x008B
      89 5F0F      SUBI	R16,0xFF
      8A 4F1F      SBCI	R17,0xFF
      8B 3704      CPI	R16,0x74
      8C E0E4      LDI	R30,4
      8D 071E      CPC	R17,R30
      8E F3D0      BCS	0x0089
      8F 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
      90 940E 0517 CALL	push_xgset300C
      92 0158      MOVW	R10,R16
(0027)    {;}
(0028) }
(0029) 
(0030) //nms延时函数
(0031) void delay_nms( uint n )
(0032) {
(0033)    uint i = 0;
      93 2744      CLR	R20
      94 2755      CLR	R21
(0034)    for (i = 0; i < n; i++)
      95 C003      RJMP	0x0099
(0035)    delay_1ms();
      96 DFEF      RCALL	_delay_1ms
      97 5F4F      SUBI	R20,0xFF
      98 4F5F      SBCI	R21,0xFF
      99 154A      CP	R20,R10
      9A 055B      CPC	R21,R11
      9B F3D0      BCS	0x0096
      9C 940C 051C JMP	pop_xgset300C
_delay_ns:
  i                    --> R10
  n                    --> R12
      9E 92AA      ST	R10,-Y
      9F 92CA      ST	R12,-Y
      A0 2EC0      MOV	R12,R16
(0036) }
(0037) 
(0038) //延时1S
(0039) void delay_ns( uchar n )
(0040) {
(0041)     uchar i;
(0042) 	for( i = 0; i < n; i++ )
      A1 24AA      CLR	R10
      A2 C004      RJMP	0x00A7
(0043) 	{
(0044)   	 	delay_nms( 1000 );
      A3 EE08      LDI	R16,0xE8
      A4 E013      LDI	R17,3
      A5 DFEA      RCALL	_delay_nms
      A6 94A3      INC	R10
      A7 14AC      CP	R10,R12
      A8 F3D0      BCS	0x00A3
      A9 90C9      LD	R12,Y+
      AA 90A9      LD	R10,Y+
      AB 9508      RET
_long_to_string:
  p1                   --> R10
  k2                   --> R14
  datachar2            --> Y,+14
  n                    --> Y,+25
  k1                   --> R12
  datachar1            --> Y,+4
  i                    --> Y,+24
  datainttmp           --> Y,+0
  p                    --> Y,+40
  dataint              --> Y,+36
      AC 940E 045E CALL	push_arg4
      AE 940E 050C CALL	push_xgsetF0FC
      B0 976A      SBIW	R28,0x1A
FILE: E:\avr\1602测试程序\lcd.c
(0001) #define _LCD_C_
(0002) #include "LCD.h"
(0003) #include <iom16v.h>
(0004) 
(0005) /*****************************************
(0006) ** 将一个整型数据转化为字符串
(0007) ** 入口参数 要转换的整型数: dataint, 数组p[10]
(0008) ** 改变思路:整数 -->字符串-->加字符串结束标志
(0009) ** 可以转换小于0的整数
(0010) *****************************************/
(0011) void long_to_string( long int dataint, char *p  )
(0012) {
(0013)     long int datainttmp;
(0014)     char *p1;             //指向转换成为数组时用到
(0015)     char datachar1[10];
(0016)     char datachar2[10];
(0017)     uchar n = 0;         //取整型数据的位数
      B1 2400      CLR	R0
      B2 8E09      STD	Y+25,R0
(0018)     uchar i = 0;
      B3 8E08      STD	Y+24,R0
(0019)     uchar k1 = 0;         //取字符个数
      B4 24CC      CLR	R12
(0020)     uchar k2 = 0;         //取字符个数
      B5 24EE      CLR	R14
(0021) 
(0022)     if( dataint >= 0 )
      B6 E040      LDI	R20,0
      B7 E050      LDI	R21,0
      B8 E060      LDI	R22,0
      B9 E070      LDI	R23,0
      BA A02C      LDD	R2,Y+36
      BB A03D      LDD	R3,Y+37
      BC A04E      LDD	R4,Y+38
      BD A05F      LDD	R5,Y+39
      BE 1624      CP	R2,R20
      BF 0635      CPC	R3,R21
      C0 0646      CPC	R4,R22
      C1 0657      CPC	R5,R23
      C2 F02C      BLT	0x00C8
(0023)     datainttmp = ( long int )dataint;
      C3 8228      STD	Y+0,R2
      C4 8239      STD	Y+1,R3
      C5 824A      STD	Y+2,R4
      C6 825B      STD	Y+3,R5
      C7 C014      RJMP	0x00DC
(0024)     else datainttmp = ( long int )dataint * ( -1 );
      C8 A02C      LDD	R2,Y+36
      C9 A03D      LDD	R3,Y+37
      CA A04E      LDD	R4,Y+38
      CB A05F      LDD	R5,Y+39
      CC EF4F      LDI	R20,0xFF
      CD EF5F      LDI	R21,0xFF
      CE EF6F      LDI	R22,0xFF
      CF EF7F      LDI	R23,0xFF
      D0 925A      ST	R5,-Y
      D1 924A      ST	R4,-Y
      D2 923A      ST	R3,-Y
      D3 922A      ST	R2,-Y
      D4 018A      MOVW	R16,R20
      D5 019B      MOVW	R18,R22
      D6 940E 04CD CALL	empy32s
      D8 8308      STD	Y+0,R16
      D9 8319      STD	Y+1,R17
      DA 832A      STD	Y+2,R18
      DB 833B      STD	Y+3,R19
(0025) 
(0026)     p1 = datachar2;
      DC 01CE      MOVW	R24,R28
      DD 960E      ADIW	R24,0xE
      DE 015C      MOVW	R10,R24
      DF C037      RJMP	0x0117
(0027) 
(0028) 
(0029)     while( datainttmp != 0 )
(0030)     {
(0031)         datachar1[n++] = ( datainttmp % 10 ) + 0x30;  //转换为字符并取得这个整型数据的位数 n
      E0 8C29      LDD	R2,Y+25
      E1 2433      CLR	R3
      E2 0131      MOVW	R6,R2
      E3 2D82      MOV	R24,R2
      E4 5F8F      SUBI	R24,0xFF
      E5 8F89      STD	Y+25,R24
      E6 E04A      LDI	R20,0xA
      E7 E050      LDI	R21,0
      E8 E060      LDI	R22,0
      E9 E070      LDI	R23,0
      EA 8108      LDD	R16,Y+0
      EB 8119      LDD	R17,Y+1
      EC 812A      LDD	R18,Y+2
      ED 813B      LDD	R19,Y+3
      EE 937A      ST	R23,-Y
      EF 936A      ST	R22,-Y
      F0 935A      ST	R21,-Y
      F1 934A      ST	R20,-Y
      F2 940E 046B CALL	mod32s
      F4 0118      MOVW	R2,R16
      F5 0129      MOVW	R4,R18
      F6 E340      LDI	R20,0x30
      F7 E050      LDI	R21,0
      F8 E060      LDI	R22,0
      F9 E070      LDI	R23,0
      FA 0E24      ADD	R2,R20
      FB 1E35      ADC	R3,R21
      FC 1E46      ADC	R4,R22
      FD 1E57      ADC	R5,R23
      FE 01CE      MOVW	R24,R28
      FF 9604      ADIW	R24,4
     100 2DE6      MOV	R30,R6
     101 27FF      CLR	R31
     102 0FE8      ADD	R30,R24
     103 1FF9      ADC	R31,R25
     104 8220      STD	Z+0,R2
(0032)         datainttmp /= 10;
     105 E04A      LDI	R20,0xA
     106 E050      LDI	R21,0
     107 E060      LDI	R22,0
     108 E070      LDI	R23,0
     109 8108      LDD	R16,Y+0
     10A 8119      LDD	R17,Y+1
     10B 812A      LDD	R18,Y+2
     10C 813B      LDD	R19,Y+3
     10D 937A      ST	R23,-Y
     10E 936A      ST	R22,-Y
     10F 935A      ST	R21,-Y
     110 934A      ST	R20,-Y
     111 940E 0469 CALL	div32s
     113 8308      STD	Y+0,R16
     114 8319      STD	Y+1,R17
     115 832A      STD	Y+2,R18
     116 833B      STD	Y+3,R19
     117 8028      LDD	R2,Y+0
     118 8039      LDD	R3,Y+1
     119 804A      LDD	R4,Y+2
     11A 805B      LDD	R5,Y+3
     11B 9488      BCLR	0
     11C 2022      TST	R2
     11D 0432      CPC	R3,R2
     11E 0442      CPC	R4,R2
     11F 0452      CPC	R5,R2
     120 F009      BEQ	0x0122
     121 CFBE      RJMP	0x00E0
(0033)     }
(0034) 
(0035)     if( dataint > 0 )          //如果要转换的整型数据>0
     122 E040      LDI	R20,0
     123 E050      LDI	R21,0
     124 E060      LDI	R22,0
     125 E070      LDI	R23,0
     126 A02C      LDD	R2,Y+36
     127 A03D      LDD	R3,Y+37
     128 A04E      LDD	R4,Y+38
     129 A05F      LDD	R5,Y+39
     12A 1542      CP	R20,R2
     12B 0553      CPC	R21,R3
     12C 0564      CPC	R22,R4
     12D 0575      CPC	R23,R5
     12E F52C      BGE	0x0154
(0036)     {
(0037)         k1 = n - 1;
     12F 8D89      LDD	R24,Y+25
     130 5081      SUBI	R24,1
     131 2EC8      MOV	R12,R24
(0038)         k2 = n;
     132 8CE9      LDD	R14,Y+25
(0039) 
(0040)         for( i = 0; i < k2; i++, k1-- )
     133 2400      CLR	R0
     134 8E08      STD	Y+24,R0
     135 C012      RJMP	0x0148
(0041)         {
(0042)             datachar2[k1] = datachar1[i];               //将数字符串倒过来
     136 01CE      MOVW	R24,R28
     137 9604      ADIW	R24,4
     138 8DE8      LDD	R30,Y+24
     139 27FF      CLR	R31
     13A 0FE8      ADD	R30,R24
     13B 1FF9      ADC	R31,R25
     13C 8020      LDD	R2,Z+0
     13D 01CE      MOVW	R24,R28
     13E 960E      ADIW	R24,0xE
     13F 2DEC      MOV	R30,R12
     140 27FF      CLR	R31
     141 0FE8      ADD	R30,R24
     142 1FF9      ADC	R31,R25
     143 8220      STD	Z+0,R2
     144 8C08      LDD	R0,Y+24
     145 9403      INC	R0
     146 8E08      STD	Y+24,R0
     147 94CA      DEC	R12
     148 8C08      LDD	R0,Y+24
     149 140E      CP	R0,R14
     14A F358      BCS	0x0136
(0043)         }
(0044)         datachar2[n] = '\0';      //字符串结束标志
     14B 01CE      MOVW	R24,R28
     14C 960E      ADIW	R24,0xE
     14D 8DE9      LDD	R30,Y+25
     14E 27FF      CLR	R31
     14F 0FE8      ADD	R30,R24
     150 1FF9      ADC	R31,R25
     151 2422      CLR	R2
     152 8220      STD	Z+0,R2
(0045)     }
     153 C042      RJMP	0x0196
(0046) 
(0047)     else if( dataint < 0 )       //<0
     154 E040      LDI	R20,0
     155 E050      LDI	R21,0
     156 E060      LDI	R22,0
     157 E070      LDI	R23,0
     158 A02C      LDD	R2,Y+36
     159 A03D      LDD	R3,Y+37
     15A A04E      LDD	R4,Y+38
     15B A05F      LDD	R5,Y+39
     15C 1624      CP	R2,R20
     15D 0635      CPC	R3,R21
     15E 0646      CPC	R4,R22
     15F 0657      CPC	R5,R23
     160 F53C      BGE	0x0188
(0048)     {
(0049)         k1 = n;
     161 8CC9      LDD	R12,Y+25
(0050)         k2 = n + 1;
     162 2D8C      MOV	R24,R12
     163 5F8F      SUBI	R24,0xFF
     164 2EE8      MOV	R14,R24
(0051) 
(0052)         for( i = 0; i < k2; i++, k1-- )
     165 2400      CLR	R0
     166 8E08      STD	Y+24,R0
     167 C012      RJMP	0x017A
(0053)         {
(0054)             datachar2[k1] = datachar1[i];
     168 01CE      MOVW	R24,R28
     169 9604      ADIW	R24,4
     16A 8DE8      LDD	R30,Y+24
     16B 27FF      CLR	R31
     16C 0FE8      ADD	R30,R24
     16D 1FF9      ADC	R31,R25
     16E 8020      LDD	R2,Z+0
     16F 01CE      MOVW	R24,R28
     170 960E      ADIW	R24,0xE
     171 2DEC      MOV	R30,R12
     172 27FF      CLR	R31
     173 0FE8      ADD	R30,R24
     174 1FF9      ADC	R31,R25
     175 8220      STD	Z+0,R2
     176 8C08      LDD	R0,Y+24
     177 9403      INC	R0
     178 8E08      STD	Y+24,R0
     179 94CA      DEC	R12
     17A 8C08      LDD	R0,Y+24
     17B 140E      CP	R0,R14
     17C F358      BCS	0x0168
(0055)         }

⌨️ 快捷键说明

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