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

📄 lcd1602.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0250) 	uint8 i;
(0251) 	write(0,0x40+adr*8);
    0357 E088      LDI	R24,0x8
    0358 9F84      MUL	R24,R20
    0359 2D20      MOV	R18,R0
    035A 5C20      SUBI	R18,0xC0
    035B 2700      CLR	R16
    035C DF6A      RCALL	_write
(0252) 	for(i=0;i<8;i++)
    035D 2744      CLR	R20
    035E C008      RJMP	0x0367
(0253) 		write(1,buf[i]);
    035F 2FE4      MOV	R30,R20
    0360 27FF      CLR	R31
    0361 0FE6      ADD	R30,R22
    0362 1FF7      ADC	R31,R23
    0363 9124      LPM	R18,0(Z)
    0364 E001      LDI	R16,1
    0365 DF61      RCALL	_write
    0366 9543      INC	R20
    0367 3048      CPI	R20,0x8
    0368 F3B0      BCS	0x035F
(0254) /* 不得采样下面写法,因为传入的是数组,最后一个不是'\0' */
(0255) 	//while(*buf)
(0256) 		//write(1,*buf++);
(0257) }
    0369 940E080E  CALL	pop_gset2
    036B 9508      RET
_LCD1602_setCmd:
  str                  --> R20
    036C 940E0817  CALL	push_gset1
    036E 01A8      MOVW	R20,R16
