📄 lcd1602.lst
字号:
(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 + -