📄 2x8_key.lss
字号:
LCD_set_xy(x, y);
75c: 6a 81 ldd r22, Y+2 ; 0x02
75e: 89 81 ldd r24, Y+1 ; 0x01
760: 0e 94 70 03 call 0x6e0 <LCD_set_xy>
while(x<XSIZE&&*string>=0x20)
764: 89 81 ldd r24, Y+1 ; 0x01
766: 80 31 cpi r24, 0x10 ; 16
768: a0 f4 brcc .+40 ; 0x792 <LCM1602Write_String+0x68>
76a: eb 81 ldd r30, Y+3 ; 0x03
76c: fc 81 ldd r31, Y+4 ; 0x04
76e: 80 81 ld r24, Z
770: 80 32 cpi r24, 0x20 ; 32
772: 78 f0 brcs .+30 ; 0x792 <LCM1602Write_String+0x68>
{
LCM1602WriteData(*string++);
774: de 01 movw r26, r28
776: 13 96 adiw r26, 0x03 ; 3
778: ed 91 ld r30, X+
77a: fc 91 ld r31, X
77c: 11 97 sbiw r26, 0x01 ; 1
77e: 80 81 ld r24, Z
780: 31 96 adiw r30, 0x01 ; 1
782: ed 93 st X+, r30
784: fc 93 st X, r31
786: 0e 94 42 03 call 0x684 <LCM1602WriteData>
x++;
78a: 89 81 ldd r24, Y+1 ; 0x01
78c: 8f 5f subi r24, 0xFF ; 255
78e: 89 83 std Y+1, r24 ; 0x01
790: e9 cf rjmp .-46 ; 0x764 <LCM1602Write_String+0x3a>
792: 24 96 adiw r28, 0x04 ; 4
794: 0f b6 in r0, 0x3f ; 63
796: f8 94 cli
798: de bf out 0x3e, r29 ; 62
79a: 0f be out 0x3f, r0 ; 63
79c: cd bf out 0x3d, r28 ; 61
79e: df 91 pop r29
7a0: cf 91 pop r28
7a2: 08 95 ret
000007a4 <LCM1602Write_number>:
}
}
//两位数字显示函数
void LCM1602Write_number(uchar number)
{
7a4: cf 93 push r28
7a6: df 93 push r29
7a8: cd b7 in r28, 0x3d ; 61
7aa: de b7 in r29, 0x3e ; 62
7ac: 23 97 sbiw r28, 0x03 ; 3
7ae: 0f b6 in r0, 0x3f ; 63
7b0: f8 94 cli
7b2: de bf out 0x3e, r29 ; 62
7b4: 0f be out 0x3f, r0 ; 63
7b6: cd bf out 0x3d, r28 ; 61
7b8: 89 83 std Y+1, r24 ; 0x01
uchar x,y;
x=number/10;
7ba: 89 81 ldd r24, Y+1 ; 0x01
7bc: 9a e0 ldi r25, 0x0A ; 10
7be: 69 2f mov r22, r25
7c0: 0e 94 76 07 call 0xeec <__udivmodqi4>
7c4: 8a 83 std Y+2, r24 ; 0x02
y=number-10*x;
7c6: 9a 81 ldd r25, Y+2 ; 0x02
7c8: 8a e0 ldi r24, 0x0A ; 10
7ca: 98 9f mul r25, r24
7cc: c0 01 movw r24, r0
7ce: 11 24 eor r1, r1
7d0: 29 81 ldd r18, Y+1 ; 0x01
7d2: 28 1b sub r18, r24
7d4: 82 2f mov r24, r18
7d6: 8b 83 std Y+3, r24 ; 0x03
LCM1602WriteData(x+0x30);
7d8: 8a 81 ldd r24, Y+2 ; 0x02
7da: 80 5d subi r24, 0xD0 ; 208
7dc: 0e 94 42 03 call 0x684 <LCM1602WriteData>
LCM1602WriteData(y+0x30);
7e0: 8b 81 ldd r24, Y+3 ; 0x03
7e2: 80 5d subi r24, 0xD0 ; 208
7e4: 0e 94 42 03 call 0x684 <LCM1602WriteData>
7e8: 23 96 adiw r28, 0x03 ; 3
7ea: 0f b6 in r0, 0x3f ; 63
7ec: f8 94 cli
7ee: de bf out 0x3e, r29 ; 62
7f0: 0f be out 0x3f, r0 ; 63
7f2: cd bf out 0x3d, r28 ; 61
7f4: df 91 pop r29
7f6: cf 91 pop r28
7f8: 08 95 ret
000007fa <RunString>:
}
/***************************************************************************
函数说明:滚屏字幕效果
输入: (需要滚屏的字符串, x起始位置,x终止位置,y坐标,方向)
***************************************************************************/
void RunString(uchar *String,uchar StartX,uchar EndX,uchar Y,uchar Direction)
{
7fa: 0f 93 push r16
7fc: cf 93 push r28
7fe: df 93 push r29
800: cd b7 in r28, 0x3d ; 61
802: de b7 in r29, 0x3e ; 62
804: a6 97 sbiw r28, 0x26 ; 38
806: 0f b6 in r0, 0x3f ; 63
808: f8 94 cli
80a: de bf out 0x3e, r29 ; 62
80c: 0f be out 0x3f, r0 ; 63
80e: cd bf out 0x3d, r28 ; 61
810: 9a 83 std Y+2, r25 ; 0x02
812: 89 83 std Y+1, r24 ; 0x01
814: 6b 83 std Y+3, r22 ; 0x03
816: 4c 83 std Y+4, r20 ; 0x04
818: 2d 83 std Y+5, r18 ; 0x05
81a: 0e 83 std Y+6, r16 ; 0x06
static uchar StringHead = 0;//StringHead为每次滚动后第一个要显示的字符号
uchar Screen[17];
uchar a = 0 ;
81c: 18 8e std Y+24, r1 ; 0x18
uchar Point = StringHead;//Point当前这次显示的字符串的第一个字符
81e: 80 91 60 00 lds r24, 0x0060
822: 89 8f std Y+25, r24 ; 0x19
uchar StringLong = StringLength(String);//字符串的长度
824: 89 81 ldd r24, Y+1 ; 0x01
826: 9a 81 ldd r25, Y+2 ; 0x02
828: 0e 94 4e 05 call 0xa9c <StringLength>
82c: 8a 8f std Y+26, r24 ; 0x1a
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
82e: 80 e0 ldi r24, 0x00 ; 0
830: 90 e0 ldi r25, 0x00 ; 0
832: a0 e0 ldi r26, 0x00 ; 0
834: b1 e4 ldi r27, 0x41 ; 65
836: 8b 8f std Y+27, r24 ; 0x1b
838: 9c 8f std Y+28, r25 ; 0x1c
83a: ad 8f std Y+29, r26 ; 0x1d
83c: be 8f std Y+30, r27 ; 0x1e
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
83e: 26 e6 ldi r18, 0x66 ; 102
840: 36 e6 ldi r19, 0x66 ; 102
842: 46 ee ldi r20, 0xE6 ; 230
844: 54 e4 ldi r21, 0x44 ; 68
846: 6b 8d ldd r22, Y+27 ; 0x1b
848: 7c 8d ldd r23, Y+28 ; 0x1c
84a: 8d 8d ldd r24, Y+29 ; 0x1d
84c: 9e 8d ldd r25, Y+30 ; 0x1e
84e: 0e 94 0e 07 call 0xe1c <__mulsf3>
852: dc 01 movw r26, r24
854: cb 01 movw r24, r22
856: 89 a3 std Y+33, r24 ; 0x21
858: 9a a3 std Y+34, r25 ; 0x22
85a: ab a3 std Y+35, r26 ; 0x23
85c: bc a3 std Y+36, r27 ; 0x24
if (__tmp < 1.0)
85e: 20 e0 ldi r18, 0x00 ; 0
860: 30 e0 ldi r19, 0x00 ; 0
862: 40 e8 ldi r20, 0x80 ; 128
864: 5f e3 ldi r21, 0x3F ; 63
866: 69 a1 ldd r22, Y+33 ; 0x21
868: 7a a1 ldd r23, Y+34 ; 0x22
86a: 8b a1 ldd r24, Y+35 ; 0x23
86c: 9c a1 ldd r25, Y+36 ; 0x24
86e: 0e 94 be 06 call 0xd7c <__eqsf2>
872: 88 23 and r24, r24
874: 0c f0 brlt .+2 ; 0x878 <RunString+0x7e>
876: 05 c0 rjmp .+10 ; 0x882 <RunString+0x88>
__ticks = 1;
878: 81 e0 ldi r24, 0x01 ; 1
87a: 90 e0 ldi r25, 0x00 ; 0
87c: 98 a3 std Y+32, r25 ; 0x20
87e: 8f 8f std Y+31, r24 ; 0x1f
880: 1a c0 rjmp .+52 ; 0x8b6 <RunString+0xbc>
else if (__tmp > 65535)
882: 20 e0 ldi r18, 0x00 ; 0
884: 3f ef ldi r19, 0xFF ; 255
886: 4f e7 ldi r20, 0x7F ; 127
888: 57 e4 ldi r21, 0x47 ; 71
88a: 69 a1 ldd r22, Y+33 ; 0x21
88c: 7a a1 ldd r23, Y+34 ; 0x22
88e: 8b a1 ldd r24, Y+35 ; 0x23
890: 9c a1 ldd r25, Y+36 ; 0x24
892: 0e 94 c1 06 call 0xd82 <__gesf2>
896: 18 16 cp r1, r24
898: 0c f0 brlt .+2 ; 0x89c <RunString+0xa2>
89a: 03 c0 rjmp .+6 ; 0x8a2 <RunString+0xa8>
__ticks = 0; /* i.e. 65536 */
89c: 18 a2 std Y+32, r1 ; 0x20
89e: 1f 8e std Y+31, r1 ; 0x1f
8a0: 0a c0 rjmp .+20 ; 0x8b6 <RunString+0xbc>
else
__ticks = (uint16_t)__tmp;
8a2: 69 a1 ldd r22, Y+33 ; 0x21
8a4: 7a a1 ldd r23, Y+34 ; 0x22
8a6: 8b a1 ldd r24, Y+35 ; 0x23
8a8: 9c a1 ldd r25, Y+36 ; 0x24
8aa: 0e 94 a3 06 call 0xd46 <__fixsfsi>
8ae: dc 01 movw r26, r24
8b0: cb 01 movw r24, r22
8b2: 98 a3 std Y+32, r25 ; 0x20
8b4: 8f 8f std Y+31, r24 ; 0x1f
8b6: 8f 8d ldd r24, Y+31 ; 0x1f
8b8: 98 a1 ldd r25, Y+32 ; 0x20
8ba: 9e a3 std Y+38, r25 ; 0x26
8bc: 8d a3 std Y+37, r24 ; 0x25
8be: 8d a1 ldd r24, Y+37 ; 0x25
8c0: 9e a1 ldd r25, Y+38 ; 0x26
8c2: 01 97 sbiw r24, 0x01 ; 1
8c4: f1 f7 brne .-4 ; 0x8c2 <RunString+0xc8>
8c6: 9e a3 std Y+38, r25 ; 0x26
8c8: 8d a3 std Y+37, r24 ; 0x25
static uint RunTimeCounter = 0 ;
_delay_ms(8);
if (Direction==0)//向左滚动
8ca: 8e 81 ldd r24, Y+6 ; 0x06
8cc: 88 23 and r24, r24
8ce: 09 f0 breq .+2 ; 0x8d2 <RunString+0xd8>
8d0: 6e c0 rjmp .+220 ; 0x9ae <RunString+0x1b4>
{
for (a = 0;a<(EndX - StartX + 1);a++)
8d2: 18 8e std Y+24, r1 ; 0x18
8d4: 88 8d ldd r24, Y+24 ; 0x18
8d6: 48 2f mov r20, r24
8d8: 55 27 eor r21, r21
8da: 8c 81 ldd r24, Y+4 ; 0x04
8dc: 28 2f mov r18, r24
8de: 33 27 eor r19, r19
8e0: 8b 81 ldd r24, Y+3 ; 0x03
8e2: 99 27 eor r25, r25
8e4: 28 1b sub r18, r24
8e6: 39 0b sbc r19, r25
8e8: c9 01 movw r24, r18
8ea: 01 96 adiw r24, 0x01 ; 1
8ec: 48 17 cp r20, r24
8ee: 59 07 cpc r21, r25
8f0: fc f4 brge .+62 ; 0x930 <RunString+0x136>
{
Screen[a] = String[Point];
8f2: 88 8d ldd r24, Y+24 ; 0x18
8f4: 28 2f mov r18, r24
8f6: 33 27 eor r19, r19
8f8: ce 01 movw r24, r28
8fa: 01 96 adiw r24, 0x01 ; 1
8fc: 82 0f add r24, r18
8fe: 93 1f adc r25, r19
900: dc 01 movw r26, r24
902: 16 96 adiw r26, 0x06 ; 6
904: 89 8d ldd r24, Y+25 ; 0x19
906: 28 2f mov r18, r24
908: 33 27 eor r19, r19
90a: 89 81 ldd r24, Y+1 ; 0x01
90c: 9a 81 ldd r25, Y+2 ; 0x02
90e: f9 01 movw r30, r18
910: e8 0f add r30, r24
912: f9 1f adc r31, r25
914: 80 81 ld r24, Z
916: 8c 93 st X, r24
Point ++;
918: 89 8d ldd r24, Y+25 ; 0x19
91a: 8f 5f subi r24, 0xFF ; 255
91c: 89 8f std Y+25, r24 ; 0x19
if (Point == StringLong) //如果字符串长度小于Endx-Startx+1,循环显示,类似以圆环
91e: 99 8d ldd r25, Y+25 ; 0x19
920: 8a 8d ldd r24, Y+26 ; 0x1a
922: 98 17 cp r25, r24
924: 09 f4 brne .+2 ; 0x928 <RunString+0x12e>
{
Point = 0;
926: 19 8e std Y+25, r1 ; 0x19
928: 88 8d ldd r24, Y+24 ; 0x18
92a: 8f 5f subi r24, 0xFF ; 255
92c: 88 8f std Y+24, r24 ; 0x18
92e: d2 cf rjmp .-92 ; 0x8d4 <RunString+0xda>
}
}
for (;a < 17;a++) //无字符的补空白
930: 88 8d ldd r24, Y+24 ; 0x18
932: 81 31 cpi r24, 0x11 ; 17
934: 78 f4 brcc .+30 ; 0x954 <RunString+0x15a>
{
Screen[a] =' ';
936: 88 8d ldd r24, Y+24 ; 0x18
938: 28 2f mov r18, r24
93a: 33 27 eor r19, r19
93c: ce 01 movw r24, r28
93e: 01 96 adiw r24, 0x01 ; 1
940: 82 0f add r24, r18
942: 93 1f adc r25, r19
944: fc 01 movw r30, r24
946: 36 96 adiw r30, 0x06 ; 6
948: 80 e2 ldi r24, 0x20 ; 32
94a: 80 83 st Z, r24
94c: 88 8d ldd r24, Y+24 ; 0x18
94e: 8f 5f subi r24, 0xFF ; 255
950: 88 8f std Y+24, r24 ; 0x18
952: ee cf rjmp .-36 ; 0x930 <RunString+0x136>
}
RunTimeCounter ++;
954: 80 91 61 00 lds r24, 0x0061
958: 90 91 62 00 lds r25, 0x0062
95c: 01 96 adiw r24, 0x01 ; 1
95e: 90 93 62 00 sts 0x0062, r25
962: 80 93 61 00 sts 0x0061, r24
if ((RunTimeCounter % RunStringSpeed) > (RunStringSpeed >>1) )//滚动频率为为(RunStringSpeed/2)*8ms
966: 80 91 61 00 lds r24, 0x0061
96a: 90 91 62 00 lds r25, 0x0062
96e: 2a ef ldi r18, 0xFA ; 250
970: 30 e0 ldi r19, 0x00 ; 0
972: b9 01 movw r22, r18
974: 0e 94 82 07 call 0xf04 <__udivmodhi4>
978: 8e 37 cpi r24, 0x7E ; 126
97a: 91 05 cpc r25, r1
97c: 80 f0 brcs .+32 ; 0x99e <RunString+0x1a4>
{
StringHead ++;//向左滚动
97e: 80 91 60 00 lds r24, 0x0060
982: 8f 5f subi r24, 0xFF ; 255
984: 80 93 60 00 sts 0x0060, r24
RunTimeCounter = 0;
988: 10 92 62 00 sts 0x0062, r1
98c: 10 92 61 00 sts 0x0061, r1
if (StringHead == StringLong)
990: 90 91 60 00 lds r25, 0x0060
994: 8a 8d ldd r24, Y+26 ; 0x1a
996: 98 17 cp r25, r24
998: 11 f4 brne .+4 ; 0x99e <RunString+0x1a4>
{
StringHead = 0;
99a: 10 92 60 00 sts 0x0060, r1
}
}
LCM1602Write_String(StartX,Y, Screen);
99e: ce 01 movw r24, r28
9a0: 07 96 adiw r24, 0x07 ; 7
9a2: ac 01 movw r20, r24
9a4: 6d 81 ldd r22, Y+5 ; 0x05
9a6: 8b 81 ldd r24, Y+3 ; 0x03
9a8: 0e 94 95 03 call 0x72a <LCM1602Write_String>
9ac: 6d c0 rjmp .+218 ; 0xa88 <RunString+0x28e>
}
else//向右滚动
{
for (a = 0;a<(EndX - StartX + 1);a++)
9ae: 18 8e std Y+24, r1 ; 0x18
9b0: 88 8d ldd r24, Y+24 ; 0x18
9b2: 48 2f mov r20, r24
9b4: 55 27 eor r21, r21
9b6: 8c 81 ldd r24, Y+4 ; 0x04
9b8: 28 2f mov r18, r24
9ba: 33 27 eor r19, r19
9bc: 8b 81 ldd r24, Y+3 ; 0x03
9be: 99 27 eor r25, r25
9c0: 28 1b sub r18, r24
9c2: 39 0b sbc r19, r25
9c4: c9 01 movw r24, r18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -