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

📄 3310lcd_prj.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0080)     c -= 32;
    0343 5260      SUBI	R22,0x20
(0081) 
(0082)     for (line=0; line<6; line++)
    0344 2744      CLR	R20
    0345 C00F      RJMP	0x0355
(0083)       LCD_write_byte(font6x8[c][line], 1);
    0346 E021      LDI	R18,1
    0347 E086      LDI	R24,6
    0348 9F86      MUL	R24,R22
    0349 0110      MOVW	R2,R0
    034A E584      LDI	R24,0x54
    034B E090      LDI	R25,0
    034C 0E28      ADD	R2,R24
    034D 1E39      ADC	R3,R25
    034E 2FE4      MOV	R30,R20
    034F 27FF      CLR	R31
    0350 0DE2      ADD	R30,R2
    0351 1DF3      ADC	R31,R3
    0352 9104      LPM	R16,0(Z)
    0353 D15A      RCALL	_LCD_write_byte
    0354 9543      INC	R20
    0355 3046      CPI	R20,6
    0356 F378      BCS	0x0346
    0357 940E04E6  CALL	pop_gset2
    0359 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    035A 940E04F3  CALL	push_gset3
    035C 2EA2      MOV	R10,R18
    035D 2F60      MOV	R22,R16
    035E 814E      LDD	R20,Y+6
    035F 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);
    0360 2D2A      MOV	R18,R10
    0361 2F06      MOV	R16,R22
    0362 DFCE      RCALL	_LCD_set_XY
    0363 C005      RJMP	0x0369
(0098)     while (*s) 
(0099)       {
(0100) 	 LCD_write_char(*s);
    0364 01FA      MOVW	R30,R20
    0365 8100      LDD	R16,Z+0
    0366 DFD9      RCALL	_LCD_write_char
(0101) 	 s++;
    0367 5F4F      SUBI	R20,0xFF
    0368 4F5F      SBCI	R21,0xFF
    0369 01FA      MOVW	R30,R20
    036A 8020      LDD	R2,Z+0
    036B 2022      TST	R2
    036C F7B9      BNE	0x0364
    036D 940E04E9  CALL	pop_gset3
    036F 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
    0370 940E04B9  CALL	push_arg4
    0372 940E04EF  CALL	push_gset5
    0374 8968      LDD	R22,Y+16
    0375 88CA      LDD	R12,Y+18
    0376 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);                             //设置初始位置
    0377 852C      LDD	R18,Y+12
    0378 850A      LDD	R16,Y+10
    0379 DFB7      RCALL	_LCD_set_XY
(0126)     
(0127)     for (i=0;i<num;)
    037A 2744      CLR	R20
    037B C032      RJMP	0x03AE
