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

📄 gsm_m22.lst

📁 单片机控制GSM22来工作
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0117)   if(*s=='\0')return;
    0183 01FB      MOVW	R30,R22
    0184 8020      LDD	R2,Z+0
    0185 2022      TST	R2
    0186 F409      BNE	0x0188
    0187 C030      RJMP	0x01B8
(0118)    for(i=0;;i++)
    0188 2744      CLR	R20
(0119)    {
(0120)       if(*(s+i)=='\0')break;
    0189 2FE4      MOV	R30,R20
    018A 27FF      CLR	R31
    018B 0FE6      ADD	R30,R22
    018C 1FF7      ADC	R31,R23
    018D 8020      LDD	R2,Z+0
    018E 2022      TST	R2
    018F F409      BNE	0x0191
    0190 C027      RJMP	0x01B8
(0121)       if(!i%2)
    0191 2344      TST	R20
    0192 F421      BNE	0x0197
    0193 E081      LDI	R24,1
    0194 E090      LDI	R25,0
    0195 017C      MOVW	R14,R24
    0196 C002      RJMP	0x0199
    0197 24EE      CLR	R14
    0198 24FF      CLR	R15
    0199 E022      LDI	R18,2
    019A E030      LDI	R19,0
    019B 0187      MOVW	R16,R14
    019C 940E04D4  CALL	mod16s
    019E 3000      CPI	R16,0
    019F 0701      CPC	R16,R17
    01A0 F019      BEQ	0x01A4
(0122) 	Set_display_Adress(y,x);
    01A1 2D2A      MOV	R18,R10
    01A2 2D0C      MOV	R16,R12
    01A3 DFB3      RCALL	_Set_display_Adress
(0123)       WriteData(*(s+i));
    01A4 2FE4      MOV	R30,R20
    01A5 27FF      CLR	R31
    01A6 0FE6      ADD	R30,R22
    01A7 1FF7      ADC	R31,R23
    01A8 8100      LDD	R16,Z+0
    01A9 DF7E      RCALL	_WriteData
(0124)       if(i%2)x++;
    01AA E012      LDI	R17,2
    01AB 2F04      MOV	R16,R20
    01AC 940E050E  CALL	mod8u
    01AE 2300      TST	R16
    01AF F009      BEQ	0x01B1
    01B0 94A3      INC	R10
(0125)       if(x>7){y++,x=0;}
    01B1 E087      LDI	R24,7
    01B2 158A      CP	R24,R10
    01B3 F410      BCC	0x01B6
    01B4 94C3      INC	R12
    01B5 24AA      CLR	R10
    01B6 9543      INC	R20
    01B7 CFD1      RJMP	0x0189
    01B8 940E052F  CALL	pop_gset5
    01BA 9508      RET
_display_Char:
  ch                   --> Y+4
  x                    --> R22
  y                    --> R20
    01BB 940E0538  CALL	push_gset2
    01BD 2F62      MOV	R22,R18
    01BE 2F40      MOV	R20,R16
(0126)    }
(0127) }
(0128) //显示单个字符
(0129) void display_Char(uchar y,uchar x,char ch) 
(0130) { 
(0131) 	Set_display_Adress(y,x);
    01BF 2F26      MOV	R18,R22
    01C0 2F04      MOV	R16,R20
    01C1 DF95      RCALL	_Set_display_Adress
(0132) 	WriteData(ch);
    01C2 810C      LDD	R16,Y+4
    01C3 DF64      RCALL	_WriteData
    01C4 940E0526  CALL	pop_gset2
    01C6 9508      RET
_display_Num:
  tmp                  --> Y+0
  i                    --> R20
  N                    --> R22
  num                  --> R10
  x                    --> R12
  y                    --> R14
    01C7 940E0532  CALL	push_gset5
    01C9 2EC2      MOV	R12,R18
    01CA 2EE0      MOV	R14,R16
    01CB 9725      SBIW	R28,5
    01CC 84AF      LDD	R10,Y+15
    01CD 88B8      LDD	R11,Y+16
    01CE 8969      LDD	R22,Y+17
(0133) 	
(0134) }
(0135) //可以显示 N 位的的整数num,(从个位起)最多显示6位
(0136) void display_Num(uchar y,uchar x,uint num,char N)//
(0137) {
(0138)  char tmp[5],i;//加大数组可以达到加多显示数位的效果
(0139)  //N%=6;
(0140)  for(i=0;i<N;i++)
    01CF 2744      CLR	R20
    01D0 C012      RJMP	0x01E3
(0141)  {
(0142)  tmp[i]=(num%10);
    01D1 E02A      LDI	R18,0xA
    01D2 E030      LDI	R19,0
    01D3 0185      MOVW	R16,R10
    01D4 940E04F2  CALL	mod16u
    01D6 01CE      MOVW	R24,R28
    01D7 2FE4      MOV	R30,R20
    01D8 27FF      CLR	R31
    01D9 0FE8      ADD	R30,R24
    01DA 1FF9      ADC	R31,R25
    01DB 8300      STD	Z+0,R16
(0143)  num/=10;
    01DC E02A      LDI	R18,0xA
    01DD E030      LDI	R19,0
    01DE 0185      MOVW	R16,R10
    01DF 940E04F4  CALL	div16u
    01E1 0158      MOVW	R10,R16
    01E2 9543      INC	R20
    01E3 1746      CP	R20,R22
    01E4 F360      BCS	0x01D1
(0144)  };
(0145)  i--;
    01E5 954A      DEC	R20
    01E6 C030      RJMP	0x0217
(0146) while(1)
(0147)     {
(0148) 	 Set_display_Adress(y,x);
    01E7 2D2C      MOV	R18,R12
    01E8 2D0E      MOV	R16,R14
    01E9 DF6D      RCALL	_Set_display_Adress
(0149) 	 WriteData(tmp[i--]+0x30);
    01EA 2E24      MOV	R2,R20
    01EB 2433      CLR	R3
    01EC 5041      SUBI	R20,1
    01ED 01CE      MOVW	R24,R28
    01EE 2DE2      MOV	R30,R2
    01EF 27FF      CLR	R31
    01F0 0FE8      ADD	R30,R24
    01F1 1FF9      ADC	R31,R25
    01F2 8100      LDD	R16,Z+0
    01F3 5D00      SUBI	R16,0xD0
    01F4 DF33      RCALL	_WriteData
(0150) 	 if(!i)
    01F5 2344      TST	R20
    01F6 F449      BNE	0x0200
(0151) 	 {WriteData(tmp[i]+0x30);break;}
    01F7 01CE      MOVW	R24,R28
    01F8 2FE4      MOV	R30,R20
    01F9 27FF      CLR	R31
    01FA 0FE8      ADD	R30,R24
    01FB 1FF9      ADC	R31,R25
    01FC 8100      LDD	R16,Z+0
    01FD 5D00      SUBI	R16,0xD0
    01FE DF29      RCALL	_WriteData
    01FF C018      RJMP	0x0218
(0152) 	 WriteData(tmp[i--]+0x30);
    0200 2E24      MOV	R2,R20
    0201 2433      CLR	R3
    0202 5041      SUBI	R20,1
    0203 01CE      MOVW	R24,R28
    0204 2DE2      MOV	R30,R2
    0205 27FF      CLR	R31
    0206 0FE8      ADD	R30,R24
    0207 1FF9      ADC	R31,R25
    0208 8100      LDD	R16,Z+0
    0209 5D00      SUBI	R16,0xD0
    020A DF1D      RCALL	_WriteData
(0153) 	 if(!i)
    020B 2344      TST	R20
    020C F449      BNE	0x0216
(0154) 	 {WriteData(tmp[i]+0x30);break;}
    020D 01CE      MOVW	R24,R28
    020E 2FE4      MOV	R30,R20
    020F 27FF      CLR	R31
    0210 0FE8      ADD	R30,R24
    0211 1FF9      ADC	R31,R25
    0212 8100      LDD	R16,Z+0
    0213 5D00      SUBI	R16,0xD0
    0214 DF13      RCALL	_WriteData
    0215 C002      RJMP	0x0218
(0155) 	 x++;
    0216 94C3      INC	R12
    0217 CFCF      RJMP	0x01E7
(0156) 	}
(0157) 	x--;
    0218 94CA      DEC	R12
    0219 9625      ADIW	R28,5
    021A 940E052F  CALL	pop_gset5
    021C 9508      RET
_Display_Picture:
  i                    --> R20
  x                    --> R22
  y                    --> R14
  j                    --> R10
  l                    --> Y+0
  k                    --> R12
  tab                  --> Y+12
    021D 931A      ST	R17,-Y
    021E 930A      ST	R16,-Y
    021F 940E0532  CALL	push_gset5
    0221 9722      SBIW	R28,2
(0158) }
(0159) //全屏显示图形子程序 128*64
(0160) void Display_Picture(const uchar *tab )
(0161) {
(0162)   unsigned  i,j,k,l=0,x=0x80,y;
    0222 2400      CLR	R0
    0223 2411      CLR	R1
    0224 8219      STD	Y+1,R1
    0225 8208      STD	Y+0,R0
    0226 E860      LDI	R22,0x80
    0227 E070      LDI	R23,0
(0163)   for(i=0;i<2;i++)    //x=0x80 为第一行
    0228 2744      CLR	R20
    0229 2755      CLR	R21
    022A C037      RJMP	0x0262
(0164)   {
(0165)    for(j=0,y=0x80; j<32;j++,y++)//y为水平方向以字节为单位
    022B 24AA      CLR	R10
    022C 24BB      CLR	R11
    022D E880      LDI	R24,0x80
    022E E090      LDI	R25,0
    022F 017C      MOVW	R14,R24
    0230 C027      RJMP	0x0258
(0166)    { 
(0167) 	WriteCommand(0x36);  //8位扩充指令集,允许绘图
    0231 E306      LDI	R16,0x36
    0232 DF06      RCALL	_WriteCommand
(0168) 	WriteCommand(y);//地址设置
    0233 2D0E      MOV	R16,R14
    0234 DF04      RCALL	_WriteCommand
(0169) 	WriteCommand(x);
    0235 2F06      MOV	R16,R22
    0236 DF02      RCALL	_WriteCommand
(0170)     WriteCommand(0x30);
    0237 E300      LDI	R16,0x30
    0238 DF00      RCALL	_WriteCommand
(0171) 	k=16;
    0239 E180      LDI	R24,0x10
    023A E090      LDI	R25,0
    023B 016C      MOVW	R12,R24
    023C C00D      RJMP	0x024A
(0172)     while(k--)
(0173) 	   WriteData(tab[l++]);		//时间复杂度(16*32)*2=32*32=32个H代码控制一个汉字,共有32个汉字,则是全屏
    023D 8028      LDD	R2,Y+0
    023E 8039      LDD	R3,Y+1
    023F 01C1      MOVW	R24,R2
    0240 9601      ADIW	R24,1
    0241 8399      STD	Y+1,R25
    0242 8388      STD	Y+0,R24
    0243 01F1      MOVW	R30,R2
    0244 840C      LDD	R0,Y+12
    0245 841D      LDD	R1,Y+13
    0246 0DE0      ADD	R30,R0
    0247 1DF1      ADC	R31,R1
    0248 9104      LPM	R16,0(Z)
    0249 DEDE      RCALL	_WriteData
    024A 0116      MOVW	R2,R12
    024B 01C1      MOVW	R24,R2
    024C 9701      SBIW	R24,1
    024D 016C      MOVW	R12,R24
    024E 2022      TST	R2
    024F F769      BNE	0x023D
    0250 2033      TST	R3
    0251 F759      BNE	0x023D
    0252 01C5      MOVW	R24,R10
    0253 9601      ADIW	R24,1
    0254 015C      MOVW	R10,R24
    0255 01C7      MOVW	R24,R14
    0256 9601      ADIW	R24,1
    0257 017C      MOVW	R14,R24
    0258 01C5      MOVW	R24,R10
    0259 3280      CPI	R24,0x20
    025A E0E0      LDI	R30,0
    025B 079E      CPC	R25,R30
    025C F408      BCC	0x025E
    025D CFD3      RJMP	0x0231
(0174)    }                            //按顺序读入:0->(32*32-1)
(0175)    x=0x88;//第三行
    025E E868      LDI	R22,0x88
    025F E070      LDI	R23,0
    0260 5F4F      SUBI	R20,0xFF
    0261 4F5F      SBCI	R21,0xFF
    0262 3042      CPI	R20,2
    0263 E0E0      LDI	R30,0
    0264 075E      CPC	R21,R30
    0265 F408      BCC	0x0267
    0266 CFC4      RJMP	0x022B
    0267 9622      ADIW	R28,2
    0268 940E052F  CALL	pop_gset5
    026A 9622      ADIW	R28,2
    026B 9508      RET
_Display_Picture32:
  i                    --> Y+1
  x                    --> R22
  y                    --> R10
  j                    --> R20
  l                    --> Y+0
  k                    --> R14
  tab                  --> R12
    026C 940E0532  CALL	push_gset5
    026E 0168      MOVW	R12,R16
    026F 9722      SBIW	R28,2
(0176)   }
(0177) }
(0178) //显示图形子程序 32*32
(0179) void Display_Picture32( unsigned char *tab )//
(0180) {
(0181)   unsigned  i,j,k,l=0,x=0x80,y;
    0270 2400      CLR	R0
    0271 2411      CLR	R1
    0272 8219      STD	Y+1,R1
    0273 8208      STD	Y+0,R0
    0274 E860      LDI	R22,0x80
    0275 E070      LDI	R23,0
(0182)  
(0183)    for(j=0,y=0x80; j<32;j++,y++)//水平扫描32行  第一个32行(汉字的两行)为一个连续地址

⌨️ 快捷键说明

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