📄 rd_lcd1602b.lis
字号:
022E ; ***********************************************************/
022E ; /*
022E ; void FlashStringGroup(UINT8 String[][17],UINT8 StringCounter,UINT8 X,UINT8 Y)
022E ; {
022E ; static UINT8 Pictures = 0;
022E ; static UINT8 DispState = 0;
022E ; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_STRING_GROUP_TIME_OUT)
022E ; > (LCD_FLASH_STRING_GROUP_TIME_OUT >> 1))
022E ; {
022E ; if (DispState == 0)
022E ; {
022E ; Pictures ++;
022E ; if (Pictures == StringCounter)
022E ; {
022E ; Pictures = 0;
022E ; }
022E ; DispState = 1;
022E ; }
022E ; }
022E ; else
022E ; {
022E ; if (DispState == 1)
022E ; {
022E ; Pictures ++;
022E ; if (Pictures == StringCounter)
022E ; {
022E ; Pictures = 0;
022E ; }
022E ; DispState = 0;
022E ; }
022E ; }
022E ;
022E ; LOCATE(X,Y);
022E ; PRINT(String[Pictures]);
022E ; }
022E ; */
022E ;
022E ; /***********************************************************
022E ; * 函数说明:数值显示函数 *
022E ; * 输入: 要显示的整数 *
022E ; * 输出: 无 *
022E ; * 调用函数:无 *
022E ; ***********************************************************/
022E ; void PrintD(INT32 nNumber,UINT8 chCounter)
022E ; {
022E .dbline 613
022E ; uint8 cTempBuff[10] = {0};
022E 80E0 ldi R24,<L36
0230 90E0 ldi R25,>L36
0232 FE01 movw R30,R28
0234 3596 adiw R30,5
0236 0AE0 ldi R16,10
0238 10E0 ldi R17,0
023A FA93 st -y,R31
023C EA93 st -y,R30
023E 9A93 st -y,R25
0240 8A93 st -y,R24
0242 00D0 rcall asgncblk
0244 .dbline 614
0244 ; uint8 n = 0;
0244 .dbline 615
0244 ; uint32 wTempNumber = ABS(nNumber);
0244 80E0 ldi R24,0
0246 90E0 ldi R25,0
0248 A0E0 ldi R26,0
024A B0E0 ldi R27,0
024C 298C ldd R2,y+25
024E 3A8C ldd R3,y+26
0250 4B8C ldd R4,y+27
0252 5C8C ldd R5,y+28
0254 2816 cp R2,R24
0256 3906 cpc R3,R25
0258 4A06 cpc R4,R26
025A 5B06 cpc R5,R27
025C 44F4 brge L37
025E X7:
025E 8101 movw R16,R2
0260 9201 movw R18,R4
0262 00D0 rcall neg32
0264 0F87 std y+15,R16
0266 188B std y+16,R17
0268 298B std y+17,R18
026A 3A8B std y+18,R19
026C 08C0 rjmp L38
026E L37:
026E 298C ldd R2,y+25
0270 3A8C ldd R3,y+26
0272 4B8C ldd R4,y+27
0274 5C8C ldd R5,y+28
0276 2F86 std y+15,R2
0278 388A std y+16,R3
027A 498A std y+17,R4
027C 5A8A std y+18,R5
027E L38:
027E 2F84 ldd R2,y+15
0280 3888 ldd R3,y+16
0282 4988 ldd R4,y+17
0284 5A88 ldd R5,y+18
0286 2982 std y+1,R2
0288 3A82 std y+2,R3
028A 4B82 std y+3,R4
028C 5C82 std y+4,R5
028E .dbline 616
028E ; BOOL bIfFindFirstNoneZeroNumber = FALSE;
028E .dbline 618
028E ;
028E ; if (nNumber < 0)
028E 80E0 ldi R24,0
0290 90E0 ldi R25,0
0292 A0E0 ldi R26,0
0294 B0E0 ldi R27,0
0296 298C ldd R2,y+25
0298 3A8C ldd R3,y+26
029A 4B8C ldd R4,y+27
029C 5C8C ldd R5,y+28
029E 2816 cp R2,R24
02A0 3906 cpc R3,R25
02A2 4A06 cpc R4,R26
02A4 5B06 cpc R5,R27
02A6 1CF4 brge L39
02A8 X8:
02A8 .dbline 619
02A8 ; {
02A8 .dbline 620
02A8 ; PRINT("-")
02A8 00E0 ldi R16,<L41
02AA 10E0 ldi R17,>L41
02AC 7ADF rcall _LCDDisplayString
02AE .dbline 623
02AE ; //s_cDISPBuffer[g_cStartBIT] = MID_LINE;
02AE ; //g_cStartBIT--;
02AE ; }
02AE L39:
02AE .dbline 626
02AE ;
02AE ;
02AE ; for (n = 9;n > 0;n--)
02AE 49E0 ldi R20,9
02B0 26C0 rjmp L45
02B2 L42:
02B2 .dbline 627
02B2 ; {
02B2 .dbline 628
02B2 ; cTempBuff[n] = (wTempNumber % 10);
02B2 8AE0 ldi R24,10
02B4 90E0 ldi R25,0
02B6 A0E0 ldi R26,0
02B8 B0E0 ldi R27,0
02BA 0981 ldd R16,y+1
02BC 1A81 ldd R17,y+2
02BE 2B81 ldd R18,y+3
02C0 3C81 ldd R19,y+4
02C2 BA93 st -y,R27
02C4 AA93 st -y,R26
02C6 9A93 st -y,R25
02C8 8A93 st -y,R24
02CA 00D0 rcall mod32u
02CC CE01 movw R24,R28
02CE 0596 adiw R24,5
02D0 E42F mov R30,R20
02D2 FF27 clr R31
02D4 E80F add R30,R24
02D6 F91F adc R31,R25
02D8 0083 std z+0,R16
02DA .dbline 629
02DA ; wTempNumber /= 10;
02DA 8AE0 ldi R24,10
02DC 90E0 ldi R25,0
02DE A0E0 ldi R26,0
02E0 B0E0 ldi R27,0
02E2 0981 ldd R16,y+1
02E4 1A81 ldd R17,y+2
02E6 2B81 ldd R18,y+3
02E8 3C81 ldd R19,y+4
02EA BA93 st -y,R27
02EC AA93 st -y,R26
02EE 9A93 st -y,R25
02F0 8A93 st -y,R24
02F2 00D0 rcall div32u
02F4 0983 std y+1,R16
02F6 1A83 std y+2,R17
02F8 2B83 std y+3,R18
02FA 3C83 std y+4,R19
02FC .dbline 630
02FC ; }
02FC L43:
02FC .dbline 626
02FC 4A95 dec R20
02FE L45:
02FE .dbline 626
02FE 4423 tst R20
0300 C1F6 brne L42
0302 X9:
0302 .dbline 632
0302 ;
0302 ; if (chCounter)
0302 6623 tst R22
0304 11F0 breq L46
0306 X10:
0306 .dbline 633
0306 ; {
0306 .dbline 634
0306 ; bIfFindFirstNoneZeroNumber = TRUE;
0306 41E0 ldi R20,1
0308 .dbline 635
0308 ; }
0308 02C0 rjmp L47
030A L46:
030A .dbline 637
030A ; else
030A ; {
030A .dbline 638
030A ; chCounter = UBOUND(cTempBuff);
030A 6AE0 ldi R22,10
030C .dbline 639
030C ; bIfFindFirstNoneZeroNumber = FALSE;
030C 4427 clr R20
030E .dbline 640
030E ; }
030E L47:
030E .dbline 642
030E ;
030E ; chCounter = MIN(chCounter,UBOUND(cTempBuff));
030E 6A30 cpi R22,10
0310 18F4 brsh L48
0312 X11:
0312 A62E mov R10,R22
0314 BB24 clr R11
0316 03C0 rjmp L49
0318 L48:
0318 8AE0 ldi R24,10
031A 90E0 ldi R25,0
031C 5C01 movw R10,R24
031E L49:
031E .dbline 644
031E ;
031E ; for (n = UBOUND(cTempBuff) - chCounter;n < UBOUND(cTempBuff);n++)
031E 8AE0 ldi R24,10
0320 8A19 sub R24,R10
0322 682F mov R22,R24
0324 28C0 rjmp L53
0326 L50:
0326 .dbline 645
0326 ; {
0326 .dbline 646
0326 ; if (cTempBuff[n])
0326 CE01 movw R24,R28
0328 0596 adiw R24,5
032A E62F mov R30,R22
032C FF27 clr R31
032E E80F add R30,R24
0330 F91F adc R31,R25
0332 2080 ldd R2,z+0
0334 2220 tst R2
0336 79F0 breq L54
0338 X12:
0338 .dbline 647
0338 ; {
0338 .dbline 648
0338 ; PRINTN(cTempBuff[n],1);
0338 81E0 ldi R24,1
033A 8883 std y+0,R24
033C CE01 movw R24,R28
033E 0596 adiw R24,5
0340 E62F mov R30,R22
0342 FF27 clr R31
0344 E80F add R30,R24
0346 F91F adc R31,R25
0348 0081 ldd R16,z+0
034A 1127 clr R17
034C 2227 clr R18
034E 3327 clr R19
0350 39DF rcall _LCDDisplayNum
0352 .dbline 648
0352 .dbline 651
0352 ; //s_cDISPBuffer[g_cStartBIT] = cTempBuff[n];
0352 ; //g_cStartBIT--;
0352 ; bIfFindFirstNoneZeroNumber = TRUE;
0352 41E0 ldi R20,1
0354 .dbline 652
0354 ; }
0354 0FC0 rjmp L55
0356 L54:
0356 .dbline 653
0356 ; else if (bIfFindFirstNoneZeroNumber)
0356 4423 tst R20
0358 69F0 breq L56
035A X13:
035A .dbline 654
035A ; {
035A .dbline 655
035A ; PRINTN(cTempBuff[n],1);
035A 81E0 ldi R24,1
035C 8883 std y+0,R24
035E CE01 movw R24,R28
0360 0596 adiw R24,5
0362 E62F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -