cycle.lst
来自「ATmega16应用例子」· LST 代码 · 共 2,013 行 · 第 1/5 页
LST
2,013 行
(0250) uint8 i;
(0251) write(0,0x40+adr*8);
0349 E088 LDI R24,0x8
034A 9F84 MUL R24,R20
034B 2D20 MOV R18,R0
034C 5C20 SUBI R18,0xC0
034D 2700 CLR R16
034E DF6A RCALL _write
(0252) for(i=0;i<8;i++)
034F 2744 CLR R20
0350 C008 RJMP 0x0359
(0253) write(1,buf[i]);
0351 2FE4 MOV R30,R20
0352 27FF CLR R31
0353 0FE6 ADD R30,R22
0354 1FF7 ADC R31,R23
0355 9124 LPM R18,0(Z)
0356 E001 LDI R16,1
0357 DF61 RCALL _write
0358 9543 INC R20
0359 3048 CPI R20,0x8
035A F3B0 BCS 0x0351
035B 940E07C8 CALL pop_gset2
035D 9508 RET
_LCD1602_setCmd:
str --> R20
035E 940E07D9 CALL push_gset1
0360 01A8 MOVW R20,R16
(0254) /* 不得采样下面写法,因为传入的是数组,最后一个不是'\0' */
(0255) //while(*buf)
(0256) //write(1,*buf++);
(0257) }
(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
0361 E025 LDI R18,5
0362 E031 LDI R19,1
0363 018A MOVW R16,R20
0364 940E0715 CALL _strcmp
0366 3000 CPI R16,0
0367 0701 CPC R16,R17
0368 F421 BNE 0x036D
(0283) write(0,0x01);
0369 E021 LDI R18,1
036A 2700 CLR R16
036B DF4D RCALL _write
036C C181 RJMP 0x04EE
(0284)
(0285) else if(!strcmp(str,"GO_HOME")) //set AC go home
036D EF2D LDI R18,0xFD
036E E030 LDI R19,0
036F 018A MOVW R16,R20
0370 940E0715 CALL _strcmp
0372 3000 CPI R16,0
0373 0701 CPC R16,R17
0374 F421 BNE 0x0379
(0286) write(0,0x02);
0375 E022 LDI R18,2
0376 2700 CLR R16
0377 DF41 RCALL _write
0378 C175 RJMP 0x04EE
(0287) /*--------------------------------------------------
(0288) isACinc & shiftEn 共用一个命令设置
(0289) --------------------------------------------------*/
(0290) else if(!strcmp(str,"INC_AC")) //set AC as inc mode
0379 EF26 LDI R18,0xF6
037A E030 LDI R19,0
037B 018A MOVW R16,R20
037C 940E0715 CALL _strcmp
037E 3000 CPI R16,0
037F 0701 CPC R16,R17
0380 F479 BNE 0x0390
(0291) {
(0292) isACinc=1;
0381 E081 LDI R24,1
0382 93800065 STS isACinc,R24
(0293) if(shiftEn)
0384 90200064 LDS R2,shiftEn
0386 2022 TST R2
0387 F021 BEQ 0x038C
(0294) write(0,0x07);
0388 E027 LDI R18,7
0389 2700 CLR R16
038A DF2E RCALL _write
038B C162 RJMP 0x04EE
(0295) else
(0296) write(0,0x06);
038C E026 LDI R18,6
038D 2700 CLR R16
038E DF2A RCALL _write
(0297) }
038F C15E RJMP 0x04EE
(0298) else if(!strcmp(str,"DEC_AC")) //set AC as dec mode
0390 EE2F LDI R18,0xEF
0391 E030 LDI R19,0
0392 018A MOVW R16,R20
0393 940E0715 CALL _strcmp
0395 3000 CPI R16,0
0396 0701 CPC R16,R17
0397 F479 BNE 0x03A7
(0299) {
(0300) isACinc=0;
0398 2422 CLR R2
0399 92200065 STS isACinc,R2
(0301) if(shiftEn)
039B 90200064 LDS R2,shiftEn
039D 2022 TST R2
039E F021 BEQ 0x03A3
(0302) write(0,0x05);
039F E025 LDI R18,5
03A0 2700 CLR R16
03A1 DF17 RCALL _write
03A2 C14B RJMP 0x04EE
(0303) else
(0304) write(0,0x04);
03A3 E024 LDI R18,4
03A4 2700 CLR R16
03A5 DF13 RCALL _write
(0305) }
03A6 C147 RJMP 0x04EE
(0306) else if(!strcmp(str,"EN_SHIFT")) //enable shift
03A7 EE26 LDI R18,0xE6
03A8 E030 LDI R19,0
03A9 018A MOVW R16,R20
03AA 940E0715 CALL _strcmp
03AC 3000 CPI R16,0
03AD 0701 CPC R16,R17
03AE F479 BNE 0x03BE
(0307) {
(0308) shiftEn=1;
03AF E081 LDI R24,1
03B0 93800064 STS shiftEn,R24
(0309) if(isACinc)
03B2 90200065 LDS R2,isACinc
03B4 2022 TST R2
03B5 F021 BEQ 0x03BA
(0310) write(0,0x07);
03B6 E027 LDI R18,7
03B7 2700 CLR R16
03B8 DF00 RCALL _write
03B9 C134 RJMP 0x04EE
(0311) else
(0312) write(0,0x06);
03BA E026 LDI R18,6
03BB 2700 CLR R16
03BC DEFC RCALL _write
(0313) }
03BD C130 RJMP 0x04EE
(0314) else if(!strcmp(str,"DIS_SHIFT")) //disable shift
03BE ED2C LDI R18,0xDC
03BF E030 LDI R19,0
03C0 018A MOVW R16,R20
03C1 940E0715 CALL _strcmp
03C3 3000 CPI R16,0
03C4 0701 CPC R16,R17
03C5 F479 BNE 0x03D5
(0315) {
(0316) shiftEn=0;
03C6 2422 CLR R2
03C7 92200064 STS shiftEn,R2
(0317) if(isACinc)
03C9 90200065 LDS R2,isACinc
03CB 2022 TST R2
03CC F021 BEQ 0x03D1
(0318) write(0,0x05);
03CD E025 LDI R18,5
03CE 2700 CLR R16
03CF DEE9 RCALL _write
03D0 C11D RJMP 0x04EE
(0319) else
(0320) write(0,0x04);
03D1 E024 LDI R18,4
03D2 2700 CLR R16
03D3 DEE5 RCALL _write
(0321) }
03D4 C119 RJMP 0x04EE
(0322) /*--------------------------------------------------
(0323) dispEn & cursorEn & blinkEn共用一个命令设置
(0324) --------------------------------------------------*/
(0325) else if(!strcmp(str,"OPEN_LCD")) //opern lcd
03D5 ED23 LDI R18,0xD3
03D6 E030 LDI R19,0
03D7 018A MOVW R16,R20
03D8 940E0715 CALL _strcmp
03DA 3000 CPI R16,0
03DB 0701 CPC R16,R17
03DC F4F9 BNE 0x03FC
(0326) {
(0327) dispEn=1;
03DD E081 LDI R24,1
03DE 93800061 STS dispEn,R24
(0328) if(cursorEn)
03E0 90200062 LDS R2,cursorEn
03E2 2022 TST R2
03E3 F061 BEQ 0x03F0
(0329) if(blinkEn)
03E4 90200063 LDS R2,blinkEn
03E6 2022 TST R2
03E7 F021 BEQ 0x03EC
(0330) write(0,0x0F);
03E8 E02F LDI R18,0xF
03E9 2700 CLR R16
03EA DECE RCALL _write
03EB C102 RJMP 0x04EE
(0331) else
(0332) write(0,0x0E);
03EC E02E LDI R18,0xE
03ED 2700 CLR R16
03EE DECA RCALL _write
03EF C0FE RJMP 0x04EE
(0333) else
(0334) if(blinkEn)
03F0 90200063 LDS R2,blinkEn
03F2 2022 TST R2
03F3 F021 BEQ 0x03F8
(0335) write(0,0x0D);
03F4 E02D LDI R18,0xD
03F5 2700 CLR R16
03F6 DEC2 RCALL _write
03F7 C0F6 RJMP 0x04EE
(0336) else
(0337) write(0,0x0C);
03F8 E02C LDI R18,0xC
03F9 2700 CLR R16
03FA DEBE RCALL _write
(0338) }
03FB C0F2 RJMP 0x04EE
(0339) else if(!strcmp(str,"CLOSE_LCD")) //close lcd
03FC EC29 LDI R18,0xC9
03FD E030 LDI R19,0
03FE 018A MOVW R16,R20
03FF 940E0715 CALL _strcmp
0401 3000 CPI R16,0
0402 0701 CPC R16,R17
0403 F4F9 BNE 0x0423
(0340) {
(0341) dispEn=0;
0404 2422 CLR R2
0405 92200061 STS dispEn,R2
(0342) if(cursorEn)
0407 90200062 LDS R2,cursorEn
0409 2022 TST R2
040A F061 BEQ 0x0417
(0343) if(blinkEn)
040B 90200063 LDS R2,blinkEn
040D 2022 TST R2
040E F021 BEQ 0x0413
(0344) write(0,0x0B);
040F E02B LDI R18,0xB
0410 2700 CLR R16
0411 DEA7 RCALL _write
0412 C0DB RJMP 0x04EE
(0345) else
(0346) write(0,0x0A);
0413 E02A LDI R18,0xA
0414 2700 CLR R16
0415 DEA3 RCALL _write
0416 C0D7 RJMP 0x04EE
(0347) else
(0348) if(blinkEn)
0417 90200063 LDS R2,blinkEn
0419 2022 TST R2
041A F021 BEQ 0x041F
(0349) write(0,0x09);
041B E029 LDI R18,0x9
041C 2700 CLR R16
041D DE9B RCALL _write
041E C0CF RJMP 0x04EE
(0350) else
(0351) write(0,0x08);
041F E028 LDI R18,0x8
0420 2700 CLR R16
0421 DE97 RCALL _write
(0352) }
0422 C0CB RJMP 0x04EE
(0353) else if(!strcmp(str,"OPEN_CURS")) //open cursor
0423 EB2F LDI R18,0xBF
0424 E030 LDI R19,0
0425 018A MOVW R16,R20
0426 940E0715 CALL _strcmp
0428 3000 CPI R16,0
0429 0701 CPC R16,R17
042A F4F9 BNE 0x044A
(0354) {
(0355) cursorEn=1;
042B E081 LDI R24,1
042C 93800062 STS cursorEn,R24
(0356) if(dispEn)
042E 90200061 LDS R2,dispEn
0430 2022 TST R2
0431 F061 BEQ 0x043E
(0357) if(blinkEn)
0432 90200063 LDS R2,blinkEn
0434 2022 TST R2
0435 F021 BEQ 0x043A
(0358) write(0,0x0F);
0436 E02F LDI R18,0xF
0437 2700 CLR R16
0438 DE80 RCALL _write
0439 C0B4 RJMP 0x04EE
(0359) else
(0360) write(0,0x0E);
043A E02E LDI R18,0xE
043B 2700 CLR R16
043C DE7C RCALL _write
043D C0B0 RJMP 0x04EE
(0361) else
(0362) if(blinkEn)
043E 90200063 LDS R2,blinkEn
0440 2022 TST R2
0441 F021 BEQ 0x0446
(0363) write(0,0x0B);
0442 E02B LDI R18,0xB
0443 2700 CLR R16
0444 DE74 RCALL _write
0445 C0A8 RJMP 0x04EE
(0364) else
(0365) write(0,0x0A);
0446 E02A LDI R18,0xA
0447 2700 CLR R16
0448 DE70 RCALL _write
(0366) }
0449 C0A4 RJMP 0x04EE
(0367) else if(!strcmp(str,"CLOSE_CURS")) //close cursor
044A EB24 LDI R18,0xB4
044B E030 LDI R19,0
044C 018A MOVW R16,R20
044D 940E0715 CALL _strcmp
044F 3000 CPI R16,0
0450 0701 CPC R16,R17
0451 F4F9 BNE 0x0471
(0368) {
(0369) cursorEn=0;
0452 2422 CLR R2
0453 92200062 STS cursorEn,R2
(0370) if(dispEn)
0455 90200061 LDS R2,dispEn
0457 2022 TST R2
0458 F061 BEQ 0x0465
(0371) if(blinkEn)
0459 90200063 LDS R2,blinkEn
045B 2022 TST R2
045C F021 BEQ 0x0461
(0372) write(0,0x0D);
045D E02D LDI R18,0xD
045E 2700 CLR R16
045F DE59 RCALL _write
0460 C08D RJMP 0x04EE
(0373) else
(0374) write(0,0x0C);
0461 E02C LDI R18,0xC
0462 2700 CLR R16
0463 DE55 RCALL _write
0464 C089 RJMP 0x04EE
(0375) else
(0376) if(blinkEn)
0465 90200063 LDS R2,blinkEn
0467 2022 TST R2
0468 F021 BEQ 0x046D
(0377) write(0,0x09);
0469 E029 LDI R18,0x9
046A 2700 CLR R16
046B DE4D RCALL _write
046C C081 RJMP 0x04EE
(0378) else
(0379) write(0,0x08);
046D E028 LDI R18,0x8
046E 2700 CLR R16
046F DE49 RCALL _write
(0380) }
0470 C07D RJMP 0x04EE
(0381) else if(!strcmp(str,"EN_BLINK")) //enable blink cursor
0471 EA2B LDI R18,0xAB
0472 E030 LDI R19,0
0473 018A MOVW R16,R20
0474 940E0715 CALL _strcmp
0476 3000 CPI R16,0
0477 0701 CPC R16,R17
0
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?