(0128)       {
(0129)       	for (n=0; n<ch_with*2; n++)              //写一个汉字
    037C 24EE      CLR	R14
    037D C023      RJMP	0x03A1
(0130)       	  { 
(0131)       	    if (n==ch_with)                      //写汉字的下半部分
    037E 840E      LDD	R0,Y+14
    037F 14E0      CP	R14,R0
    0380 F479      BNE	0x0390
(0132)       	      {
(0133)       	        if (i==0) LCD_set_XY(X,Y+1);
    0381 2344      TST	R20
    0382 F429      BNE	0x0388
    0383 852C      LDD	R18,Y+12
    0384 5F2F      SUBI	R18,0xFF
    0385 850A      LDD	R16,Y+10
    0386 DFAA      RCALL	_LCD_set_XY
    0387 C008      RJMP	0x0390
(0134)       	        else
(0135)       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
    0388 852C      LDD	R18,Y+12
    0389 5F2F      SUBI	R18,0xFF
    038A 842E      LDD	R2,Y+14
    038B 0C2A      ADD	R2,R10
    038C 9E24      MUL	R2,R20
    038D 850A      LDD	R16,Y+10
    038E 0D00      ADD	R16,R0
    038F DFA1      RCALL	_LCD_set_XY
(0136)               }
(0137)       	    LCD_write_byte(write_chinese_string[line+i][n],1);
    0390 E021      LDI	R18,1
    0391 2C2C      MOV	R2,R12
    0392 0E24      ADD	R2,R20
    0393 E188      LDI	R24,0x18
    0394 9D82      MUL	R24,R2
    0395 0110      MOVW	R2,R0
    0396 E78C      LDI	R24,0x7C
    0397 E092      LDI	R25,2
    0398 0E28      ADD	R2,R24
    0399 1E39      ADC	R3,R25
    039A 2DEE      MOV	R30,R14
    039B 27FF      CLR	R31
    039C 0DE2      ADD	R30,R2
    039D 1DF3      ADC	R31,R3
    039E 9104      LPM	R16,0(Z)
    039F D10E      RCALL	_LCD_write_byte
    03A0 94E3      INC	R14
    03A1 E082      LDI	R24,2
    03A2 840E      LDD	R0,Y+14
    03A3 9D80      MUL	R24,R0
    03A4 14E0      CP	R14,R0
    03A5 F2C0      BCS	0x037E
(0138)       	  }
(0139)       	i++;
    03A6 9543      INC	R20
(0140)       	LCD_set_XY((X+(ch_with+row)*i),Y);
    03A7 852C      LDD	R18,Y+12
    03A8 842E      LDD	R2,Y+14
    03A9 0C2A      ADD	R2,R10
    03AA 9E24      MUL	R2,R20
    03AB 850A      LDD	R16,Y+10
    03AC 0D00      ADD	R16,R0
    03AD DF83      RCALL	_LCD_set_XY
    03AE 1746      CP	R20,R22
    03AF F408      BCC	0x03B1
    03B0 CFCB      RJMP	0x037C
    03B1 940E04EC  CALL	pop_gset5
    03B3 9624      ADIW	R28,4
    03B4 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
    03B5 940E04B9  CALL	push_arg4
    03B7 940E04EF  CALL	push_gset5
    03B9 2EE2      MOV	R14,R18
    03BA 97EF      SBIW	R28,0x3F
    03BB 97EF      SBIW	R28,0x3F
    03BC 97AA      SBIW	R28,0x2A
    03BD 01FE      MOVW	R30,R28
    03BE 54EA      SUBI	R30,0x4A
    03BF 4FFF      SBCI	R31,0xFF
    03C0 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;
    03C1 2766      CLR	R22
(0156)     unsigned char buffer_h[84]={0};
    03C2 EB84      LDI	R24,0xB4
    03C3 E093      LDI	R25,3
    03C4 01FE      MOVW	R30,R28
    03C5 E504      LDI	R16,0x54
    03C6 E010      LDI	R17,0
    03C7 93FA      ST	R31,-Y
    03C8 93EA      ST	R30,-Y
    03C9 939A      ST	R25,-Y
    03CA 938A      ST	R24,-Y
    03CB 940E050E  CALL	asgncblk
(0157)     unsigned char buffer_l[84]={0};
    03CD E088      LDI	R24,0x8
    03CE E094      LDI	R25,4
    03CF 01FE      MOVW	R30,R28
    03D0 5AEC      SUBI	R30,0xAC
    03D1 4FFF      SBCI	R31,0xFF
    03D2 E504      LDI	R16,0x54
    03D3 E010      LDI	R17,0
    03D4 93FA      ST	R31,-Y
    03D5 93EA      ST	R30,-Y
    03D6 939A      ST	R25,-Y
    03D7 938A      ST	R24,-Y
    03D8 940E050E  CALL	asgncblk
(0158)       
(0159)     for (i=0; i<156; i++)
    03DA 2744      CLR	R20
    03DB C080      RJMP	0x045C
(0160)       {
(0161)         buffer_h[83] = move_chinese_string[i/12][j];
    03DC E01C      LDI	R17,0xC
    03DD 2F04      MOV	R16,R20
    03DE 940E04C0  CALL	div8u
    03E0 E188      LDI	R24,0x18
    03E1 9F80      MUL	R24,R16
    03E2 0110      MOVW	R2,R0
    03E3 EF84      LDI	R24,0xF4
    03E4 E092      LDI	R25,2
    03E5 0E28      ADD	R2,R24
    03E6 1E39      ADC	R3,R25
    03E7 2FE6      MOV	R30,R22
    03E8 27FF      CLR	R31
    03E9 0DE2      ADD	R30,R2
    03EA 1DF3      ADC	R31,R3
    03EB 91E4      LPM	R30,0(Z)
    03EC 01DE      MOVW	R26,R28
    03ED 5AAD      SUBI	R26,0xAD
    03EE 4FBF      SBCI	R27,0xFF
    03EF 93EC      ST	R30,0(X)
(0162)         buffer_l[83] = move_chinese_string[i/12][j+12];
    03F0 E01C      LDI	R17,0xC
    03F1 2F04      MOV	R16,R20
    03F2 940E04C0  CALL	div8u
    03F4 E188      LDI	R24,0x18
    03F5 9F80      MUL	R24,R16
    03F6 0110      MOVW	R2,R0
    03F7 EF84      LDI	R24,0xF4
    03F8 E092      LDI	R25,2
    03F9 0E28      ADD	R2,R24
    03FA 1E39      ADC	R3,R25
    03FB 2FE6      MOV	R30,R22
    03FC 27FF      CLR	R31
    03FD 963C      ADIW	R30,0xC
    03FE 0DE2      ADD	R30,R2
    03FF 1DF3      ADC	R31,R3
    0400 91E4      LPM	R30,0(Z)
    0401 01DE      MOVW	R26,R28
    0402 55A9      SUBI	R26,0x59
    0403 4FBF      SBCI	R27,0xFF
    0404 93EC      ST	R30,0(X)
(0163)         j++;
    0405 9563      INC	R22
(0164)         if (j==12) j=0;
    0406 306C      CPI	R22,0xC
    0407 F409      BNE	0x0409
    0408 2766      CLR	R22
(0165)         
(0166)         for (n=0; n<83; n++)
    0409 24AA      CLR	R10
    040A C01E      RJMP	0x0429
(0167)           { 
(0168)             buffer_h[n]=buffer_h[n+1];
    040B 01CE      MOVW	R24,R28
    040C 9601      ADIW	R24,1
    040D 2DEA      MOV	R30,R10
    040E 27FF      CLR	R31
    040F 0FE8      ADD	R30,R24
    0410 1FF9      ADC	R31,R25
    0411 8020      LDD	R2,Z+0
    0412 01CE      MOVW	R24,R28
    0413 2DEA      MOV	R30,R10
    0414 27FF      CLR	R31
    0415 0FE8      ADD	R30,R24
    0416 1FF9      ADC	R31,R25
    0417 8220      STD	Z+0,R2
(0169)             buffer_l[n]=buffer_l[n+1];
    0418 01CE      MOVW	R24,R28
    0419 5A8B      SUBI	R24,0xAB
    041A 4F9F      SBCI	R25,0xFF
    041B 2DEA      MOV	R30,R10
    041C 27FF      CLR	R31
    041D 0FE8      ADD	R30,R24
    041E 1FF9      ADC	R31,R25
    041F 8020      LDD	R2,Z+0
    0420 01CE      MOVW	R24,R28
    0421 5A8C      SUBI	R24,0xAC
    0422 4F9F      SBCI	R25,0xFF
    0423 2DEA      MOV	R30,R10
    0424 27FF      CLR	R31
    0425 0FE8      ADD	R30,R24
    0426 1FF9      ADC	R31,R25
    0427 8220      STD	Z+0,R2
    0428 94A3      INC	R10
    0429 2D8A      MOV	R24,R10
    042A 3583      CPI	R24,0x53
    042B F2F8      BCS	0x040B
(0170)           } 
(0171)         
(0172)         LCD_set_XY(X,Y);
    042C 2D2E      MOV	R18,R14
    042D 01FE      MOVW	R30,R28
    042E 54EE      SUBI	R30,0x4E

⌨️ 快捷键说明

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