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

📄 3310lcd_prj.lst

📁 /*********************************************** **** 本原代码转自:www.527dz.com (作者527dz) *** **** 由arm
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0078)     unsigned char line;
(0079) 
(0080)     c -= 32;
    032E 5260      SUBI	R22,0x20
(0081) 
(0082)     for (line=0; line<6; line++)
    032F 2744      CLR	R20
    0330 C00F      RJMP	0x0340
(0083)       LCD_write_byte(font6x8[c][line], 1);
    0331 E021      LDI	R18,1
    0332 E086      LDI	R24,6
    0333 9F86      MUL	R24,R22
    0334 0110      MOVW	R2,R0
    0335 E584      LDI	R24,0x54
    0336 E090      LDI	R25,0
    0337 0E28      ADD	R2,R24
    0338 1E39      ADC	R3,R25
    0339 2FE4      MOV	R30,R20
    033A 27FF      CLR	R31
    033B 0DE2      ADD	R30,R2
    033C 1DF3      ADC	R31,R3
    033D 9104      LPM	R16,0(Z)
    033E D15A      RCALL	_LCD_write_byte
    033F 9543      INC	R20
    0340 3046      CPI	R20,6
    0341 F378      BCS	0x0331
    0342 940E04D1  CALL	pop_gset2
    0344 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    0345 940E04DE  CALL	push_gset3
    0347 2EA2      MOV	R10,R18
    0348 2F60      MOV	R22,R16
    0349 814E      LDD	R20,Y+6
    034A 815F      LDD	R21,Y+7
(0084)   }
(0085) 
(0086) /*-----------------------------------------------------------------------
(0087) LCD_write_english_String  : 英文字符串显示函数
(0088) 
(0089) 输入参数:*s      :英文字符串指针;
(0090)           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
(0091) 
(0092) 编写日期          :2004-8-10 
(0093) 最后修改日期      :2004-8-10 		
(0094) -----------------------------------------------------------------------*/
(0095) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0096)   {
(0097)     LCD_set_XY(X,Y);
    034B 2D2A      MOV	R18,R10
    034C 2F06      MOV	R16,R22
    034D DFCE      RCALL	_LCD_set_XY
    034E C005      RJMP	0x0354
(0098)     while (*s) 
(0099)       {
(0100) 	 LCD_write_char(*s);
    034F 01FA      MOVW	R30,R20
    0350 8100      LDD	R16,Z+0
    0351 DFD9      RCALL	_LCD_write_char
(0101) 	 s++;
    0352 5F4F      SUBI	R20,0xFF
    0353 4F5F      SBCI	R21,0xFF
    0354 01FA      MOVW	R30,R20
    0355 8020      LDD	R2,Z+0
    0356 2022      TST	R2
    0357 F7B9      BNE	0x034F
    0358 940E04D4  CALL	pop_gset3
    035A 9508      RET
_LCD_write_chinese_string:
  i                    --> R20
  n                    --> R14
  row                  --> R10
  line                 --> R12
  num                  --> R22
  ch_with              --> Y+14
  Y                    --> Y+12
  X                    --> Y+10
    035B 940E04A4  CALL	push_arg4
    035D 940E04DA  CALL	push_gset5
    035F 8968      LDD	R22,Y+16
    0360 88CA      LDD	R12,Y+18
    0361 88AC      LDD	R10,Y+20
(0102)       }
(0103)   }
(0104) /*-----------------------------------------------------------------------
(0105) LCD_write_chinese_string: 在LCD上显示汉字
(0106) 
(0107) 输入参数:X、Y    :显示汉字的起始X、Y坐标;
(0108)           ch_with :汉字点阵的宽度
(0109)           num     :显示汉字的个数;  
(0110)           line    :汉字点阵数组中的起始行数
(0111)           row     :汉字显示的行间距
(0112) 编写日期          :2004-8-11 
(0113) 最后修改日期      :2004-8-12 
(0114) 测试:
(0115) 	LCD_write_chi(0,0,12,7,0,0);
(0116) 	LCD_write_chi(0,2,12,7,0,0);
(0117) 	LCD_write_chi(0,4,12,7,0,0);	
(0118) -----------------------------------------------------------------------*/                        
(0119) void LCD_write_chinese_string(unsigned char X, unsigned char Y, 
(0120)                    unsigned char ch_with,unsigned char num,
(0121)                    unsigned char line,unsigned char row)
(0122)   {
(0123)     unsigned char i,n;
(0124)     
(0125)     LCD_set_XY(X,Y);                             //设置初始位置
    0362 852C      LDD	R18,Y+12
    0363 850A      LDD	R16,Y+10
    0364 DFB7      RCALL	_LCD_set_XY
(0126)     
(0127)     for (i=0;i<num;)
    0365 2744      CLR	R20
    0366 C032      RJMP	0x0399
(0128)       {
(0129)       	for (n=0; n<ch_with*2; n++)              //写一个汉字
    0367 24EE      CLR	R14
    0368 C023      RJMP	0x038C
(0130)       	  { 
(0131)       	    if (n==ch_with)                      //写汉字的下半部分
    0369 840E      LDD	R0,Y+14
    036A 14E0      CP	R14,R0
    036B F479      BNE	0x037B
(0132)       	      {
(0133)       	        if (i==0) LCD_set_XY(X,Y+1);
    036C 2344      TST	R20
    036D F429      BNE	0x0373
    036E 852C      LDD	R18,Y+12
    036F 5F2F      SUBI	R18,0xFF
    0370 850A      LDD	R16,Y+10
    0371 DFAA      RCALL	_LCD_set_XY
    0372 C008      RJMP	0x037B
(0134)       	        else
(0135)       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
    0373 852C      LDD	R18,Y+12
    0374 5F2F      SUBI	R18,0xFF
    0375 842E      LDD	R2,Y+14
    0376 0C2A      ADD	R2,R10
    0377 9E24      MUL	R2,R20
    0378 850A      LDD	R16,Y+10
    0379 0D00      ADD	R16,R0
    037A DFA1      RCALL	_LCD_set_XY
(0136)               }
(0137)       	    LCD_write_byte(write_chinese_string[line+i][n],1);
    037B E021      LDI	R18,1
    037C 2C2C      MOV	R2,R12
    037D 0E24      ADD	R2,R20
    037E E188      LDI	R24,0x18
    037F 9D82      MUL	R24,R2
    0380 0110      MOVW	R2,R0
    0381 E78C      LDI	R24,0x7C
    0382 E092      LDI	R25,2
    0383 0E28      ADD	R2,R24
    0384 1E39      ADC	R3,R25
    0385 2DEE      MOV	R30,R14
    0386 27FF      CLR	R31
    0387 0DE2      ADD	R30,R2
    0388 1DF3      ADC	R31,R3
    0389 9104      LPM	R16,0(Z)
    038A D10E      RCALL	_LCD_write_byte
    038B 94E3      INC	R14
    038C E082      LDI	R24,2
    038D 840E      LDD	R0,Y+14
    038E 9D80      MUL	R24,R0
    038F 14E0      CP	R14,R0
    0390 F2C0      BCS	0x0369
(0138)       	  }
(0139)       	i++;
    0391 9543      INC	R20
(0140)       	LCD_set_XY((X+(ch_with+row)*i),Y);
    0392 852C      LDD	R18,Y+12
    0393 842E      LDD	R2,Y+14
    0394 0C2A      ADD	R2,R10
    0395 9E24      MUL	R2,R20
    0396 850A      LDD	R16,Y+10
    0397 0D00      ADD	R16,R0
    0398 DF83      RCALL	_LCD_set_XY
    0399 1746      CP	R20,R22
    039A F408      BCC	0x039C
    039B CFCB      RJMP	0x0367
    039C 940E04D7  CALL	pop_gset5
    039E 9624      ADIW	R28,4
    039F 9508      RET
_LCD_move_chinese_string:
  i                    --> R20
  j                    --> R22
  buffer_l             --> Y+84
  buffer_h             --> Y+0
  n                    --> R10
  T                    --> R12
  Y                    --> R14
  X                    --> Y+178
    03A0 940E04A4  CALL	push_arg4
    03A2 940E04DA  CALL	push_gset5
    03A4 2EE2      MOV	R14,R18
    03A5 97EF      SBIW	R28,0x3F
    03A6 97EF      SBIW	R28,0x3F
    03A7 97AA      SBIW	R28,0x2A
    03A8 01FE      MOVW	R30,R28
    03A9 54EA      SUBI	R30,0x4A
    03AA 4FFF      SBCI	R31,0xFF
    03AB 80C0      LDD	R12,Z+0
(0141)       }
(0142)   }
(0143)   
(0144) /*-----------------------------------------------------------------------
(0145) LCD_move_chinese_string: 汉字移动
(0146) 
(0147) 输入参数:X、Y    :显示汉字的起始X、Y坐标;
(0148)           T       :移动速度;
(0149) 
(0150) 编写日期          :2004-8-13 
(0151) 最后修改日期      :2004-8-13 
(0152) -----------------------------------------------------------------------*/                        
(0153) void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T)
(0154)   {
(0155)     unsigned char i,n,j=0;
    03AC 2766      CLR	R22
(0156)     unsigned char buffer_h[84]={0};
    03AD E884      LDI	R24,0x84
    03AE E093      LDI	R25,3
    03AF 01FE      MOVW	R30,R28
    03B0 E504      LDI	R16,0x54
    03B1 E010      LDI	R17,0
    03B2 93FA      ST	R31,-Y
    03B3 93EA      ST	R30,-Y
    03B4 939A      ST	R25,-Y
    03B5 938A      ST	R24,-Y
    03B6 940E04F9  CALL	asgncblk
(0157)     unsigned char buffer_l[84]={0};
    03B8 ED88      LDI	R24,0xD8
    03B9 E093      LDI	R25,3
    03BA 01FE      MOVW	R30,R28
    03BB 5AEC      SUBI	R30,0xAC
    03BC 4FFF      SBCI	R31,0xFF
    03BD E504      LDI	R16,0x54
    03BE E010      LDI	R17,0
    03BF 93FA      ST	R31,-Y
    03C0 93EA      ST	R30,-Y
    03C1 939A      ST	R25,-Y
    03C2 938A      ST	R24,-Y
    03C3 940E04F9  CALL	asgncblk
(0158)       
(0159)     for (i=0; i<156; i++)
    03C5 2744      CLR	R20
    03C6 C080      RJMP	0x0447
(0160)       {
(0161)         buffer_h[83] = move_chinese_string[i/12][j];
    03C7 E01C      LDI	R17,0xC
    03C8 2F04      MOV	R16,R20
    03C9 940E04AB  CALL	div8u
    03CB E188      LDI	R24,0x18
    03CC 9F80      MUL	R24,R16
    03CD 0110      MOVW	R2,R0
    03CE EC84      LDI	R24,0xC4
    03CF E092      LDI	R25,2
    03D0 0E28      ADD	R2,R24
    03D1 1E39      ADC	R3,R25
    03D2 2FE6      MOV	R30,R22
    03D3 27FF      CLR	R31
    03D4 0DE2      ADD	R30,R2
    03D5 1DF3      ADC	R31,R3
    03D6 91E4      LPM	R30,0(Z)
    03D7 01DE      MOVW	R26,R28
    03D8 5AAD      SUBI	R26,0xAD
    03D9 4FBF      SBCI	R27,0xFF
    03DA 93EC      ST	R30,0(X)
(0162)         buffer_l[83] = move_chinese_string[i/12][j+12];
    03DB E01C      LDI	R17,0xC
    03DC 2F04      MOV	R16,R20
    03DD 940E04AB  CALL	div8u
    03DF E188      LDI	R24,0x18
    03E0 9F80      MUL	R24,R16
    03E1 0110      MOVW	R2,R0
    03E2 EC84      LDI	R24,0xC4
    03E3 E092      LDI	R25,2
    03E4 0E28      ADD	R2,R24
    03E5 1E39      ADC	R3,R25
    03E6 2FE6      MOV	R30,R22
    03E7 27FF      CLR	R31
    03E8 963C      ADIW	R30,0xC
    03E9 0DE2      ADD	R30,R2
    03EA 1DF3      ADC	R31,R3
    03EB 91E4      LPM	R30,0(Z)
    03EC 01DE      MOVW	R26,R28
    03ED 55A9      SUBI	R26,0x59
    03EE 4FBF      SBCI	R27,0xFF
    03EF 93EC      ST	R30,0(X)
(0163)         j++;
    03F0 9563      INC	R22
(0164)         if (j==12) j=0;
    03F1 306C      CPI	R22,0xC
    03F2 F409      BNE	0x03F4
    03F3 2766      CLR	R22
(0165)         
(0166)         for (n=0; n<83; n++)
    03F4 24AA      CLR	R10
    03F5 C01E      RJMP	0x0414
(0167)           { 
(0168)             buffer_h[n]=buffer_h[n+1];
    03F6 01CE      MOVW	R24,R28
    03F7 9601      ADIW	R24,1
    03F8 2DEA      MOV	R30,R10
    03F9 27FF      CLR	R31
    03FA 0FE8      ADD	R30,R24
    03FB 1FF9      ADC	R31,R25
    03FC 8020      LDD	R2,Z+0
    03FD 01CE      MOVW	R24,R28
    03FE 2DEA      MOV	R30,R10
    03FF 27FF      CLR	R31
    0400 0FE8      ADD	R30,R24
    0401 1FF9      ADC	R31,R25
    0402 8220      STD	Z+0,R2
(0169)             buffer_l[n]=buffer_l[n+1];
    0403 01CE      MOVW	R24,R28
    0404 5A8B      SUBI	R24,0xAB
    0405 4F9F      SBCI	R25,0xFF
    0406 2DEA      MOV	R30,R10
    0407 27FF      CLR	R31
    0408 0FE8      ADD	R30,R24
    0409 1FF9      ADC	R31,R25
    040A 8020      LDD	R2,Z+0
    040B 01CE      MOVW	R24,R28
    040C 5A8C      SUBI	R24,0xAC
    040D 4F9F      SBCI	R25,0xFF
    040E 2DEA      MOV	R30,R10
    040F 27FF      CLR	R31
    0410 0FE8      ADD	R30,R24
    0411 1FF9      ADC	R31,R25
    0412 8220      STD	Z+0,R2
    0413 94A3      INC	R10
    0414 2D8A      MOV	R24,R10
    0415 3583      CPI	R24,0x53
    0416 F2F8      BCS	0x03F6
(0170)           } 
(0171)         
(0172)         LCD_set_XY(X,Y);
    0417 2D2E      MOV	R18,R14
    0418 01FE      MOVW	R30,R28

⌨️ 快捷键说明

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