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

📄 lcd5110.lst

📁 meg16 的所有功能实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
    02DF 2022      TST	R2
    02E0 F7B9      BNE	0x02D8
    02E1 940E03BA  CALL	pop_gset3
    02E3 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
    02E4 940E038A  CALL	push_arg4
    02E6 940E03C0  CALL	push_gset5
    02E8 8968      LDD	R22,Y+16
    02E9 88CA      LDD	R12,Y+18
    02EA 88AC      LDD	R10,Y+20
(0131)     }
(0132) }
(0133) /********************************************************************************************************************/
(0134) /*-----------------------------------------------------------------------
(0135) LCD_write_chinese_string: 在LCD上显示汉字
(0136) 
(0137) 输入参数:X、Y    :显示汉字的起始X、Y坐标;
(0138)           ch_with :汉字点阵的宽度
(0139)           num     :显示汉字的个数;  
(0140)           line    :汉字点阵数组中的起始行数
(0141)           row     :汉字显示的行间距
(0142) -----------------------------------------------------------------------*/                        
(0143) void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row)
(0144) {
(0145)     unsigned char i,n;
(0146)     
(0147)     LCD_set_XY(X,Y);                             //设置初始位置
    02EB 852C      LDD	R18,Y+12
    02EC 850A      LDD	R16,Y+10
    02ED DFB7      RCALL	_LCD_set_XY
(0148)     
(0149)     for (i=0;i<num;)
    02EE 2744      CLR	R20
    02EF C032      RJMP	0x0322
(0150)     {
(0151)       	for (n=0; n<ch_with*2; n++)              //写一个汉字
    02F0 24EE      CLR	R14
    02F1 C023      RJMP	0x0315
(0152)       	{ 
(0153)       	    if (n==ch_with)                      //写汉字的下半部分
    02F2 840E      LDD	R0,Y+14
    02F3 14E0      CP	R14,R0
    02F4 F479      BNE	0x0304
(0154)       	    {
(0155)       	        if (i==0) LCD_set_XY(X,Y+1);
    02F5 2344      TST	R20
    02F6 F429      BNE	0x02FC
    02F7 852C      LDD	R18,Y+12
    02F8 5F2F      SUBI	R18,0xFF
    02F9 850A      LDD	R16,Y+10
    02FA DFAA      RCALL	_LCD_set_XY
    02FB C008      RJMP	0x0304
(0156)       	        else
(0157) 				{
(0158)       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
    02FC 852C      LDD	R18,Y+12
    02FD 5F2F      SUBI	R18,0xFF
    02FE 842E      LDD	R2,Y+14
    02FF 0C2A      ADD	R2,R10
    0300 9E24      MUL	R2,R20
    0301 850A      LDD	R16,Y+10
    0302 0D00      ADD	R16,R0
    0303 DFA1      RCALL	_LCD_set_XY
(0159) 				}
(0160)             }
(0161)       	    LCD_write_byte(HZK[line+i][n],1);
    0304 E021      LDI	R18,1
    0305 2C2C      MOV	R2,R12
    0306 0E24      ADD	R2,R20
    0307 E188      LDI	R24,0x18
    0308 9D82      MUL	R24,R2
    0309 0110      MOVW	R2,R0
    030A E78C      LDI	R24,0x7C
    030B E092      LDI	R25,2
    030C 0E28      ADD	R2,R24
    030D 1E39      ADC	R3,R25
    030E 2DEE      MOV	R30,R14
    030F 27FF      CLR	R31
    0310 0DE2      ADD	R30,R2
    0311 1DF3      ADC	R31,R3
    0312 9104      LPM	R16,0(Z)
    0313 D05D      RCALL	_LCD_write_byte
    0314 94E3      INC	R14
    0315 E082      LDI	R24,2
    0316 840E      LDD	R0,Y+14
    0317 9D80      MUL	R24,R0
    0318 14E0      CP	R14,R0
    0319 F2C0      BCS	0x02F2
(0162)       	}
(0163)       	i++;
    031A 9543      INC	R20
(0164)       	LCD_set_XY((X+(ch_with+row)*i),Y);
    031B 852C      LDD	R18,Y+12
    031C 842E      LDD	R2,Y+14
    031D 0C2A      ADD	R2,R10
    031E 9E24      MUL	R2,R20
    031F 850A      LDD	R16,Y+10
    0320 0D00      ADD	R16,R0
    0321 DF83      RCALL	_LCD_set_XY
    0322 1746      CP	R20,R22
    0323 F408      BCC	0x0325
    0324 CFCB      RJMP	0x02F0
    0325 940E03BD  CALL	pop_gset5
    0327 9624      ADIW	R28,4
    0328 9508      RET
_LCD_draw_bmp_pixel:
  row                  --> R20
  n                    --> R22
  i                    --> R14
  Pix_y                --> Y+18
  Pix_x                --> R10
  map                  --> R12
  Y                    --> Y+12
  X                    --> Y+10
    0329 940E038A  CALL	push_arg4
    032B 940E03C0  CALL	push_gset5
    032D 84CE      LDD	R12,Y+14
    032E 84DF      LDD	R13,Y+15
    032F 88A8      LDD	R10,Y+16
(0165)     }
(0166) }
(0167) /********************************************************************************************************************/
(0168) /*-----------------------------------------------------------------------
(0169) LCD_draw_map      : 位图绘制函数
(0170) 
(0171) 输入参数:X、Y    :位图绘制的起始X、Y坐标;
(0172)           *map    :位图点阵数据;
(0173)           Pix_x   :位图像素(长)
(0174)           Pix_y   :位图像素(宽)
(0175) -----------------------------------------------------------------------*/
(0176) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
(0177) {
(0178)     unsigned int i,n;
(0179)     unsigned char row;
(0180)     
(0181)     if (Pix_y%8==0)
    0330 E018      LDI	R17,0x8
    0331 890A      LDD	R16,Y+18
    0332 940E038F  CALL	mod8u
    0334 2300      TST	R16
    0335 F429      BNE	0x033B
(0182) 	{
(0183) 	    row=Pix_y/8;      //计算位图所占行数
    0336 894A      LDD	R20,Y+18
    0337 9546      LSR	R20
    0338 9546      LSR	R20
    0339 9546      LSR	R20
(0184)     }
    033A C005      RJMP	0x0340
(0185)     else
(0186) 	{
(0187)         row=Pix_y/8+1;
    033B 894A      LDD	R20,Y+18
    033C 9546      LSR	R20
    033D 9546      LSR	R20
    033E 9546      LSR	R20
    033F 5F4F      SUBI	R20,0xFF
(0188)     }
(0189)     for (n=0;n<row;n++)
    0340 2766      CLR	R22
    0341 2777      CLR	R23
    0342 C025      RJMP	0x0368
(0190)     {
(0191)       	LCD_set_XY(X,Y);
    0343 852C      LDD	R18,Y+12
    0344 850A      LDD	R16,Y+10
    0345 DF5F      RCALL	_LCD_set_XY
(0192)         for(i=0; i<Pix_x; i++)
    0346 24EE      CLR	R14
    0347 24FF      CLR	R15
    0348 C015      RJMP	0x035E
(0193)           {
(0194)             LCD_write_byte(map[i+n*Pix_x], 1);
    0349 E021      LDI	R18,1
    034A 2C2A      MOV	R2,R10
    034B 2433      CLR	R3
    034C 932F      PUSH	R18
    034D 933F      PUSH	R19
    034E 0191      MOVW	R18,R2
    034F 018B      MOVW	R16,R22
    0350 940E03A7  CALL	empy16s
    0352 913F      POP	R19
    0353 912F      POP	R18
    0354 01F7      MOVW	R30,R14
    0355 0FE0      ADD	R30,R16
    0356 1FF1      ADC	R31,R17
    0357 0DEC      ADD	R30,R12
    0358 1DFD      ADC	R31,R13
    0359 8100      LDD	R16,Z+0
    035A D016      RCALL	_LCD_write_byte
    035B 01C7      MOVW	R24,R14
    035C 9601      ADIW	R24,1
    035D 017C      MOVW	R14,R24
    035E 2C2A      MOV	R2,R10
    035F 2433      CLR	R3
    0360 14E2      CP	R14,R2
    0361 04F3      CPC	R15,R3
    0362 F330      BCS	0x0349
(0195)           }
(0196)         Y++;                         //换行
    0363 840C      LDD	R0,Y+12
    0364 9403      INC	R0
    0365 860C      STD	Y+12,R0
    0366 5F6F      SUBI	R22,0xFF
    0367 4F7F      SBCI	R23,0xFF
    0368 2E24      MOV	R2,R20
    0369 2433      CLR	R3
    036A 1562      CP	R22,R2
    036B 0573      CPC	R23,R3
    036C F2B0      BCS	0x0343
    036D 940E03BD  CALL	pop_gset5
    036F 9624      ADIW	R28,4
    0370 9508      RET
_LCD_write_byte:
  i                    --> R20
  command              --> R18
  dat                  --> R16
    0371 940E03C8  CALL	push_gset1
(0197)     }      
(0198) }
(0199) /********************************************************************************************************************/
(0200) /*-----------------------------------------------------------------------
(0201) LCD_write_byte    : 写数据到LCD
(0202) 
(0203) 输入参数:data    :写入的数据;
(0204)           command :写数据/命令选择;
(0205) -----------------------------------------------------------------------*/
(0206) void LCD_write_byte(unsigned char dat, unsigned char command)
(0207) {
(0208)     unsigned char i;
(0209) 
(0210) 	CLEARBIT(LCD_PORT,LCD_CE);// 使能LCD_CE = 0
    0373 98C4      CBI	0x18,4
(0211)     
(0212)     if (command == 0)
    0374 2322      TST	R18
    0375 F411      BNE	0x0378
(0213) 	{
(0214) 	    CLEARBIT(LCD_PORT,LCD_DC);// 传送命令 LCD_DC = 0;
    0376 98C6      CBI	0x18,6
(0215) 	}
    0377 C001      RJMP	0x0379
(0216)     else
(0217) 	{
(0218) 	    SETBIT(LCD_PORT,LCD_DC);// 传送数据LCD_DC = 1;
    0378 9AC6      SBI	0x18,6
(0219) 	}
(0220) 	
(0221) 	for(i=0;i<8;i++)
    0379 2744      CLR	R20
    037A C009      RJMP	0x0384
(0222) 	{
(0223) 		if(dat&0x80)
    037B FF07      SBRS	R16,7
    037C C002      RJMP	0x037F
(0224) 		{
(0225) 			SETBIT(LCD_PORT,SDIN);//SDIN = 1;
    037D 9AC5      SBI	0x18,5
(0226) 		}
    037E C001      RJMP	0x0380
(0227) 		else
(0228) 		{
(0229) 			CLEARBIT(LCD_PORT,SDIN);//SDIN = 0;
    037F 98C5      CBI	0x18,5
(0230) 		}
(0231) 		CLEARBIT(LCD_PORT,SCLK);//SCLK = 0;
    0380 98C7      CBI	0x18,7
(0232) 		dat = dat << 1;
    0381 0F00      LSL	R16
(0233) 		SETBIT(LCD_PORT,SCLK);//SCLK = 1;
    0382 9AC7      SBI	0x18,7
    0383 9543      INC	R20
    0384 3048      CPI	R20,0x8
    0385 F3A8      BCS	0x037B
(0234) 	}
(0235)     SETBIT(LCD_PORT,LCD_CE);//LCD_CE = 1;
FILE: <library>
    0386 9AC4      SBI	0x18,4
    0387 940E03CB  CALL	pop_gset1
    0389 9508      RET
push_arg4:
    038A 933A      ST	R19,-Y
    038B 932A      ST	R18,-Y
push_arg2:
    038C 931A      ST	R17,-Y
    038D 930A      ST	R16,-Y
    038E 9508      RET
mod8u:
    038F 9468      BSET	6
    0390 C001      RJMP	xdiv8u
div8u:
    0391 94E8      BCLR	6
xdiv8u:
    0392 932A      ST	R18,-Y
    0393 92FA      ST	R15,-Y
    0394 92EA      ST	R14,-Y
    0395 24FF      CLR	R15
    0396 24EE      CLR	R14
    0397 E120      LDI	R18,0x10
    0398 0F00      LSL	R16
    0399 1CFF      ROL	R15
    039A 1CEE      ROL	R14
    039B 16E1      CP	R14,R17
    039C F010      BCS	0x039F
    039D 1AE1      SUB	R14,R17
    039E 9503      INC	R16
    039F 952A      DEC	R18
    03A0 F7B9      BNE	0x0398
    03A1 F40E      BRTC	0x03A3
    03A2 2D0E      MOV	R16,R14
    03A3 90E9      LD	R14,Y+
    03A4 90F9      LD	R15,Y+
    03A5 9129      LD	R18,Y+
    03A6 9508      RET
empy16s:
    03A7 920A      ST	R0,-Y
    03A8 921A      ST	R1,-Y
    03A9 938A      ST	R24,-Y
    03AA 939A      ST	R25,-Y
    03AB 9F02      MUL	R16,R18
    03AC 01C0      MOVW	R24,R0
    03AD 9F12      MUL	R17,R18
    03AE 0D90      ADD	R25,R0
    03AF 9F03      MUL	R16,R19
    03B0 0D90      ADD	R25,R0
    03B1 018C      MOVW	R16,R24
    03B2 9199      LD	R25,Y+
    03B3 9189      LD	R24,Y+
    03B4 9019      LD	R1,Y+
    03B5 9009      LD	R0,Y+
    03B6 9508      RET
pop_gset2:
    03B7 E0E2      LDI	R30,2
    03B8 940C03CC  JMP	pop
pop_gset3:
    03BA E0E4      LDI	R30,4
    03BB 940C03CC  JMP	pop
pop_gset5:
    03BD 27EE      CLR	R30
    03BE 940C03CC  JMP	pop
push_gset5:
    03C0 92FA      ST	R15,-Y
    03C1 92EA      ST	R14,-Y
push_gset4:
    03C2 92DA      ST	R13,-Y
    03C3 92CA      ST	R12,-Y
push_gset3:
    03C4 92BA      ST	R11,-Y
    03C5 92AA      ST	R10,-Y
push_gset2:
    03C6 937A      ST	R23,-Y
    03C7 936A      ST	R22,-Y
push_gset1:
    03C8 935A      ST	R21,-Y
    03C9 934A      ST	R20,-Y
    03CA 9508      RET
pop_gset1:
    03CB E0E1      LDI	R30,1
pop:
    03CC 9149      LD	R20,Y+
    03CD 9159      LD	R21,Y+
    03CE FDE0      SBRC	R30,0
    03CF 9508      RET
    03D0 9169      LD	R22,Y+
    03D1 9179      LD	R23,Y+
    03D2 FDE1      SBRC	R30,1
    03D3 9508      RET
    03D4 90A9      LD	R10,Y+
    03D5 90B9      LD	R11,Y+
    03D6 FDE2      SBRC	R30,2
    03D7 9508      RET
    03D8 90C9      LD	R12,Y+
    03D9 90D9      LD	R13,Y+
    03DA FDE3      SBRC	R30,3
    03DB 9508      RET
    03DC 90E9      LD	R14,Y+
    03DD 90F9      LD	R15,Y+
    03DE 9508      RET

⌨️ 快捷键说明

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