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

📄 3310lcd_prj.lst

📁 Nakia LCD3310 Driver
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0074) 最后修改日期      :2004-8-10 
(0075) -----------------------------------------------------------------------*/
(0076) void LCD_write_char(unsigned char c)
(0077)   {
(0078)     unsigned char line;
(0079) 
(0080)     c -= 32;
    0305 5260      SUBI	R22,0x20
(0081) 
(0082)     for (line=0; line<6; line++)
    0306 2744      CLR	R20
    0307 C00F      RJMP	0x0317
(0083)       LCD_write_byte(font6x8[c][line], 1);
    0308 E021      LDI	R18,1
    0309 E086      LDI	R24,6
    030A 9F86      MUL	R24,R22
    030B 0110      MOVW	R2,R0
    030C E286      LDI	R24,0x26
    030D E090      LDI	R25,0
    030E 0E28      ADD	R2,R24
    030F 1E39      ADC	R3,R25
    0310 2FE4      MOV	R30,R20
    0311 27FF      CLR	R31
    0312 0DE2      ADD	R30,R2
    0313 1DF3      ADC	R31,R3
    0314 9104      LPM	R16,0(Z)
    0315 D147      RCALL	_LCD_write_byte
    0316 9543      INC	R20
    0317 3046      CPI	R20,6
    0318 F378      BCS	0x0308
    0319 D17B      RCALL	pop_gset2
    031A 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    031B D183      RCALL	push_gset3
    031C 2EA2      MOV	R10,R18
    031D 2F60      MOV	R22,R16
    031E 814E      LDD	R20,Y+6
    031F 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);
    0320 2D2A      MOV	R18,R10
    0321 2F06      MOV	R16,R22
    0322 DFD3      RCALL	_LCD_set_XY
    0323 C005      RJMP	0x0329
(0098)     while (*s) 
(0099)       {
(0100) 	 LCD_write_char(*s);
    0324 01FA      MOVW	R30,R20
    0325 8100      LDD	R16,Z+0
    0326 DFDC      RCALL	_LCD_write_char
(0101) 	 s++;
    0327 5F4F      SUBI	R20,0xFF
    0328 4F5F      SBCI	R21,0xFF
    0329 01FA      MOVW	R30,R20
    032A 8020      LDD	R2,Z+0
    032B 2022      TST	R2
    032C F7B9      BNE	0x0324
    032D D169      RCALL	pop_gset3
    032E 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
    032F D138      RCALL	push_arg4
    0330 D16A      RCALL	push_gset5
    0331 8968      LDD	R22,Y+16
    0332 88CA      LDD	R12,Y+18
    0333 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);                             //设置初始位置
    0334 852C      LDD	R18,Y+12
    0335 850A      LDD	R16,Y+10
    0336 DFBF      RCALL	_LCD_set_XY
(0126)     
(0127)     for (i=0;i<num;)
    0337 2744      CLR	R20
    0338 C032      RJMP	0x036B
