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