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

📄 lcd1602.lst

📁 C语言单片机编程的代码及教程文献
💻 LST
📖 第 1 页 / 共 5 页
字号:
    033C 0000      NOP
    033D 0000      NOP
    033E 0000      NOP
    033F 0000      NOP
(0259) 	CLR_E;
    0340 98C7      CBI	0x18,7
(0260) 	DELAY();
    0341 0000      NOP
    0342 0000      NOP
    0343 0000      NOP
    0344 0000      NOP
    0345 0000      NOP
    0346 0000      NOP
    0347 0000      NOP
    0348 0000      NOP
    0349 940E0764  CALL	pop_gset2
    034B 9508      RET
_LCD1602_setCGRAM:
  i                    --> R20
  buf                  --> R22
  adr                  --> R20
    034C 940E0773  CALL	push_gset2
    034E 01B9      MOVW	R22,R18
    034F 2F40      MOV	R20,R16
(0261) }
(0262) /*--------------------------------------------------------------------
(0263) 函数名称:LCD1602读操作
(0264) 函数功能:
(0265) 注意事项:对于高速CPU,应加延时,好像是废话~
(0266) 提示说明:无
(0267) 输    入:
(0268) 返    回:无
(0269) --------------------------------------------------------------------*/
(0270) //void read(uint8 adr)
(0271) //{	
(0272) //}
(0273) /*--------------------------------------------------------------------
(0274) 函数名称:LCD1602设置CGRAM内容
(0275) 函数功能:
(0276) 注意事项:对于高速CPU,应加延时,好像是废话~
(0277) 提示说明:调用LCD1602_setCG(0,userCh),则写入用户定义的字符"userCh"
(0278) 输    入:"adr"数据范围:0-8,"buf"为用户需要写入的字符"userCh"
(0279) 返    回:无
(0280) --------------------------------------------------------------------*/
(0281) void LCD1602_setCGRAM(uint8 adr,const uint8 buf[8])
(0282) {	
(0283) 	uint8 i;
(0284) 	write(0,0x40+adr*8);
    0350 E088      LDI	R24,0x8
    0351 9F84      MUL	R24,R20
    0352 2D20      MOV	R18,R0
    0353 5C20      SUBI	R18,0xC0
    0354 2700      CLR	R16
    0355 DF6A      RCALL	_write
(0285) 	for(i=0;i<8;i++)
    0356 2744      CLR	R20
    0357 C008      RJMP	0x0360
(0286) 		write(1,buf[i]);
    0358 2FE4      MOV	R30,R20
    0359 27FF      CLR	R31
    035A 0FE6      ADD	R30,R22
    035B 1FF7      ADC	R31,R23
    035C 9124      LPM	R18,0(Z)
    035D E001      LDI	R16,1
    035E DF61      RCALL	_write
    035F 9543      INC	R20
    0360 3048      CPI	R20,0x8
    0361 F3B0      BCS	0x0358
    0362 940E0764  CALL	pop_gset2
    0364 9508      RET
_LCD1602_setCmd:
  str                  --> R20
    0365 940E0775  CALL	push_gset1
    0367 01A8      MOVW	R20,R16
(0287) /* 不得采样下面写法,因为传入的是数组,最后一个不是'\0' */
(0288) 	//while(*buf)
(0289) 		//write(1,*buf++);
(0290) }
(0291) /*--------------------------------------------------------------------
(0292) 函数名称:LCD1602命令设置
(0293) 函数功能:
(0294) 注意事项:对于高速CPU,应加延时,好像是废话~
(0295) 提示说明:
(0296) 输    入:"CLR_SCR"/"GO_HOME"/"AC_INC"/"AC_DEC"...
(0297) 返    回:无
(0298) --------------------------------------------------------------------*/
(0299) //----	function  ------  1  --------  0  ----LcdWordPos--
(0300) //		dispEn		|   Enable	|  Disable	|	bit2
(0301) //		cursorEn	|   Enable	|  Disable	|	bit1
(0302) //		blinkEn		|   Enable	|  Disable	|	bit0
(0303) //------------------------------------------------------
(0304) //		isACinc		|	INC_AC  |  DEC_AC	|	bit1
(0305) //		shiftEn		|   Enable	|  Disable	|	bit0
(0306) //------------------------------------------------------
(0307) void LCD1602_setCmd(uint8  *str)
(0308) {
(0309) 	static bool dispEn  =0;
(0310) 	static bool cursorEn=0;
(0311) 	static bool blinkEn =0;
(0312) 	static bool shiftEn =0;
(0313) 	static bool isACinc =0;
(0314) 	
(0315) 	if(!strcmp(str,"CLR_SCR"))			//clear screen
    0368 EF2B      LDI	R18,0xFB
    0369 E030      LDI	R19,0
    036A 018A      MOVW	R16,R20
    036B 940E06B1  CALL	_strcmp
    036D 3000      CPI	R16,0
    036E 0701      CPC	R16,R17
    036F F421      BNE	0x0374
(0316) 		write(0,0x01);
    0370 E021      LDI	R18,1
    0371 2700      CLR	R16
    0372 DF4D      RCALL	_write
    0373 C181      RJMP	0x04F5
(0317) 
(0318) 	else if(!strcmp(str,"GO_HOME"))		//set AC go home
    0374 EF23      LDI	R18,0xF3
    0375 E030      LDI	R19,0
    0376 018A      MOVW	R16,R20
    0377 940E06B1  CALL	_strcmp
    0379 3000      CPI	R16,0
    037A 0701      CPC	R16,R17
    037B F421      BNE	0x0380
(0319) 		write(0,0x02);
    037C E022      LDI	R18,2
    037D 2700      CLR	R16
    037E DF41      RCALL	_write
    037F C175      RJMP	0x04F5
(0320) /*--------------------------------------------------
(0321) isACinc & shiftEn 共用一个命令设置
(0322) --------------------------------------------------*/
(0323) 	else if(!strcmp(str,"INC_AC"))		//set AC as inc mode
    0380 EE2C      LDI	R18,0xEC
    0381 E030      LDI	R19,0
    0382 018A      MOVW	R16,R20
    0383 940E06B1  CALL	_strcmp
    0385 3000      CPI	R16,0
    0386 0701      CPC	R16,R17
    0387 F479      BNE	0x0397
(0324) 	{
(0325) 		isACinc=1;
    0388 E081      LDI	R24,1
    0389 93800065  STS	isACinc,R24
(0326) 		if(shiftEn)
    038B 90200064  LDS	R2,shiftEn
    038D 2022      TST	R2
    038E F021      BEQ	0x0393
(0327) 			write(0,0x07);
    038F E027      LDI	R18,7
    0390 2700      CLR	R16
    0391 DF2E      RCALL	_write
    0392 C162      RJMP	0x04F5
(0328) 		else 
(0329) 			write(0,0x06);
    0393 E026      LDI	R18,6
    0394 2700      CLR	R16
    0395 DF2A      RCALL	_write
(0330) 	}		
    0396 C15E      RJMP	0x04F5
(0331) 	else if(!strcmp(str,"DEC_AC"))		//set AC as dec mode
    0397 EE25      LDI	R18,0xE5
    0398 E030      LDI	R19,0
    0399 018A      MOVW	R16,R20
    039A 940E06B1  CALL	_strcmp
    039C 3000      CPI	R16,0
    039D 0701      CPC	R16,R17
    039E F479      BNE	0x03AE
(0332) 	{	
(0333) 		isACinc=0;
    039F 2422      CLR	R2
    03A0 92200065  STS	isACinc,R2
(0334) 		if(shiftEn)
    03A2 90200064  LDS	R2,shiftEn
    03A4 2022      TST	R2
    03A5 F021      BEQ	0x03AA
(0335) 			write(0,0x05);
    03A6 E025      LDI	R18,5
    03A7 2700      CLR	R16
    03A8 DF17      RCALL	_write
    03A9 C14B      RJMP	0x04F5
(0336) 		else
(0337) 			write(0,0x04);
    03AA E024      LDI	R18,4
    03AB 2700      CLR	R16
    03AC DF13      RCALL	_write
(0338) 	}		
    03AD C147      RJMP	0x04F5
(0339) 	else if(!strcmp(str,"EN_SHIFT"))	//enable shift
    03AE ED2C      LDI	R18,0xDC
    03AF E030      LDI	R19,0
    03B0 018A      MOVW	R16,R20
    03B1 940E06B1  CALL	_strcmp
    03B3 3000      CPI	R16,0
    03B4 0701      CPC	R16,R17
    03B5 F479      BNE	0x03C5
(0340) 	{
(0341) 		shiftEn=1;
    03B6 E081      LDI	R24,1
    03B7 93800064  STS	shiftEn,R24
(0342) 		if(isACinc)
    03B9 90200065  LDS	R2,isACinc
    03BB 2022      TST	R2
    03BC F021      BEQ	0x03C1
(0343) 			write(0,0x07);
    03BD E027      LDI	R18,7
    03BE 2700      CLR	R16
    03BF DF00      RCALL	_write
    03C0 C134      RJMP	0x04F5
(0344) 		else
(0345) 			write(0,0x06);
    03C1 E026      LDI	R18,6
    03C2 2700      CLR	R16
    03C3 DEFC      RCALL	_write
(0346) 	}
    03C4 C130      RJMP	0x04F5
(0347) 	else if(!strcmp(str,"DIS_SHIFT"))	//disable shift
    03C5 ED22      LDI	R18,0xD2
    03C6 E030      LDI	R19,0
    03C7 018A      MOVW	R16,R20
    03C8 940E06B1  CALL	_strcmp
    03CA 3000      CPI	R16,0
    03CB 0701      CPC	R16,R17
    03CC F479      BNE	0x03DC
(0348) 	{
(0349) 		shiftEn=0;
    03CD 2422      CLR	R2
    03CE 92200064  STS	shiftEn,R2
(0350) 		if(isACinc)
    03D0 90200065  LDS	R2,isACinc
    03D2 2022      TST	R2
    03D3 F021      BEQ	0x03D8
(0351) 			write(0,0x05);
    03D4 E025      LDI	R18,5
    03D5 2700      CLR	R16
    03D6 DEE9      RCALL	_write
    03D7 C11D      RJMP	0x04F5
(0352) 		else
(0353) 			write(0,0x04);
    03D8 E024      LDI	R18,4
    03D9 2700      CLR	R16
    03DA DEE5      RCALL	_write
(0354) 	}	
    03DB C119      RJMP	0x04F5
(0355) /*--------------------------------------------------
(0356) dispEn & cursorEn & blinkEn共用一个命令设置
(0357) --------------------------------------------------*/
(0358) 	else if(!strcmp(str,"OPEN_LCD"))	//opern lcd
    03DC EC29      LDI	R18,0xC9
    03DD E030      LDI	R19,0
    03DE 018A      MOVW	R16,R20
    03DF 940E06B1  CALL	_strcmp
    03E1 3000      CPI	R16,0
    03E2 0701      CPC	R16,R17
    03E3 F4F9      BNE	0x0403
(0359) 	{
(0360) 		dispEn=1;
    03E4 E081      LDI	R24,1
    03E5 93800061  STS	dispEn,R24
(0361) 		if(cursorEn)
    03E7 90200062  LDS	R2,cursorEn
    03E9 2022      TST	R2
    03EA F061      BEQ	0x03F7
(0362) 			if(blinkEn)
    03EB 90200063  LDS	R2,blinkEn
    03ED 2022      TST	R2
    03EE F021      BEQ	0x03F3
(0363) 				write(0,0x0F);
    03EF E02F      LDI	R18,0xF
    03F0 2700      CLR	R16
    03F1 DECE      RCALL	_write
    03F2 C102      RJMP	0x04F5
(0364) 			else
(0365) 				write(0,0x0E);
    03F3 E02E      LDI	R18,0xE
    03F4 2700      CLR	R16
    03F5 DECA      RCALL	_write
    03F6 C0FE      RJMP	0x04F5
(0366) 		else
(0367) 			if(blinkEn)
    03F7 90200063  LDS	R2,blinkEn
    03F9 2022      TST	R2
    03FA F021      BEQ	0x03FF
(0368) 				write(0,0x0D);
    03FB E02D      LDI	R18,0xD
    03FC 2700      CLR	R16
    03FD DEC2      RCALL	_write
    03FE C0F6      RJMP	0x04F5
(0369) 			else
(0370) 				write(0,0x0C);
    03FF E02C      LDI	R18,0xC
    0400 2700      CLR	R16
    0401 DEBE      RCALL	_write
(0371) 	}		
    0402 C0F2      RJMP	0x04F5
(0372) 	else if(!strcmp(str,"CLOSE_LCD"))	//close lcd
    0403 EB2F      LDI	R18,0xBF
    0404 E030      LDI	R19,0
    0405 018A      MOVW	R16,R20
    0406 940E06B1  CALL	_strcmp
    0408 3000      CPI	R16,0
    0409 0701      CPC	R16,R17
    040A F4F9      BNE	0x042A
(0373) 	{
(0374) 		dispEn=0;
    040B 2422      CLR	R2
    040C 92200061  STS	dispEn,R2
(0375) 		if(cursorEn)
    040E 90200062  LDS	R2,cursorEn
    0410 2022      TST	R2
    0411 F061      BEQ	0x041E
(0376) 			if(blinkEn)
    0412 90200063  LDS	R2,blinkEn
    0414 2022      TST	R2
    0415 F021      BEQ	0x041A
(0377) 				write(0,0x0B);
    0416 E02B      LDI	R18,0xB
    0417 2700      CLR	R16
    0418 DEA7      RCALL	_write
    0419 C0DB      RJMP	0x04F5
(0378) 			else
(0379) 				write(0,0x0A);
    041A E02A      LDI	R18,0xA
    041B 2700      CLR	R16
    041C DEA3      RCALL	_write
    041D C0D7      RJMP	0x04F5
(0380) 		else
(0381) 			if(blinkEn)
    041E 90200063  LDS	R2,blinkEn
    0420 2022      TST	R2
    0421 F021      BEQ	0x0426
(0382) 				write(0,0x09);
    0422 E029      LDI	R18,0x9
    0423 2700      CLR	R16
    0424 DE9B      RCALL	_write
    0425 C0CF      RJMP	0x04F5
(0383) 			else
(0384) 				write(0,0x08);
    0426 E028      LDI	R18,0x8
    0427 2700      CLR	R16
    0428 DE97      RCALL	_write
(0385) 	}	
    0429 C0CB      RJMP	0x04F5
(0386) 	else if(!strcmp(str,"OPEN_CURS"))	//open cursor	
    042A EB25      LDI	R18,0xB5
    042B E030      LDI	R19,0
    042C 018A      MOVW	R16,R20
    042D 940E06B1  CALL	_strcmp
    042F 3000      CPI	R16,0
    0430 0701      CPC	R16,R17
    0431 F4F9      BNE	0x0451
(0387) 	{
(0388) 		cursorEn=1;
    0432 E081      LDI	R24,1
    0433 93800062  STS	cursorEn,R24
(0389) 		if(dispEn)
    0435 90200061  LDS	R2,dispEn
    0437 2022      TST	R2
    0438 F061      BEQ	0x0445
(0390) 			if(blinkEn)
    0439 90200063  LDS	R2,blinkEn
    043B 2022      TST	R2
    043C F021      BEQ	0x0441
(0391) 				write(0,0x0F);
    043D E02F      LDI	R18,0xF
    043E 2700      CLR	R16
    043F DE80      RCALL	_write
    0440 C0B4      RJMP	0x04F5
(0392) 			else
(0393) 				write(0,0x0E);
    0441 E02E      LDI	R18,0xE
    0442 2700      CLR	R16
    0443 DE7C      RCALL	_write
    0444 C0B0      RJMP	0x04F5
(0394) 		else
(0395) 			if(blinkEn)
    0445 90200063  LDS	R2,blinkEn
    0447 2022      TST	R2
    0448 F021      BEQ	0x044D
(0396) 				write(0,0x0B);
    0449 E02B      LDI	R18,0xB
    044A 2700      CLR	R16
    044B DE74      RCALL	_write
    044C C0A8      RJMP	0x04F5
(0397) 			else
(0398) 				write(0,0x0A);
    044D E02A      LDI	R18,0xA
    044E 2700      CLR	R16
    044F DE70      RCALL	_write
(0399) 	}	
    0450 C0A4      RJMP	0x04F5
(0400) 	else if(!strcmp(str,"CLOSE_CURS"))	//close cursor
    0451 EA2A      LDI	R18,0xAA
    0452 E030      LDI	R19,0
    0453 018A      MOVW	R16,R20
    0454 940E06B1  CALL	_strcmp
    0456 3000      CPI	R16,0
    0457 0701    

⌨️ 快捷键说明

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