(0258) /*--------------------------------------------------------------------
(0259) 函数名称:LCD1602命令设置
(0260) 函数功能:
(0261) 注意事项:对于高速CPU,应加延时,好像是废话~
(0262) 提示说明:
(0263) 输    入:"CLR_SCR"/"GO_HOME"/"AC_INC"/"AC_DEC"...
(0264) 返    回:无
(0265) --------------------------------------------------------------------*/
(0266) //----	function  ------  1  --------  0  ----LcdWordPos--
(0267) //		dispEn		|   Enable	|  Disable	|	bit2
(0268) //		cursorEn	|   Enable	|  Disable	|	bit1
(0269) //		blinkEn		|   Enable	|  Disable	|	bit0
(0270) //------------------------------------------------------
(0271) //		isACinc		|	INC_AC  |  DEC_AC	|	bit1
(0272) //		shiftEn		|   Enable	|  Disable	|	bit0
(0273) //------------------------------------------------------
(0274) void LCD1602_setCmd(uint8  *str)
(0275) {
(0276) 	static bool dispEn  =0;
(0277) 	static bool cursorEn=0;
(0278) 	static bool blinkEn =0;
(0279) 	static bool shiftEn =0;
(0280) 	static bool isACinc =0;
(0281) 	
(0282) 	if(!strcmp(str,"CLR_SCR"))			//clear screen
    036F E029      LDI	R18,0x9
    0370 E031      LDI	R19,1
    0371 018A      MOVW	R16,R20
    0372 940E0759  CALL	_strcmp
    0374 3000      CPI	R16,0
    0375 0701      CPC	R16,R17
    0376 F421      BNE	0x037B
(0283) 		write(0,0x01);
    0377 E021      LDI	R18,1
    0378 2700      CLR	R16
    0379 DF4D      RCALL	_write
    037A C181      RJMP	0x04FC
(0284) 
(0285) 	else if(!strcmp(str,"GO_HOME"))		//set AC go home
    037B E021      LDI	R18,1
    037C E031      LDI	R19,1
    037D 018A      MOVW	R16,R20
    037E 940E0759  CALL	_strcmp
    0380 3000      CPI	R16,0
    0381 0701      CPC	R16,R17
    0382 F421      BNE	0x0387
(0286) 		write(0,0x02);
    0383 E022      LDI	R18,2
    0384 2700      CLR	R16
    0385 DF41      RCALL	_write
    0386 C175      RJMP	0x04FC
(0287) /*--------------------------------------------------
(0288) isACinc & shiftEn 共用一个命令设置
(0289) --------------------------------------------------*/
(0290) 	else if(!strcmp(str,"INC_AC"))		//set AC as inc mode
    0387 EF2A      LDI	R18,0xFA
    0388 E030      LDI	R19,0
    0389 018A      MOVW	R16,R20
    038A 940E0759  CALL	_strcmp
    038C 3000      CPI	R16,0
    038D 0701      CPC	R16,R17
    038E F479      BNE	0x039E
(0291) 	{
(0292) 		isACinc=1;
    038F E081      LDI	R24,1
    0390 93800065  STS	0x65,R24
(0293) 		if(shiftEn)
    0392 90200064  LDS	R2,0x64
    0394 2022      TST	R2
    0395 F021      BEQ	0x039A
(0294) 			write(0,0x07);
    0396 E027      LDI	R18,7
    0397 2700      CLR	R16
    0398 DF2E      RCALL	_write
    0399 C162      RJMP	0x04FC
(0295) 		else 
(0296) 			write(0,0x06);
    039A E026      LDI	R18,6
    039B 2700      CLR	R16
    039C DF2A      RCALL	_write
(0297) 	}		
    039D C15E      RJMP	0x04FC
(0298) 	else if(!strcmp(str,"DEC_AC"))		//set AC as dec mode
    039E EF23      LDI	R18,0xF3
    039F E030      LDI	R19,0
    03A0 018A      MOVW	R16,R20
    03A1 940E0759  CALL	_strcmp
    03A3 3000      CPI	R16,0
    03A4 0701      CPC	R16,R17
    03A5 F479      BNE	0x03B5
(0299) 	{	
(0300) 		isACinc=0;
    03A6 2422      CLR	R2
    03A7 92200065  STS	0x65,R2
(0301) 		if(shiftEn)
    03A9 90200064  LDS	R2,0x64
    03AB 2022      TST	R2
    03AC F021      BEQ	0x03B1
(0302) 			write(0,0x05);
    03AD E025      LDI	R18,5
    03AE 2700      CLR	R16
    03AF DF17      RCALL	_write
    03B0 C14B      RJMP	0x04FC
(0303) 		else
(0304) 			write(0,0x04);
    03B1 E024      LDI	R18,4
    03B2 2700      CLR	R16
    03B3 DF13      RCALL	_write
(0305) 	}		
    03B4 C147      RJMP	0x04FC
(0306) 	else if(!strcmp(str,"EN_SHIFT"))	//enable shift
    03B5 EE2A      LDI	R18,0xEA
    03B6 E030      LDI	R19,0
    03B7 018A      MOVW	R16,R20
    03B8 940E0759  CALL	_strcmp
    03BA 3000      CPI	R16,0
    03BB 0701      CPC	R16,R17
    03BC F479      BNE	0x03CC
(0307) 	{
(0308) 		shiftEn=1;
    03BD E081      LDI	R24,1
    03BE 93800064  STS	0x64,R24
(0309) 		if(isACinc)
    03C0 90200065  LDS	R2,0x65
    03C2 2022      TST	R2
    03C3 F021      BEQ	0x03C8
(0310) 			write(0,0x07);
    03C4 E027      LDI	R18,7
    03C5 2700      CLR	R16
    03C6 DF00      RCALL	_write
    03C7 C134      RJMP	0x04FC
(0311) 		else
(0312) 			write(0,0x06);
    03C8 E026      LDI	R18,6
    03C9 2700      CLR	R16
    03CA DEFC      RCALL	_write
(0313) 	}
    03CB C130      RJMP	0x04FC
(0314) 	else if(!strcmp(str,"DIS_SHIFT"))	//disable shift
    03CC EE20      LDI	R18,0xE0
    03CD E030      LDI	R19,0
    03CE 018A      MOVW	R16,R20
    03CF 940E0759  CALL	_strcmp
    03D1 3000      CPI	R16,0
    03D2 0701      CPC	R16,R17
    03D3 F479      BNE	0x03E3
(0315) 	{
(0316) 		shiftEn=0;
    03D4 2422      CLR	R2
    03D5 92200064  STS	0x64,R2
(0317) 		if(isACinc)
    03D7 90200065  LDS	R2,0x65
    03D9 2022      TST	R2
    03DA F021      BEQ	0x03DF
(0318) 			write(0,0x05);
    03DB E025      LDI	R18,5
    03DC 2700      CLR	R16
    03DD DEE9      RCALL	_write
    03DE C11D      RJMP	0x04FC
(0319) 		else
(0320) 			write(0,0x04);
    03DF E024      LDI	R18,4
    03E0 2700      CLR	R16
    03E1 DEE5      RCALL	_write
(0321) 	}	
    03E2 C119      RJMP	0x04FC
(0322) /*--------------------------------------------------
(0323) dispEn & cursorEn & blinkEn共用一个命令设置
(0324) --------------------------------------------------*/
(0325) 	else if(!strcmp(str,"OPEN_LCD"))	//opern lcd
    03E3 ED27      LDI	R18,0xD7
    03E4 E030      LDI	R19,0
    03E5 018A      MOVW	R16,R20
    03E6 940E0759  CALL	_strcmp
    03E8 3000      CPI	R16,0
    03E9 0701      CPC	R16,R17
    03EA F4F9      BNE	0x040A
(0326) 	{
(0327) 		dispEn=1;
    03EB E081      LDI	R24,1
    03EC 93800061  STS	0x61,R24
(0328) 		if(cursorEn)
    03EE 90200062  LDS	R2,0x62
    03F0 2022      TST	R2
    03F1 F061      BEQ	0x03FE
(0329) 			if(blinkEn)
    03F2 90200063  LDS	R2,0x63
    03F4 2022      TST	R2
    03F5 F021      BEQ	0x03FA
(0330) 				write(0,0x0F);
    03F6 E02F      LDI	R18,0xF
    03F7 2700      CLR	R16
    03F8 DECE      RCALL	_write
    03F9 C102      RJMP	0x04FC
(0331) 			else
(0332) 				write(0,0x0E);
    03FA E02E      LDI	R18,0xE
    03FB 2700      CLR	R16
    03FC DECA      RCALL	_write
    03FD C0FE      RJMP	0x04FC
(0333) 		else
(0334) 			if(blinkEn)
    03FE 90200063  LDS	R2,0x63
    0400 2022      TST	R2
    0401 F021      BEQ	0x0406
(0335) 				write(0,0x0D);
    0402 E02D      LDI	R18,0xD
    0403 2700      CLR	R16
    0404 DEC2      RCALL	_write
    0405 C0F6      RJMP	0x04FC
(0336) 			else
(0337) 				write(0,0x0C);
    0406 E02C      LDI	R18,0xC
    0407 2700      CLR	R16
    0408 DEBE      RCALL	_write
(0338) 	}		
    0409 C0F2      RJMP	0x04FC
(0339) 	else if(!strcmp(str,"CLOSE_LCD"))	//close lcd
    040A EC2D      LDI	R18,0xCD
    040B E030      LDI	R19,0
    040C 018A      MOVW	R16,R20
    040D 940E0759  CALL	_strcmp
    040F 3000      CPI	R16,0
    0410 0701      CPC	R16,R17
    0411 F4F9      BNE	0x0431
(0340) 	{
(0341) 		dispEn=0;
    0412 2422      CLR	R2
    0413 92200061  STS	0x61,R2
(0342) 		if(cursorEn)
    0415 90200062  LDS	R2,0x62
    0417 2022      TST	R2
    0418 F061      BEQ	0x0425
(0343) 			if(blinkEn)
    0419 90200063  LDS	R2,0x63
    041B 2022      TST	R2
    041C F021      BEQ	0x0421
(0344) 				write(0,0x0B);
    041D E02B      LDI	R18,0xB
    041E 2700      CLR	R16
    041F DEA7      RCALL	_write
    0420 C0DB      RJMP	0x04FC
(0345) 			else
(0346) 				write(0,0x0A);
    0421 E02A      LDI	R18,0xA
    0422 2700      CLR	R16
    0423 DEA3      RCALL	_write
    0424 C0D7      RJMP	0x04FC
(0347) 		else
(0348) 			if(blinkEn)
    0425 90200063  LDS	R2,0x63
    0427 2022      TST	R2
    0428 F021      BEQ	0x042D
(0349) 				write(0,0x09);
    0429 E029      LDI	R18,0x9
    042A 2700      CLR	R16
    042B DE9B      RCALL	_write
    042C C0CF      RJMP	0x04FC
(0350) 			else
(0351) 				write(0,0x08);
    042D E028      LDI	R18,0x8
    042E 2700      CLR	R16
    042F DE97      RCALL	_write
(0352) 	}	
    0430 C0CB      RJMP	0x04FC
(0353) 	else if(!strcmp(str,"OPEN_CURS"))	//open cursor	
    0431 EC23      LDI	R18,0xC3
    0432 E030      LDI	R19,0
    0433 018A      MOVW	R16,R20
    0434 940E0759  CALL	_strcmp
    0436 3000      CPI	R16,0
    0437 0701      CPC	R16,R17
    0438 F4F9      BNE	0x0458
(0354) 	{
(0355) 		cursorEn=1;
    0439 E081      LDI	R24,1
    043A 93800062  STS	0x62,R24
(0356) 		if(dispEn)
    043C 90200061  LDS	R2,0x61
    043E 2022      TST	R2
    043F F061      BEQ	0x044C
(0357) 			if(blinkEn)
    0440 90200063  LDS	R2,0x63
    0442 2022      TST	R2
    0443 F021      BEQ	0x0448
(0358) 				write(0,0x0F);
    0444 E02F      LDI	R18,0xF
    0445 2700      CLR	R16
    0446 DE80      RCALL	_write
    0447 C0B4      RJMP	0x04FC
(0359) 			else
(0360) 				write(0,0x0E);
    0448 E02E      LDI	R18,0xE
    0449 2700      CLR	R16
    044A DE7C      RCALL	_write
    044B C0B0      RJMP	0x04FC
(0361) 		else
(0362) 			if(blinkEn)
    044C 90200063  LDS	R2,0x63
    044E 2022      TST	R2
    044F F021      BEQ	0x0454
(0363) 				write(0,0x0B);
    0450 E02B      LDI	R18,0xB
    0451 2700      CLR	R16
    0452 DE74      RCALL	_write
    0453 C0A8      RJMP	0x04FC
(0364) 			else
(0365) 				write(0,0x0A);
    0454 E02A      LDI	R18,0xA
    0455 2700      CLR	R16
    0456 DE70      RCALL	_write
(0366) 	}	
    0457 C0A4      RJMP	0x04FC
(0367) 	else if(!strcmp(str,"CLOSE_CURS"))	//close cursor
    0458 EB28      LDI	R18,0xB8
    0459 E030      LDI	R19,0
    045A 018A      MOVW	R16,R20
    045B 940E0759  CALL	_strcmp
    045D 3000      CPI	R16,0
    045E 0701      CPC	R16,R17
    045F F4F9      BNE	0x047F
(0368) 	{
(0369) 		cursorEn=0;
    0460 2422      CLR	R2
    0461 92200062  STS	0x62,R2
(0370) 		if(dispEn)
    0463 90200061  LDS	R2,0x61
    0465 2022      TST	R2
    0466 F061      BEQ	0x0473
(0371) 			if(blinkEn)
    0467 90200063  LDS	R2,0x63
    0469 2022      TST	R2
    046A F021      BEQ	0x046F
(0372) 				write(0,0x0D);
    046B E02D      LDI	R18,0xD
    046C 2700      CLR	R16
    046D DE59      RCALL	_write
    046E C08D      RJMP	0x04FC
(0373) 			else
(0374) 				write(0,0x0C);
    046F E02C      LDI	R18,0xC
    0470 2700      CLR	R16
    0471 DE55      RCALL	_write
    0472 C089      RJMP	0x04FC
(0375) 		else
(0376) 			if(blinkEn)
    0473 90200063  LDS	R2,0x63
    0475 2022      TST	R2
    0476 F021      BEQ	0x047B
(0377) 				write(0,0x09);
    0477 E029      LDI	R18,0x9
    0478 2700      CLR	R16
    0479 DE4D      RCALL	_write
    047A C081      RJMP	0x04FC
(0378) 			else
(0379) 				write(0,0x08);
    047B E028      LDI	R18,0x8
    047C 2700      CLR	R16
    047D DE49      RCALL	_write
(0380) 	}
    047E C07D      RJMP	0x04FC
(0381) 	else if(!strcmp(str,"EN_BLINK"))	//enable blink cursor
    047F EA2F      LDI	R18,0xAF
    0480 E030      LDI	R19,0
    0481 018A      MOVW	R16,R20
    0482 940E0759  CALL	_strcmp
    0484 3000      CPI	R16,0
    0485 0701      CPC	R16,R17
    0486 F4F9      BN

⌨️ 快捷键说明

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