(0128)       {
(0129)       	for (n=0; n<ch_with*2; n++)              //写一个汉字
    0339 24EE      CLR	R14
    033A C023      RJMP	0x035E
(0130)       	  { 
(0131)       	    if (n==ch_with)                      //写汉字的下半部分
    033B 840E      LDD	R0,Y+14
    033C 14E0      CP	R14,R0
    033D F479      BNE	0x034D
(0132)       	      {
(0133)       	        if (i==0) LCD_set_XY(X,Y+1);
    033E 2344      TST	R20
    033F F429      BNE	0x0345
    0340 852C      LDD	R18,Y+12
    0341 5F2F      SUBI	R18,0xFF
    0342 850A      LDD	R16,Y+10
    0343 DFB2      RCALL	_LCD_set_XY
    0344 C008      RJMP	0x034D
(0134)       	        else
(0135)       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
    0345 852C      LDD	R18,Y+12
    0346 5F2F      SUBI	R18,0xFF
    0347 842E      LDD	R2,Y+14
    0348 0C2A      ADD	R2,R10
    0349 9E24      MUL	R2,R20
    034A 850A      LDD	R16,Y+10
    034B 0D00      ADD	R16,R0
    034C DFA9      RCALL	_LCD_set_XY
(0136)               }
(0137)       	    LCD_write_byte(write_chinese_string[line+i][n],1);
    034D E021      LDI	R18,1
    034E 2C2C      MOV	R2,R12
    034F 0E24      ADD	R2,R20
    0350 E188      LDI	R24,0x18
    0351 9D82      MUL	R24,R2
    0352 0110      MOVW	R2,R0
    0353 E48E      LDI	R24,0x4E
    0354 E092      LDI	R25,2
    0355 0E28      ADD	R2,R24
    0356 1E39      ADC	R3,R25
    0357 2DEE      MOV	R30,R14
    0358 27FF      CLR	R31
    0359 0DE2      ADD	R30,R2
    035A 1DF3      ADC	R31,R3
    035B 9104      LPM	R16,0(Z)
    035C D100      RCALL	_LCD_write_byte
    035D 94E3      INC	R14
    035E E082      LDI	R24,2
    035F 840E      LDD	R0,Y+14
    0360 9D80      MUL	R24,R0
    0361 14E0      CP	R14,R0
    0362 F2C0      BCS	0x033B
(0138)       	  }
(0139)       	i++;
    0363 9543      INC	R20
(0140)       	LCD_set_XY((X+(ch_with+row)*i),Y);
    0364 852C      LDD	R18,Y+12
    0365 842E      LDD	R2,Y+14
    0366 0C2A      ADD	R2,R10
    0367 9E24      MUL	R2,R20
    0368 850A      LDD	R16,Y+10
    0369 0D00      ADD	R16,R0
    036A DF8B      RCALL	_LCD_set_XY
    036B 1746      CP	R20,R22
    036C F408      BCC	0x036E
    036D CFCB      RJMP	0x0339
    036E D12A      RCALL	pop_gset5
    036F 9624      ADIW	R28,4
    0370 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
    0371 D0F6      RCALL	push_arg4
    0372 D128      RCALL	push_gset5
    0373 2EE2      MOV	R14,R18
    0374 97EF      SBIW	R28,0x3F
    0375 97EF      SBIW	R28,0x3F
    0376 97AA      SBIW	R28,0x2A
    0377 01FE      MOVW	R30,R28
    0378 54EA      SUBI	R30,0x4A
    0379 4FFF      SBCI	R31,0xFF
    037A 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;
    037B 2766      CLR	R22
(0156)     unsigned char buffer_h[84]={0};
    037C E586      LDI	R24,0x56
    037D E093      LDI	R25,3
    037E 01FE      MOVW	R30,R28
    037F E504      LDI	R16,0x54
    0380 E010      LDI	R17,0
    0381 93FA      ST	R31,-Y
    0382 93EA      ST	R30,-Y
    0383 939A      ST	R25,-Y
    0384 938A      ST	R24,-Y
    0385 D134      RCALL	asgncblk
(0157)     unsigned char buffer_l[84]={0};
    0386 EA8A      LDI	R24,0xAA
    0387 E093      LDI	R25,3
    0388 01FE      MOVW	R30,R28
    0389 5AEC      SUBI	R30,0xAC
    038A 4FFF      SBCI	R31,0xFF
    038B E504      LDI	R16,0x54
    038C E010      LDI	R17,0
    038D 93FA      ST	R31,-Y
    038E 93EA      ST	R30,-Y
    038F 939A      ST	R25,-Y
    0390 938A      ST	R24,-Y
    0391 D128      RCALL	asgncblk
(0158)       
(0159)     for (i=0; i<156; i++)
    0392 2744      CLR	R20
    0393 C07D      RJMP	0x0411
(0160)       {
(0161)         buffer_h[83] = move_chinese_string[i/12][j];
    0394 E01C      LDI	R17,0xC
    0395 2F04      MOV	R16,R20
    0396 D0D8      RCALL	div8u
    0397 E188      LDI	R24,0x18
    0398 9F80      MUL	R24,R16
    0399 0110      MOVW	R2,R0
    039A E986      LDI	R24,0x96
    039B E092      LDI	R25,2
    039C 0E28      ADD	R2,R24
    039D 1E39      ADC	R3,R25
    039E 2FE6      MOV	R30,R22
    039F 27FF      CLR	R31
    03A0 0DE2      ADD	R30,R2
    03A1 1DF3      ADC	R31,R3
    03A2 91E4      LPM	R30,0(Z)
    03A3 01DE      MOVW	R26,R28
    03A4 5AAD      SUBI	R26,0xAD
    03A5 4FBF      SBCI	R27,0xFF
    03A6 93EC      ST	R30,0(X)
(0162)         buffer_l[83] = move_chinese_string[i/12][j+12];
    03A7 E01C      LDI	R17,0xC
    03A8 2F04      MOV	R16,R20
    03A9 D0C5      RCALL	div8u
    03AA E188      LDI	R24,0x18
    03AB 9F80      MUL	R24,R16
    03AC 0110      MOVW	R2,R0
    03AD E986      LDI	R24,0x96
    03AE E092      LDI	R25,2
    03AF 0E28      ADD	R2,R24
    03B0 1E39      ADC	R3,R25
    03B1 2FE6      MOV	R30,R22
    03B2 27FF      CLR	R31
    03B3 963C      ADIW	R30,0xC
    03B4 0DE2      ADD	R30,R2
    03B5 1DF3      ADC	R31,R3
    03B6 91E4      LPM	R30,0(Z)
    03B7 01DE      MOVW	R26,R28
    03B8 55A9      SUBI	R26,0x59
    03B9 4FBF      SBCI	R27,0xFF
    03BA 93EC      ST	R30,0(X)
(0163)         j++;
    03BB 9563      INC	R22
(0164)         if (j==12) j=0;
    03BC 306C      CPI	R22,0xC
    03BD F409      BNE	0x03BF
    03BE 2766      CLR	R22
(0165)         
(0166)         for (n=0; n<83; n++)
    03BF 24AA      CLR	R10
    03C0 C01E      RJMP	0x03DF
(0167)           { 
(0168)             buffer_h[n]=buffer_h[n+1];
    03C1 01CE      MOVW	R24,R28
    03C2 9601      ADIW	R24,1
    03C3 2DEA      MOV	R30,R10
    03C4 27FF      CLR	R31
    03C5 0FE8      ADD	R30,R24
    03C6 1FF9      ADC	R31,R25
    03C7 8020      LDD	R2,Z+0
    03C8 01CE      MOVW	R24,R28
    03C9 2DEA      MOV	R30,R10
    03CA 27FF      CLR	R31
    03CB 0FE8      ADD	R30,R24
    03CC 1FF9      ADC	R31,R25
    03CD 8220      STD	Z+0,R2
(0169)             buffer_l[n]=buffer_l[n+1];
    03CE 01CE      MOVW	R24,R28
    03CF 5A8B      SUBI	R24,0xAB
    03D0 4F9F      SBCI	R25,0xFF
    03D1 2DEA      MOV	R30,R10
    03D2 27FF      CLR	R31
    03D3 0FE8      ADD	R30,R24
    03D4 1FF9      ADC	R31,R25
    03D5 8020      LDD	R2,Z+0
    03D6 01CE      MOVW	R24,R28
    03D7 5A8C      SUBI	R24,0xAC
    03D8 4F9F      SBCI	R25,0xFF
    03D9 2DEA      MOV	R30,R10
    03DA 27FF      CLR	R31
    03DB 0FE8      ADD	R30,R24
    03DC 1FF9      ADC	R31,R25
    03DD 8220      STD	Z+0,R2
    03DE 94A3      INC	R10
    03DF 2D8A      MOV	R24,R10
    03E0 3583      CPI	R24,0x53
    03E1 F2F8      BCS	0x03C1
(0170)           } 
(0171)         
(0172)         LCD_set_XY(X,Y);
    03E2 2D2E      MOV	R18,R14

⌨️ 快捷键说明

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