📄 2x8_key.lss
字号:
9c6: 01 96 adiw r24, 0x01 ; 1
9c8: 48 17 cp r20, r24
9ca: 59 07 cpc r21, r25
9cc: fc f4 brge .+62 ; 0xa0c <RunString+0x212>
{
Screen[a] = String[Point];
9ce: 88 8d ldd r24, Y+24 ; 0x18
9d0: 28 2f mov r18, r24
9d2: 33 27 eor r19, r19
9d4: ce 01 movw r24, r28
9d6: 01 96 adiw r24, 0x01 ; 1
9d8: 82 0f add r24, r18
9da: 93 1f adc r25, r19
9dc: dc 01 movw r26, r24
9de: 16 96 adiw r26, 0x06 ; 6
9e0: 89 8d ldd r24, Y+25 ; 0x19
9e2: 28 2f mov r18, r24
9e4: 33 27 eor r19, r19
9e6: 89 81 ldd r24, Y+1 ; 0x01
9e8: 9a 81 ldd r25, Y+2 ; 0x02
9ea: f9 01 movw r30, r18
9ec: e8 0f add r30, r24
9ee: f9 1f adc r31, r25
9f0: 80 81 ld r24, Z
9f2: 8c 93 st X, r24
Point ++;
9f4: 89 8d ldd r24, Y+25 ; 0x19
9f6: 8f 5f subi r24, 0xFF ; 255
9f8: 89 8f std Y+25, r24 ; 0x19
if (Point == StringLong) //如果字符串长度小于Endx-Startx+1,循环显示,类似以圆环
9fa: 99 8d ldd r25, Y+25 ; 0x19
9fc: 8a 8d ldd r24, Y+26 ; 0x1a
9fe: 98 17 cp r25, r24
a00: 09 f4 brne .+2 ; 0xa04 <RunString+0x20a>
{ //eg. startendstartendstartend......
Point = 0;
a02: 19 8e std Y+25, r1 ; 0x19
a04: 88 8d ldd r24, Y+24 ; 0x18
a06: 8f 5f subi r24, 0xFF ; 255
a08: 88 8f std Y+24, r24 ; 0x18
a0a: d2 cf rjmp .-92 ; 0x9b0 <RunString+0x1b6>
}
}
for (;a < 17;a++)
a0c: 88 8d ldd r24, Y+24 ; 0x18
a0e: 81 31 cpi r24, 0x11 ; 17
a10: 78 f4 brcc .+30 ; 0xa30 <RunString+0x236>
{
Screen[a] =' ';
a12: 88 8d ldd r24, Y+24 ; 0x18
a14: 28 2f mov r18, r24
a16: 33 27 eor r19, r19
a18: ce 01 movw r24, r28
a1a: 01 96 adiw r24, 0x01 ; 1
a1c: 82 0f add r24, r18
a1e: 93 1f adc r25, r19
a20: fc 01 movw r30, r24
a22: 36 96 adiw r30, 0x06 ; 6
a24: 80 e2 ldi r24, 0x20 ; 32
a26: 80 83 st Z, r24
a28: 88 8d ldd r24, Y+24 ; 0x18
a2a: 8f 5f subi r24, 0xFF ; 255
a2c: 88 8f std Y+24, r24 ; 0x18
a2e: ee cf rjmp .-36 ; 0xa0c <RunString+0x212>
}
RunTimeCounter ++;
a30: 80 91 61 00 lds r24, 0x0061
a34: 90 91 62 00 lds r25, 0x0062
a38: 01 96 adiw r24, 0x01 ; 1
a3a: 90 93 62 00 sts 0x0062, r25
a3e: 80 93 61 00 sts 0x0061, r24
if ((RunTimeCounter % RunStringSpeed) > (RunStringSpeed >>1) )//滚动频率为为(RunStringSpeed/2)*8ms
a42: 80 91 61 00 lds r24, 0x0061
a46: 90 91 62 00 lds r25, 0x0062
a4a: 2a ef ldi r18, 0xFA ; 250
a4c: 30 e0 ldi r19, 0x00 ; 0
a4e: b9 01 movw r22, r18
a50: 0e 94 82 07 call 0xf04 <__udivmodhi4>
a54: 8e 37 cpi r24, 0x7E ; 126
a56: 91 05 cpc r25, r1
a58: 80 f0 brcs .+32 ; 0xa7a <RunString+0x280>
{
StringHead --;//向右滚动
a5a: 80 91 60 00 lds r24, 0x0060
a5e: 81 50 subi r24, 0x01 ; 1
a60: 80 93 60 00 sts 0x0060, r24
RunTimeCounter = 0;
a64: 10 92 62 00 sts 0x0062, r1
a68: 10 92 61 00 sts 0x0061, r1
if (StringHead == 0xff)//因为StringHead--后变成0xff所以要调整成StringLong,字符串的最后一个字符号
a6c: 80 91 60 00 lds r24, 0x0060
a70: 8f 3f cpi r24, 0xFF ; 255
a72: 19 f4 brne .+6 ; 0xa7a <RunString+0x280>
{
StringHead = StringLong;
a74: 8a 8d ldd r24, Y+26 ; 0x1a
a76: 80 93 60 00 sts 0x0060, r24
}
}
LCM1602Write_String(StartX,Y, Screen);
a7a: ce 01 movw r24, r28
a7c: 07 96 adiw r24, 0x07 ; 7
a7e: ac 01 movw r20, r24
a80: 6d 81 ldd r22, Y+5 ; 0x05
a82: 8b 81 ldd r24, Y+3 ; 0x03
a84: 0e 94 95 03 call 0x72a <LCM1602Write_String>
a88: a6 96 adiw r28, 0x26 ; 38
a8a: 0f b6 in r0, 0x3f ; 63
a8c: f8 94 cli
a8e: de bf out 0x3e, r29 ; 62
a90: 0f be out 0x3f, r0 ; 63
a92: cd bf out 0x3d, r28 ; 61
a94: df 91 pop r29
a96: cf 91 pop r28
a98: 0f 91 pop r16
a9a: 08 95 ret
00000a9c <StringLength>:
}
}
//字符串长度测试函数
unsigned char StringLength(uchar *String)
{
a9c: cf 93 push r28
a9e: df 93 push r29
aa0: cd b7 in r28, 0x3d ; 61
aa2: de b7 in r29, 0x3e ; 62
aa4: 23 97 sbiw r28, 0x03 ; 3
aa6: 0f b6 in r0, 0x3f ; 63
aa8: f8 94 cli
aaa: de bf out 0x3e, r29 ; 62
aac: 0f be out 0x3f, r0 ; 63
aae: cd bf out 0x3d, r28 ; 61
ab0: 9a 83 std Y+2, r25 ; 0x02
ab2: 89 83 std Y+1, r24 ; 0x01
uchar n = 0;
ab4: 1b 82 std Y+3, r1 ; 0x03
while (*String)//不到字符末尾不退出循环
ab6: e9 81 ldd r30, Y+1 ; 0x01
ab8: fa 81 ldd r31, Y+2 ; 0x02
aba: 80 81 ld r24, Z
abc: 88 23 and r24, r24
abe: 49 f0 breq .+18 ; 0xad2 <StringLength+0x36>
{
n++;
ac0: 8b 81 ldd r24, Y+3 ; 0x03
ac2: 8f 5f subi r24, 0xFF ; 255
ac4: 8b 83 std Y+3, r24 ; 0x03
String ++;
ac6: 89 81 ldd r24, Y+1 ; 0x01
ac8: 9a 81 ldd r25, Y+2 ; 0x02
aca: 01 96 adiw r24, 0x01 ; 1
acc: 9a 83 std Y+2, r25 ; 0x02
ace: 89 83 std Y+1, r24 ; 0x01
ad0: f2 cf rjmp .-28 ; 0xab6 <StringLength+0x1a>
}
return n;
ad2: 8b 81 ldd r24, Y+3 ; 0x03
ad4: 99 27 eor r25, r25
ad6: 23 96 adiw r28, 0x03 ; 3
ad8: 0f b6 in r0, 0x3f ; 63
ada: f8 94 cli
adc: de bf out 0x3e, r29 ; 62
ade: 0f be out 0x3f, r0 ; 63
ae0: cd bf out 0x3d, r28 ; 61
ae2: df 91 pop r29
ae4: cf 91 pop r28
ae6: 08 95 ret
00000ae8 <Flash>:
}
//闪烁显示函数
void Flash(uchar *String,uchar *Icon,uchar X,uchar Y)
{
ae8: cf 93 push r28
aea: df 93 push r29
aec: cd b7 in r28, 0x3d ; 61
aee: de b7 in r29, 0x3e ; 62
af0: 62 97 sbiw r28, 0x12 ; 18
af2: 0f b6 in r0, 0x3f ; 63
af4: f8 94 cli
af6: de bf out 0x3e, r29 ; 62
af8: 0f be out 0x3f, r0 ; 63
afa: cd bf out 0x3d, r28 ; 61
afc: 9a 83 std Y+2, r25 ; 0x02
afe: 89 83 std Y+1, r24 ; 0x01
b00: 7c 83 std Y+4, r23 ; 0x04
b02: 6b 83 std Y+3, r22 ; 0x03
b04: 4d 83 std Y+5, r20 ; 0x05
b06: 2e 83 std Y+6, r18 ; 0x06
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
b08: 80 e0 ldi r24, 0x00 ; 0
b0a: 90 e0 ldi r25, 0x00 ; 0
b0c: a0 e0 ldi r26, 0x00 ; 0
b0e: b1 e4 ldi r27, 0x41 ; 65
b10: 8f 83 std Y+7, r24 ; 0x07
b12: 98 87 std Y+8, r25 ; 0x08
b14: a9 87 std Y+9, r26 ; 0x09
b16: ba 87 std Y+10, r27 ; 0x0a
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
b18: 26 e6 ldi r18, 0x66 ; 102
b1a: 36 e6 ldi r19, 0x66 ; 102
b1c: 46 ee ldi r20, 0xE6 ; 230
b1e: 54 e4 ldi r21, 0x44 ; 68
b20: 6f 81 ldd r22, Y+7 ; 0x07
b22: 78 85 ldd r23, Y+8 ; 0x08
b24: 89 85 ldd r24, Y+9 ; 0x09
b26: 9a 85 ldd r25, Y+10 ; 0x0a
b28: 0e 94 0e 07 call 0xe1c <__mulsf3>
b2c: dc 01 movw r26, r24
b2e: cb 01 movw r24, r22
b30: 8d 87 std Y+13, r24 ; 0x0d
b32: 9e 87 std Y+14, r25 ; 0x0e
b34: af 87 std Y+15, r26 ; 0x0f
b36: b8 8b std Y+16, r27 ; 0x10
if (__tmp < 1.0)
b38: 20 e0 ldi r18, 0x00 ; 0
b3a: 30 e0 ldi r19, 0x00 ; 0
b3c: 40 e8 ldi r20, 0x80 ; 128
b3e: 5f e3 ldi r21, 0x3F ; 63
b40: 6d 85 ldd r22, Y+13 ; 0x0d
b42: 7e 85 ldd r23, Y+14 ; 0x0e
b44: 8f 85 ldd r24, Y+15 ; 0x0f
b46: 98 89 ldd r25, Y+16 ; 0x10
b48: 0e 94 be 06 call 0xd7c <__eqsf2>
b4c: 88 23 and r24, r24
b4e: 0c f0 brlt .+2 ; 0xb52 <Flash+0x6a>
b50: 05 c0 rjmp .+10 ; 0xb5c <Flash+0x74>
__ticks = 1;
b52: 81 e0 ldi r24, 0x01 ; 1
b54: 90 e0 ldi r25, 0x00 ; 0
b56: 9c 87 std Y+12, r25 ; 0x0c
b58: 8b 87 std Y+11, r24 ; 0x0b
b5a: 1a c0 rjmp .+52 ; 0xb90 <Flash+0xa8>
else if (__tmp > 65535)
b5c: 20 e0 ldi r18, 0x00 ; 0
b5e: 3f ef ldi r19, 0xFF ; 255
b60: 4f e7 ldi r20, 0x7F ; 127
b62: 57 e4 ldi r21, 0x47 ; 71
b64: 6d 85 ldd r22, Y+13 ; 0x0d
b66: 7e 85 ldd r23, Y+14 ; 0x0e
b68: 8f 85 ldd r24, Y+15 ; 0x0f
b6a: 98 89 ldd r25, Y+16 ; 0x10
b6c: 0e 94 c1 06 call 0xd82 <__gesf2>
b70: 18 16 cp r1, r24
b72: 0c f0 brlt .+2 ; 0xb76 <Flash+0x8e>
b74: 03 c0 rjmp .+6 ; 0xb7c <Flash+0x94>
__ticks = 0; /* i.e. 65536 */
b76: 1c 86 std Y+12, r1 ; 0x0c
b78: 1b 86 std Y+11, r1 ; 0x0b
b7a: 0a c0 rjmp .+20 ; 0xb90 <Flash+0xa8>
else
__ticks = (uint16_t)__tmp;
b7c: 6d 85 ldd r22, Y+13 ; 0x0d
b7e: 7e 85 ldd r23, Y+14 ; 0x0e
b80: 8f 85 ldd r24, Y+15 ; 0x0f
b82: 98 89 ldd r25, Y+16 ; 0x10
b84: 0e 94 a3 06 call 0xd46 <__fixsfsi>
b88: dc 01 movw r26, r24
b8a: cb 01 movw r24, r22
b8c: 9c 87 std Y+12, r25 ; 0x0c
b8e: 8b 87 std Y+11, r24 ; 0x0b
b90: 8b 85 ldd r24, Y+11 ; 0x0b
b92: 9c 85 ldd r25, Y+12 ; 0x0c
b94: 9a 8b std Y+18, r25 ; 0x12
b96: 89 8b std Y+17, r24 ; 0x11
b98: 89 89 ldd r24, Y+17 ; 0x11
b9a: 9a 89 ldd r25, Y+18 ; 0x12
b9c: 01 97 sbiw r24, 0x01 ; 1
b9e: f1 f7 brne .-4 ; 0xb9c <Flash+0xb4>
ba0: 9a 8b std Y+18, r25 ; 0x12
ba2: 89 8b std Y+17, r24 ; 0x11
// unsigned char a = 0;
// unsigned char StringLong = StringLength(String);//字符串的长度
static uchar FlashTimeCounter = 0;
_delay_ms(8);
FlashTimeCounter ++;
ba4: 80 91 63 00 lds r24, 0x0063
ba8: 8f 5f subi r24, 0xFF ; 255
baa: 80 93 63 00 sts 0x0063, r24
if ((FlashTimeCounter % FlashTimeOut) > (FlashTimeOut >> 1))//闪烁频率,为(FlashTimeOut/2)*8ms
bae: 80 91 63 00 lds r24, 0x0063
bb2: 9a ef ldi r25, 0xFA ; 250
bb4: 69 2f mov r22, r25
bb6: 0e 94 76 07 call 0xeec <__udivmodqi4>
bba: 89 2f mov r24, r25
bbc: 8e 37 cpi r24, 0x7E ; 126
bbe: 38 f0 brcs .+14 ; 0xbce <Flash+0xe6>
{
LCM1602Write_String(X,Y, String);
bc0: 49 81 ldd r20, Y+1 ; 0x01
bc2: 5a 81 ldd r21, Y+2 ; 0x02
bc4: 6e 81 ldd r22, Y+6 ; 0x06
bc6: 8d 81 ldd r24, Y+5 ; 0x05
bc8: 0e 94 95 03 call 0x72a <LCM1602Write_String>
bcc: 06 c0 rjmp .+12 ; 0xbda <Flash+0xf2>
}
else
{
LCM1602Write_String(X,Y, Icon);
bce: 4b 81 ldd r20, Y+3 ; 0x03
bd0: 5c 81 ldd r21, Y+4 ; 0x04
bd2: 6e 81 ldd r22, Y+6 ; 0x06
bd4: 8d 81 ldd r24, Y+5 ; 0x05
bd6: 0e 94 95 03 call 0x72a <LCM1602Write_String>
bda: 62 96 adiw r28, 0x12 ; 18
bdc: 0f b6 in r0, 0x3f ; 63
bde: f8 94 cli
be0: de bf out 0x3e, r29 ; 62
be2: 0f be out 0x3f, r0 ; 63
be4: cd bf out 0x3d, r28 ; 61
be6: df 91 pop r29
be8: cf 91 pop r28
bea: 08 95 ret
00000bec <FlashStringGroup>:
}
}
//字幕GIF函数
void FlashStringGroup(uchar String[][16],uchar StringCounter, uchar X,uchar Y)//StringCounter是字符串数,也就是显示页数
{
bec: cf 93 push r28
bee: df 93 push r29
bf0: cd b7 in r28, 0x3d ; 61
bf2: de b7 in r29, 0x3e ; 62
bf4: 61 97 sbiw r28, 0x11 ; 17
bf6: 0f b6 in r0, 0x3f ; 63
bf8: f8 94 cli
bfa: de bf out 0x3e, r29 ; 62
bfc: 0f be out 0x3f, r0 ; 63
bfe: cd bf out 0x3d, r28 ; 61
c00: 9a 83 std Y+2, r25 ; 0x02
c02: 89 83 std Y+1, r24 ; 0x01
c04: 6b 83 std Y+3, r22 ; 0x03
c06: 4c 83 std Y+4, r20 ; 0x04
c08: 2d 83 std Y+5, r18 ; 0x05
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
c0a: 80 e0 ldi r24, 0x00 ; 0
c0c: 90 e0 ldi r25, 0x00 ; 0
c0e: a0 e0 ldi r26, 0x00 ; 0
c10: b1 e4 ldi r27, 0x41 ; 65
c12: 8e 83 std Y+6, r24 ; 0x06
c14: 9f 83 std Y+7, r25 ; 0x07
c16: a8 87 std Y+8, r26 ; 0x08
c18: b9 87
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -