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

📄 5110.lst

📁 5110综合演示 变成结构 流程 头文件
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0112)     while (*s)
(0113)       {
(0114) 	 LCD_write_char(*s);
    0354 01FA      MOVW	R30,R20
    0355 8100      LDD	R16,Z+0
    0356 DFD9      RCALL	_LCD_write_char
(0115) 	 s++;
    0357 5F4F      SUBI	R20,0xFF
    0358 4F5F      SBCI	R21,0xFF
    0359 01FA      MOVW	R30,R20
    035A 8020      LDD	R2,Z+0
    035B 2022      TST	R2
    035C F7B9      BNE	0x0354
    035D 940E0509  CALL	pop_gset3
    035F 9508      RET
_LCD_write_chinese_string:
  p                    --> R20
  i                    --> R22
  n                    --> R10
  s                    --> Y+22
  row                  --> R12
  line                 --> R14
  num                  --> Y+16
  ch_with              --> Y+14
  Y                    --> Y+12
  X                    --> Y+10
    0360 940E04D9  CALL	push_arg4
    0362 940E050F  CALL	push_gset5
    0364 88EA      LDD	R14,Y+18
    0365 88CC      LDD	R12,Y+20
(0116)       }
(0117)   }
(0118) /*************************************************************************
(0119) ** 函数名称: LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row,unsigned char (*s)[24])
(0120) ** 功能描述: 英文字符串显示函数
(0121) ** 输 入: X、Y    :显示汉字的起始X、Y坐标;
(0122)            ch_with :汉字点阵的宽度
(0123)            num     :显示汉字的个数;  
(0124)            line    :汉字点阵数组中的起始行数
(0125)            row     :汉字显示的行间距
(0126) 		   s       : 要显示的汉字
(0127) ** 输出	 : 
(0128) ** 全局变量: 无
(0129) ** 调用模块: 
(0130) ** 说明:LCD_write_chinese_string(0,0,12,7,0,0,write_chinese_string);
(0131) ** 注意:
(0132) **************************************************************************/                      
(0133) void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row,unsigned char (*s)[24])
(0134)   {
(0135)     unsigned char i,n,(*p)[24];
(0136)     p=s;
    0366 894E      LDD	R20,Y+22
    0367 895F      LDD	R21,Y+23
(0137)     LCD_set_XY(X,Y);                             //设置初始位置
    0368 852C      LDD	R18,Y+12
    0369 850A      LDD	R16,Y+10
    036A DFB6      RCALL	_LCD_set_XY
(0138)     
(0139)     for (i=0;i<num;)
    036B 2766      CLR	R22
    036C C030      RJMP	0x039D
(0140)       {
(0141)       	for (n=0; n<ch_with*2; n++)              //写一个汉字
    036D 24AA      CLR	R10
    036E C021      RJMP	0x0390
(0142)       	  { 
(0143)       	    if (n==ch_with)                      //写汉字的下半部分
    036F 840E      LDD	R0,Y+14
    0370 14A0      CP	R10,R0
    0371 F479      BNE	0x0381
(0144)       	      {
(0145)       	        if (i==0) LCD_set_XY(X,Y+1);
    0372 2366      TST	R22
    0373 F429      BNE	0x0379
    0374 852C      LDD	R18,Y+12
    0375 5F2F      SUBI	R18,0xFF
    0376 850A      LDD	R16,Y+10
    0377 DFA9      RCALL	_LCD_set_XY
    0378 C008      RJMP	0x0381
(0146)       	        else
(0147)       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
    0379 852C      LDD	R18,Y+12
    037A 5F2F      SUBI	R18,0xFF
    037B 842E      LDD	R2,Y+14
    037C 0C2C      ADD	R2,R12
    037D 9E26      MUL	R2,R22
    037E 850A      LDD	R16,Y+10
    037F 0D00      ADD	R16,R0
    0380 DFA0      RCALL	_LCD_set_XY
(0148)               }
(0149)       	    LCD_write_byte(*(*(p+(line+i))+n),1);
    0381 E021      LDI	R18,1
    0382 2C2E      MOV	R2,R14
    0383 0E26      ADD	R2,R22
    0384 E188      LDI	R24,0x18
    0385 9D82      MUL	R24,R2
    0386 0110      MOVW	R2,R0
    0387 0E24      ADD	R2,R20
    0388 1E35      ADC	R3,R21
    0389 2DEA      MOV	R30,R10
    038A 27FF      CLR	R31
    038B 0DE2      ADD	R30,R2
    038C 1DF3      ADC	R31,R3
    038D 8100      LDD	R16,Z+0
    038E D115      RCALL	_LCD_write_byte
    038F 94A3      INC	R10
    0390 E082      LDI	R24,2
    0391 840E      LDD	R0,Y+14
    0392 9D80      MUL	R24,R0
    0393 14A0      CP	R10,R0
    0394 F2D0      BCS	0x036F
(0150)       	  }
(0151)       	i++;
    0395 9563      INC	R22
(0152)       	LCD_set_XY((X+(ch_with+row)*i),Y);
    0396 852C      LDD	R18,Y+12
    0397 842E      LDD	R2,Y+14
    0398 0C2C      ADD	R2,R12
    0399 9E26      MUL	R2,R22
    039A 850A      LDD	R16,Y+10
    039B 0D00      ADD	R16,R0
    039C DF84      RCALL	_LCD_set_XY
    039D 8808      LDD	R0,Y+16
    039E 1560      CP	R22,R0
    039F F268      BCS	0x036D
    03A0 940E050C  CALL	pop_gset5
    03A2 9624      ADIW	R28,4
    03A3 9508      RET
_LCD_move_chinese_string:
  p                    --> R20
  i                    --> R22
  j                    --> R10
  buffer_l             --> Y+84
  buffer_h             --> Y+0
  n                    --> R12
  s                    --> Y+184
  T                    --> R14
  Y                    --> Y+180
  X                    --> Y+178
    03A4 940E04D9  CALL	push_arg4
    03A6 940E050F  CALL	push_gset5
    03A8 97EF      SBIW	R28,0x3F
    03A9 97EF      SBIW	R28,0x3F
    03AA 97AA      SBIW	R28,0x2A
    03AB 01FE      MOVW	R30,R28
    03AC 54EA      SUBI	R30,0x4A
    03AD 4FFF      SBCI	R31,0xFF
    03AE 80E0      LDD	R14,Z+0
(0153)       }
(0154)   }
(0155) /*************************************************************************
(0156) ** 函数名称: LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T,unsigned char (*s)[24])
(0157) ** 功能描述: 汉字移动
(0158) ** 输 入: X、Y  :显示汉字的起始X、Y坐标;
(0159)            T     :移动速度;
(0160) ** 输出	 : 
(0161) ** 全局变量: 无
(0162) ** 调用模块: 
(0163) ** 说明:
(0164) ** 注意:
(0165) **************************************************************************/
(0166) void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T,unsigned char (*s)[24])
(0167)   {
(0168)     unsigned char i,n,j=0,(*p)[24];
    03AF 24AA      CLR	R10
(0169)     unsigned char buffer_h[84]={0};
    03B0 E78C      LDI	R24,0x7C
    03B1 E092      LDI	R25,2
    03B2 01FE      MOVW	R30,R28
    03B3 E504      LDI	R16,0x54
    03B4 E010      LDI	R17,0
    03B5 93FA      ST	R31,-Y
    03B6 93EA      ST	R30,-Y
    03B7 939A      ST	R25,-Y
    03B8 938A      ST	R24,-Y
    03B9 940E052E  CALL	asgncblk
(0170)     unsigned char buffer_l[84]={0};
    03BB ED80      LDI	R24,0xD0
    03BC E092      LDI	R25,2
    03BD 01FE      MOVW	R30,R28
    03BE 5AEC      SUBI	R30,0xAC
    03BF 4FFF      SBCI	R31,0xFF
    03C0 E504      LDI	R16,0x54
    03C1 E010      LDI	R17,0
    03C2 93FA      ST	R31,-Y
    03C3 93EA      ST	R30,-Y
    03C4 939A      ST	R25,-Y
    03C5 938A      ST	R24,-Y
    03C6 940E052E  CALL	asgncblk
(0171)     p=s;
    03C8 01FE      MOVW	R30,R28
    03C9 54E8      SUBI	R30,0x48
    03CA 4FFF      SBCI	R31,0xFF
    03CB 8140      LDD	R20,Z+0
    03CC 8151      LDD	R21,Z+1
(0172)     for (i=0; i<156; i++)
    03CD 2766      CLR	R22
    03CE C083      RJMP	0x0452
(0173)       {
(0174)         buffer_h[83] = *(*(p+(i/12))+j);
    03CF E01C      LDI	R17,0xC
    03D0 2F06      MOV	R16,R22
    03D1 940E04E0  CALL	div8u
    03D3 E188      LDI	R24,0x18
    03D4 9F80      MUL	R24,R16
    03D5 0110      MOVW	R2,R0
    03D6 0E24      ADD	R2,R20
    03D7 1E35      ADC	R3,R21
    03D8 2DEA      MOV	R30,R10
    03D9 27FF      CLR	R31
    03DA 0DE2      ADD	R30,R2
    03DB 1DF3      ADC	R31,R3
    03DC 8020      LDD	R2,Z+0
    03DD 01FE      MOVW	R30,R28
    03DE 5AED      SUBI	R30,0xAD
    03DF 4FFF      SBCI	R31,0xFF
    03E0 8220      STD	Z+0,R2
(0175)         buffer_l[83] = *(*(p+(i/12))+(j+12));
    03E1 E01C      LDI	R17,0xC
    03E2 2F06      MOV	R16,R22
    03E3 940E04E0  CALL	div8u
    03E5 E188      LDI	R24,0x18
    03E6 9F80      MUL	R24,R16
    03E7 0110      MOVW	R2,R0
    03E8 0E24      ADD	R2,R20
    03E9 1E35      ADC	R3,R21
    03EA 2DEA      MOV	R30,R10
    03EB 27FF      CLR	R31
    03EC 963C      ADIW	R30,0xC
    03ED 0DE2      ADD	R30,R2
    03EE 1DF3      ADC	R31,R3
    03EF 8020      LDD	R2,Z+0
    03F0 01FE      MOVW	R30,R28
    03F1 55E9      SUBI	R30,0x59
    03F2 4FFF      SBCI	R31,0xFF
    03F3 8220      STD	Z+0,R2
(0176) 		j++;
    03F4 94A3      INC	R10
(0177)         if (j==12) j=0;
    03F5 2D8A      MOV	R24,R10
    03F6 308C      CPI	R24,0xC
    03F7 F409      BNE	0x03F9
    03F8 24AA      CLR	R10
(0178)         
(0179)         for (n=0; n<83; n++)
    03F9 24CC      CLR	R12
    03FA C01E      RJMP	0x0419
(0180)           { 
(0181)             buffer_h[n]=buffer_h[n+1];
    03FB 01CE      MOVW	R24,R28
    03FC 9601      ADIW	R24,1
    03FD 2DEC      MOV	R30,R12
    03FE 27FF      CLR	R31
    03FF 0FE8      ADD	R30,R24
    0400 1FF9      ADC	R31,R25
    0401 8020      LDD	R2,Z+0
    0402 01CE      MOVW	R24,R28
    0403 2DEC      MOV	R30,R12
    0404 27FF      CLR	R31
    0405 0FE8      ADD	R30,R24
    0406 1FF9      ADC	R31,R25
    0407 8220      STD	Z+0,R2
(0182)             buffer_l[n]=buffer_l[n+1];
    0408 01CE      MOVW	R24,R28
    0409 5A8B      SUBI	R24,0xAB
    040A 4F9F      SBCI	R25,0xFF
    040B 2DEC      MOV	R30,R12
    040C 27FF      CLR	R31
    040D 0FE8      ADD	R30,R24
    040E 1FF9      ADC	R31,R25
    040F 8020      LDD	R2,Z+0
    0410 01CE      MOVW	R24,R28
    0411 5A8C      SUBI	R24,0xAC
    0412 4F9F      SBCI	R25,0xFF
    0413 2DEC      MOV	R30,R12
    0414 27FF      CLR	R31
    0415 0FE8      ADD	R30,R24
    0416 1FF9      ADC	R31,R25
    0417 8220      STD	Z+0,R2
    0418 94C3      INC	R12
    0419 2D8C      MOV	R24,R12
    041A 3583      CPI	R24,0x53
    041B F2F8      BCS	0x03FB
(0183)           } 
(0184)         
(0185)         LCD_set_XY(X,Y);
    041C 01FE      MOVW	R30,R28
    041D 54EC      SUBI	R30,0x4C
    041E 4FFF      SBCI	R31,0xFF
    041F 8120      LDD	R18,Z+0
    0420 01FE      MOVW	R30,R28
    0421 54EE      SUBI	R30,0x4E
    0422 4FFF      SBCI	R31,0xFF
    0423 8100      LDD	R16,Z+0
    0424 DEFC      RCALL	_LCD_set_XY
(0186)         for (n=0; n<83; n++)
    0425 24CC      CLR	R12
    0426 C009      RJMP	0x0430
(0187)           { 
(0188)             LCD_write_byte(buffer_h[n],1);
    0427 E021      LDI	R18,1
    0428 01CE      MOVW	R24,R28
    0429 2DEC      MOV	R30,R12
    042A 27FF      CLR	R31
    042B 0FE8      ADD	R30,R24
    042C 1FF9      ADC	R31,R25
    042D 8100      LDD	R16,Z+0
    042E D075      RCALL	_LCD_write_byte
    042F 94C3      INC	R12
    0430 2D8C      MOV	R24,R12
    0431 3583      CPI	R24,0x53
    0432 F3A0      BCS	0x0427
(0189)           } 
(0190)         
(0191)         LCD_set_XY(X,Y+1); 
    0433 01FE      MOVW	R30,R28
    0434 54EC      SUBI	R30,0x4C
    0435 4FFF      SBCI	R31,0xFF
    0436 8120      LDD	R18,Z+0
    0437 5F2F      SUBI	R18,0xFF
    0438 01FE      MOVW	R30,R28
    0439 54EE      SUBI	R30,0x4E
    043A 4FFF      SBCI	R31,0xFF
    043B 8100      LDD	R16,Z+0
    043C DEE4      RCALL	_LCD_set_XY
(0192)         for (n=0; n<83; n++)
    043D 24CC      CLR	R12
    043E C00B      RJMP	0x044A
(0193)           { 
(0194)             LCD_write_byte(buffer_l[n],1);
    043F E021      LDI	R18,1
    0440 01CE      MOVW	R24,R28
    0441 5A8C      SUBI	R24,0xAC
    0442 4F9F      SBCI	R25,0xFF
    0443 2DEC      MOV	R30,R12
    0444 27FF      CLR	R31
    0445 0FE8      ADD	R30,R24
    0446 1FF9      ADC	R31,R25
    0447 8100      LDD	R16,Z+0
    0448 D05B      RCALL	_LCD_write_byte
    0449 94C3      INC	R12
    044A 2D8C      MOV	R24,R12
    044B 3583      CPI	R24,0x53
    044C F390      BCS	0x043F
(0195)           }
(0196)           
(0197)        delay_nms(T);
    044D 2D0E      MOV	R16,R14
    044E 2711      CLR	R17
    044F 940E04CA  CALL	_delay_nms
    0451 9563      INC	R22
    0452 396C      CPI	R22,0x9C
    0453 F408      BCC	0x0455
    0454 CF7A      RJMP	0x03CF
    0455 96EF      ADIW	R28,0x3F
    0456 96EF      ADIW	R28,0x3F
    0457 96AA      ADIW	R28,0x2A

⌨️ 快捷键说明

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