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

📄 解读.lst

📁 通过单片机对遥控发送过来的信号进行解读
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00FD 01FB      MOVW	R30,R22
    00FE 8020      LDD	R2,Z+0
    00FF 2022      TST	R2
    0100 F409      BNE	0x0102
    0101 C030      RJMP	0x0132
(0116)    for(i=0;;i++)
    0102 2744      CLR	R20
(0117)    {
(0118)       if(*(s+i)=='\0')break;
    0103 2FE4      MOV	R30,R20
    0104 27FF      CLR	R31
    0105 0FE6      ADD	R30,R22
    0106 1FF7      ADC	R31,R23
    0107 8020      LDD	R2,Z+0
    0108 2022      TST	R2
    0109 F409      BNE	0x010B
    010A C027      RJMP	0x0132
(0119)       if(!i%2)
    010B 2344      TST	R20
    010C F421      BNE	0x0111
    010D E081      LDI	R24,1
    010E E090      LDI	R25,0
    010F 017C      MOVW	R14,R24
    0110 C002      RJMP	0x0113
    0111 24EE      CLR	R14
    0112 24FF      CLR	R15
    0113 E022      LDI	R18,2
    0114 E030      LDI	R19,0
    0115 0187      MOVW	R16,R14
    0116 940E03EE  CALL	mod16s
    0118 3000      CPI	R16,0
    0119 0701      CPC	R16,R17
    011A F019      BEQ	0x011E
(0120) 	Set_display_Adress(y,x);
    011B 2D2A      MOV	R18,R10
    011C 2D0C      MOV	R16,R12
    011D DFB3      RCALL	_Set_display_Adress
(0121)       WriteData(*(s+i));
    011E 2FE4      MOV	R30,R20
    011F 27FF      CLR	R31
    0120 0FE6      ADD	R30,R22
    0121 1FF7      ADC	R31,R23
    0122 8100      LDD	R16,Z+0
    0123 DF7E      RCALL	_WriteData
(0122)       if(i%2)x++;
    0124 E012      LDI	R17,2
    0125 2F04      MOV	R16,R20
    0126 940E0428  CALL	mod8u
    0128 2300      TST	R16
    0129 F009      BEQ	0x012B
    012A 94A3      INC	R10
(0123)       if(x>7){y++,x=0;}
    012B E087      LDI	R24,7
    012C 158A      CP	R24,R10
    012D F410      BCC	0x0130
    012E 94C3      INC	R12
    012F 24AA      CLR	R10
    0130 9543      INC	R20
    0131 CFD1      RJMP	0x0103
    0132 940E0446  CALL	pop_gset5
    0134 9508      RET
_display_Char:
  ch                   --> Y+4
  x                    --> R22
  y                    --> R20
    0135 940E044F  CALL	push_gset2
    0137 2F62      MOV	R22,R18
    0138 2F40      MOV	R20,R16
(0124)    }
(0125) }
(0126) //显示单个字符
(0127) void display_Char(uchar y,uchar x,char ch) 
(0128) { 
(0129) 	Set_display_Adress(y,x);
    0139 2F26      MOV	R18,R22
    013A 2F04      MOV	R16,R20
    013B DF95      RCALL	_Set_display_Adress
(0130) 	WriteData(ch);
    013C 810C      LDD	R16,Y+4
    013D DF64      RCALL	_WriteData
    013E 940E0440  CALL	pop_gset2
    0140 9508      RET
_display_Num:
  tmp                  --> Y+0
  i                    --> R20
  N                    --> R22
  num                  --> R10
  x                    --> R12
  y                    --> R14
    0141 940E0449  CALL	push_gset5
    0143 2EC2      MOV	R12,R18
    0144 2EE0      MOV	R14,R16
    0145 9725      SBIW	R28,5
    0146 84AF      LDD	R10,Y+15
    0147 88B8      LDD	R11,Y+16
    0148 8969      LDD	R22,Y+17
(0131) 	
(0132) }
(0133) //可以显示 N 位的的整数num,(从个位起)最多显示6位
(0134) void display_Num(uchar y,uchar x,uint num,char N)//
(0135) {
(0136)  char tmp[5],i;//加大数组可以达到加多显示数位的效果
(0137)  //N%=6;
(0138)  for(i=0;i<N;i++)
    0149 2744      CLR	R20
    014A C012      RJMP	0x015D
(0139)  {
(0140)  tmp[i]=(num%10);
    014B E02A      LDI	R18,0xA
    014C E030      LDI	R19,0
    014D 0185      MOVW	R16,R10
    014E 940E040C  CALL	mod16u
    0150 01CE      MOVW	R24,R28
    0151 2FE4      MOV	R30,R20
    0152 27FF      CLR	R31
    0153 0FE8      ADD	R30,R24
    0154 1FF9      ADC	R31,R25
    0155 8300      STD	Z+0,R16
(0141)  num/=10;
    0156 E02A      LDI	R18,0xA
    0157 E030      LDI	R19,0
    0158 0185      MOVW	R16,R10
    0159 940E040E  CALL	div16u
    015B 0158      MOVW	R10,R16
    015C 9543      INC	R20
    015D 1746      CP	R20,R22
    015E F360      BCS	0x014B
(0142)  };
(0143)  i--;
    015F 954A      DEC	R20
    0160 C030      RJMP	0x0191
(0144) while(1)
(0145)     {
(0146) 	 Set_display_Adress(y,x);
    0161 2D2C      MOV	R18,R12
    0162 2D0E      MOV	R16,R14
    0163 DF6D      RCALL	_Set_display_Adress
(0147) 	 WriteData(tmp[i--]+0x30);
    0164 2E24      MOV	R2,R20
    0165 2433      CLR	R3
    0166 5041      SUBI	R20,1
    0167 01CE      MOVW	R24,R28
    0168 2DE2      MOV	R30,R2
    0169 27FF      CLR	R31
    016A 0FE8      ADD	R30,R24
    016B 1FF9      ADC	R31,R25
    016C 8100      LDD	R16,Z+0
    016D 5D00      SUBI	R16,0xD0
    016E DF33      RCALL	_WriteData
(0148) 	 if(!i)
    016F 2344      TST	R20
    0170 F449      BNE	0x017A
(0149) 	 {WriteData(tmp[i]+0x30);break;}
    0171 01CE      MOVW	R24,R28
    0172 2FE4      MOV	R30,R20
    0173 27FF      CLR	R31
    0174 0FE8      ADD	R30,R24
    0175 1FF9      ADC	R31,R25
    0176 8100      LDD	R16,Z+0
    0177 5D00      SUBI	R16,0xD0
    0178 DF29      RCALL	_WriteData
    0179 C018      RJMP	0x0192
(0150) 	 WriteData(tmp[i--]+0x30);
    017A 2E24      MOV	R2,R20
    017B 2433      CLR	R3
    017C 5041      SUBI	R20,1
    017D 01CE      MOVW	R24,R28
    017E 2DE2      MOV	R30,R2
    017F 27FF      CLR	R31
    0180 0FE8      ADD	R30,R24
    0181 1FF9      ADC	R31,R25
    0182 8100      LDD	R16,Z+0
    0183 5D00      SUBI	R16,0xD0
    0184 DF1D      RCALL	_WriteData
(0151) 	 if(!i)
    0185 2344      TST	R20
    0186 F449      BNE	0x0190
(0152) 	 {WriteData(tmp[i]+0x30);break;}
    0187 01CE      MOVW	R24,R28
    0188 2FE4      MOV	R30,R20
    0189 27FF      CLR	R31
    018A 0FE8      ADD	R30,R24
    018B 1FF9      ADC	R31,R25
    018C 8100      LDD	R16,Z+0
    018D 5D00      SUBI	R16,0xD0
    018E DF13      RCALL	_WriteData
    018F C002      RJMP	0x0192
(0153) 	 x++;
    0190 94C3      INC	R12
    0191 CFCF      RJMP	0x0161
(0154) 	}
(0155) 	x--;
    0192 94CA      DEC	R12
    0193 9625      ADIW	R28,5
    0194 940E0446  CALL	pop_gset5
    0196 9508      RET
_Display_Picture:
  i                    --> R20
  x                    --> R22
  y                    --> R14
  j                    --> R10
  l                    --> Y+0
  k                    --> R12
  tab                  --> Y+12
    0197 931A      ST	R17,-Y
    0198 930A      ST	R16,-Y
    0199 940E0449  CALL	push_gset5
    019B 9722      SBIW	R28,2
(0156) }
(0157) //全屏显示图形子程序 128*64
(0158) void Display_Picture(const uchar *tab )
(0159) {
(0160)   unsigned  i,j,k,l=0,x=0x80,y;
    019C 2400      CLR	R0
    019D 2411      CLR	R1
    019E 8219      STD	Y+1,R1
    019F 8208      STD	Y+0,R0
    01A0 E860      LDI	R22,0x80
    01A1 E070      LDI	R23,0
(0161)   for(i=0;i<2;i++)    //x=0x80 为第一行
    01A2 2744      CLR	R20
    01A3 2755      CLR	R21
    01A4 C037      RJMP	0x01DC
(0162)   {
(0163)    for(j=0,y=0x80; j<32;j++,y++)//y为水平方向以字节为单位
    01A5 24AA      CLR	R10
    01A6 24BB      CLR	R11
    01A7 E880      LDI	R24,0x80
    01A8 E090      LDI	R25,0
    01A9 017C      MOVW	R14,R24
    01AA C027      RJMP	0x01D2
(0164)    { 
(0165) 	WriteCommand(0x36);  //8位扩充指令集,允许绘图
    01AB E306      LDI	R16,0x36
    01AC DF06      RCALL	_WriteCommand
(0166) 	WriteCommand(y);//地址设置
    01AD 2D0E      MOV	R16,R14
    01AE DF04      RCALL	_WriteCommand
(0167) 	WriteCommand(x);
    01AF 2F06      MOV	R16,R22
    01B0 DF02      RCALL	_WriteCommand
(0168)     WriteCommand(0x30);
    01B1 E300      LDI	R16,0x30
    01B2 DF00      RCALL	_WriteCommand
(0169) 	k=16;
    01B3 E180      LDI	R24,0x10
    01B4 E090      LDI	R25,0
    01B5 016C      MOVW	R12,R24
    01B6 C00D      RJMP	0x01C4
(0170)     while(k--)
(0171) 	   WriteData(tab[l++]);		//时间复杂度(16*32)*2=32*32=32个H代码控制一个汉字,共有32个汉字,则是全屏
    01B7 8028      LDD	R2,Y+0
    01B8 8039      LDD	R3,Y+1
    01B9 01C1      MOVW	R24,R2
    01BA 9601      ADIW	R24,1
    01BB 8399      STD	Y+1,R25
    01BC 8388      STD	Y+0,R24
    01BD 01F1      MOVW	R30,R2
    01BE 840C      LDD	R0,Y+12
    01BF 841D      LDD	R1,Y+13
    01C0 0DE0      ADD	R30,R0
    01C1 1DF1      ADC	R31,R1
    01C2 9104      LPM	R16,0(Z)
    01C3 DEDE      RCALL	_WriteData
    01C4 0116      MOVW	R2,R12
    01C5 01C1      MOVW	R24,R2
    01C6 9701      SBIW	R24,1
    01C7 016C      MOVW	R12,R24
    01C8 2022      TST	R2
    01C9 F769      BNE	0x01B7
    01CA 2033      TST	R3
    01CB F759      BNE	0x01B7
    01CC 01C5      MOVW	R24,R10
    01CD 9601      ADIW	R24,1
    01CE 015C      MOVW	R10,R24
    01CF 01C7      MOVW	R24,R14
    01D0 9601      ADIW	R24,1
    01D1 017C      MOVW	R14,R24
    01D2 01C5      MOVW	R24,R10
    01D3 3280      CPI	R24,0x20
    01D4 E0E0      LDI	R30,0
    01D5 079E      CPC	R25,R30
    01D6 F408      BCC	0x01D8
    01D7 CFD3      RJMP	0x01AB
(0172)    }                            //按顺序读入:0->(32*32-1)
(0173)    x=0x88;//第三行
    01D8 E868      LDI	R22,0x88
    01D9 E070      LDI	R23,0
    01DA 5F4F      SUBI	R20,0xFF
    01DB 4F5F      SBCI	R21,0xFF
    01DC 3042      CPI	R20,2
    01DD E0E0      LDI	R30,0
    01DE 075E      CPC	R21,R30
    01DF F408      BCC	0x01E1
    01E0 CFC4      RJMP	0x01A5
    01E1 9622      ADIW	R28,2
    01E2 940E0446  CALL	pop_gset5
    01E4 9622      ADIW	R28,2
    01E5 9508      RET
_Display_Picture32:
  i                    --> Y+1
  x                    --> R22
  y                    --> R10
  j                    --> R20
  l                    --> Y+0
  k                    --> R14
  tab                  --> R12
    01E6 940E0449  CALL	push_gset5
    01E8 0168      MOVW	R12,R16
    01E9 9722      SBIW	R28,2
(0174)   }
(0175) }
(0176) //显示图形子程序 32*32
(0177) void Display_Picture32( unsigned char *tab )//
(0178) {
(0179)   unsigned  i,j,k,l=0,x=0x80,y;
    01EA 2400      CLR	R0
    01EB 2411      CLR	R1
    01EC 8219      STD	Y+1,R1
    01ED 8208      STD	Y+0,R0
    01EE E860      LDI	R22,0x80
    01EF E070      LDI	R23,0
(0180)  
(0181)    for(j=0,y=0x80; j<32;j++,y++)//水平扫描32行  第一个32行(汉字的两行)为一个连续地址

⌨️ 快捷键说明

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