📄 ps2_lcm1602.lss
字号:
650: 89 83 std Y+1, r24 ; 0x01
652: 9a 83 std Y+2, r25 ; 0x02
654: ab 83 std Y+3, r26 ; 0x03
656: bc 83 std Y+4, r27 ; 0x04
if (__tmp < 1.0)
658: 20 e0 ldi r18, 0x00 ; 0
65a: 30 e0 ldi r19, 0x00 ; 0
65c: 40 e8 ldi r20, 0x80 ; 128
65e: 5f e3 ldi r21, 0x3F ; 63
660: 69 81 ldd r22, Y+1 ; 0x01
662: 7a 81 ldd r23, Y+2 ; 0x02
664: 8b 81 ldd r24, Y+3 ; 0x03
666: 9c 81 ldd r25, Y+4 ; 0x04
668: 0e 94 f9 07 call 0xff2 <__eqsf2>
66c: 88 23 and r24, r24
66e: 0c f0 brlt .+2 ; 0x672 <LCM1602Init+0x12a>
670: 05 c0 rjmp .+10 ; 0x67c <LCM1602Init+0x134>
__ticks = 1;
672: 81 e0 ldi r24, 0x01 ; 1
674: 90 e0 ldi r25, 0x00 ; 0
676: 9c 87 std Y+12, r25 ; 0x0c
678: 8b 87 std Y+11, r24 ; 0x0b
67a: 1a c0 rjmp .+52 ; 0x6b0 <LCM1602Init+0x168>
else if (__tmp > 65535)
67c: 20 e0 ldi r18, 0x00 ; 0
67e: 3f ef ldi r19, 0xFF ; 255
680: 4f e7 ldi r20, 0x7F ; 127
682: 57 e4 ldi r21, 0x47 ; 71
684: 69 81 ldd r22, Y+1 ; 0x01
686: 7a 81 ldd r23, Y+2 ; 0x02
688: 8b 81 ldd r24, Y+3 ; 0x03
68a: 9c 81 ldd r25, Y+4 ; 0x04
68c: 0e 94 fc 07 call 0xff8 <__gesf2>
690: 18 16 cp r1, r24
692: 0c f0 brlt .+2 ; 0x696 <LCM1602Init+0x14e>
694: 03 c0 rjmp .+6 ; 0x69c <LCM1602Init+0x154>
__ticks = 0; /* i.e. 65536 */
696: 1c 86 std Y+12, r1 ; 0x0c
698: 1b 86 std Y+11, r1 ; 0x0b
69a: 0a c0 rjmp .+20 ; 0x6b0 <LCM1602Init+0x168>
else
__ticks = (uint16_t)__tmp;
69c: 69 81 ldd r22, Y+1 ; 0x01
69e: 7a 81 ldd r23, Y+2 ; 0x02
6a0: 8b 81 ldd r24, Y+3 ; 0x03
6a2: 9c 81 ldd r25, Y+4 ; 0x04
6a4: 0e 94 de 07 call 0xfbc <__fixsfsi>
6a8: dc 01 movw r26, r24
6aa: cb 01 movw r24, r22
6ac: 9c 87 std Y+12, r25 ; 0x0c
6ae: 8b 87 std Y+11, r24 ; 0x0b
6b0: 8b 85 ldd r24, Y+11 ; 0x0b
6b2: 9c 85 ldd r25, Y+12 ; 0x0c
6b4: 9e 83 std Y+6, r25 ; 0x06
6b6: 8d 83 std Y+5, r24 ; 0x05
6b8: 8d 81 ldd r24, Y+5 ; 0x05
6ba: 9e 81 ldd r25, Y+6 ; 0x06
6bc: 01 97 sbiw r24, 0x01 ; 1
6be: f1 f7 brne .-4 ; 0x6bc <LCM1602Init+0x174>
6c0: 9e 83 std Y+6, r25 ; 0x06
6c2: 8d 83 std Y+5, r24 ; 0x05
_delay_ms(5);
LCM1602WriteCommand(0x38,0);
6c4: 60 e0 ldi r22, 0x00 ; 0
6c6: 88 e3 ldi r24, 0x38 ; 56
6c8: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
6cc: 80 e0 ldi r24, 0x00 ; 0
6ce: 90 e0 ldi r25, 0x00 ; 0
6d0: a0 ea ldi r26, 0xA0 ; 160
6d2: b0 e4 ldi r27, 0x40 ; 64
6d4: 8f 83 std Y+7, r24 ; 0x07
6d6: 98 87 std Y+8, r25 ; 0x08
6d8: a9 87 std Y+9, r26 ; 0x09
6da: ba 87 std Y+10, r27 ; 0x0a
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
6dc: 26 e6 ldi r18, 0x66 ; 102
6de: 36 e6 ldi r19, 0x66 ; 102
6e0: 46 ee ldi r20, 0xE6 ; 230
6e2: 54 e4 ldi r21, 0x44 ; 68
6e4: 6f 81 ldd r22, Y+7 ; 0x07
6e6: 78 85 ldd r23, Y+8 ; 0x08
6e8: 89 85 ldd r24, Y+9 ; 0x09
6ea: 9a 85 ldd r25, Y+10 ; 0x0a
6ec: 0e 94 49 08 call 0x1092 <__mulsf3>
6f0: dc 01 movw r26, r24
6f2: cb 01 movw r24, r22
6f4: 89 83 std Y+1, r24 ; 0x01
6f6: 9a 83 std Y+2, r25 ; 0x02
6f8: ab 83 std Y+3, r26 ; 0x03
6fa: bc 83 std Y+4, r27 ; 0x04
if (__tmp < 1.0)
6fc: 20 e0 ldi r18, 0x00 ; 0
6fe: 30 e0 ldi r19, 0x00 ; 0
700: 40 e8 ldi r20, 0x80 ; 128
702: 5f e3 ldi r21, 0x3F ; 63
704: 69 81 ldd r22, Y+1 ; 0x01
706: 7a 81 ldd r23, Y+2 ; 0x02
708: 8b 81 ldd r24, Y+3 ; 0x03
70a: 9c 81 ldd r25, Y+4 ; 0x04
70c: 0e 94 f9 07 call 0xff2 <__eqsf2>
710: 88 23 and r24, r24
712: 0c f0 brlt .+2 ; 0x716 <LCM1602Init+0x1ce>
714: 05 c0 rjmp .+10 ; 0x720 <LCM1602Init+0x1d8>
__ticks = 1;
716: 81 e0 ldi r24, 0x01 ; 1
718: 90 e0 ldi r25, 0x00 ; 0
71a: 9c 87 std Y+12, r25 ; 0x0c
71c: 8b 87 std Y+11, r24 ; 0x0b
71e: 1a c0 rjmp .+52 ; 0x754 <LCM1602Init+0x20c>
else if (__tmp > 65535)
720: 20 e0 ldi r18, 0x00 ; 0
722: 3f ef ldi r19, 0xFF ; 255
724: 4f e7 ldi r20, 0x7F ; 127
726: 57 e4 ldi r21, 0x47 ; 71
728: 69 81 ldd r22, Y+1 ; 0x01
72a: 7a 81 ldd r23, Y+2 ; 0x02
72c: 8b 81 ldd r24, Y+3 ; 0x03
72e: 9c 81 ldd r25, Y+4 ; 0x04
730: 0e 94 fc 07 call 0xff8 <__gesf2>
734: 18 16 cp r1, r24
736: 0c f0 brlt .+2 ; 0x73a <LCM1602Init+0x1f2>
738: 03 c0 rjmp .+6 ; 0x740 <LCM1602Init+0x1f8>
__ticks = 0; /* i.e. 65536 */
73a: 1c 86 std Y+12, r1 ; 0x0c
73c: 1b 86 std Y+11, r1 ; 0x0b
73e: 0a c0 rjmp .+20 ; 0x754 <LCM1602Init+0x20c>
else
__ticks = (uint16_t)__tmp;
740: 69 81 ldd r22, Y+1 ; 0x01
742: 7a 81 ldd r23, Y+2 ; 0x02
744: 8b 81 ldd r24, Y+3 ; 0x03
746: 9c 81 ldd r25, Y+4 ; 0x04
748: 0e 94 de 07 call 0xfbc <__fixsfsi>
74c: dc 01 movw r26, r24
74e: cb 01 movw r24, r22
750: 9c 87 std Y+12, r25 ; 0x0c
752: 8b 87 std Y+11, r24 ; 0x0b
754: 8b 85 ldd r24, Y+11 ; 0x0b
756: 9c 85 ldd r25, Y+12 ; 0x0c
758: 9e 83 std Y+6, r25 ; 0x06
75a: 8d 83 std Y+5, r24 ; 0x05
75c: 8d 81 ldd r24, Y+5 ; 0x05
75e: 9e 81 ldd r25, Y+6 ; 0x06
760: 01 97 sbiw r24, 0x01 ; 1
762: f1 f7 brne .-4 ; 0x760 <LCM1602Init+0x218>
764: 9e 83 std Y+6, r25 ; 0x06
766: 8d 83 std Y+5, r24 ; 0x05
_delay_ms(5);
LCM1602WriteCommand(0x38,0);
768: 60 e0 ldi r22, 0x00 ; 0
76a: 88 e3 ldi r24, 0x38 ; 56
76c: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
770: 80 e0 ldi r24, 0x00 ; 0
772: 90 e0 ldi r25, 0x00 ; 0
774: a0 ea ldi r26, 0xA0 ; 160
776: b0 e4 ldi r27, 0x40 ; 64
778: 8f 83 std Y+7, r24 ; 0x07
77a: 98 87 std Y+8, r25 ; 0x08
77c: a9 87 std Y+9, r26 ; 0x09
77e: ba 87 std Y+10, r27 ; 0x0a
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
780: 26 e6 ldi r18, 0x66 ; 102
782: 36 e6 ldi r19, 0x66 ; 102
784: 46 ee ldi r20, 0xE6 ; 230
786: 54 e4 ldi r21, 0x44 ; 68
788: 6f 81 ldd r22, Y+7 ; 0x07
78a: 78 85 ldd r23, Y+8 ; 0x08
78c: 89 85 ldd r24, Y+9 ; 0x09
78e: 9a 85 ldd r25, Y+10 ; 0x0a
790: 0e 94 49 08 call 0x1092 <__mulsf3>
794: dc 01 movw r26, r24
796: cb 01 movw r24, r22
798: 89 83 std Y+1, r24 ; 0x01
79a: 9a 83 std Y+2, r25 ; 0x02
79c: ab 83 std Y+3, r26 ; 0x03
79e: bc 83 std Y+4, r27 ; 0x04
if (__tmp < 1.0)
7a0: 20 e0 ldi r18, 0x00 ; 0
7a2: 30 e0 ldi r19, 0x00 ; 0
7a4: 40 e8 ldi r20, 0x80 ; 128
7a6: 5f e3 ldi r21, 0x3F ; 63
7a8: 69 81 ldd r22, Y+1 ; 0x01
7aa: 7a 81 ldd r23, Y+2 ; 0x02
7ac: 8b 81 ldd r24, Y+3 ; 0x03
7ae: 9c 81 ldd r25, Y+4 ; 0x04
7b0: 0e 94 f9 07 call 0xff2 <__eqsf2>
7b4: 88 23 and r24, r24
7b6: 0c f0 brlt .+2 ; 0x7ba <LCM1602Init+0x272>
7b8: 05 c0 rjmp .+10 ; 0x7c4 <LCM1602Init+0x27c>
__ticks = 1;
7ba: 81 e0 ldi r24, 0x01 ; 1
7bc: 90 e0 ldi r25, 0x00 ; 0
7be: 9c 87 std Y+12, r25 ; 0x0c
7c0: 8b 87 std Y+11, r24 ; 0x0b
7c2: 1a c0 rjmp .+52 ; 0x7f8 <LCM1602Init+0x2b0>
else if (__tmp > 65535)
7c4: 20 e0 ldi r18, 0x00 ; 0
7c6: 3f ef ldi r19, 0xFF ; 255
7c8: 4f e7 ldi r20, 0x7F ; 127
7ca: 57 e4 ldi r21, 0x47 ; 71
7cc: 69 81 ldd r22, Y+1 ; 0x01
7ce: 7a 81 ldd r23, Y+2 ; 0x02
7d0: 8b 81 ldd r24, Y+3 ; 0x03
7d2: 9c 81 ldd r25, Y+4 ; 0x04
7d4: 0e 94 fc 07 call 0xff8 <__gesf2>
7d8: 18 16 cp r1, r24
7da: 0c f0 brlt .+2 ; 0x7de <LCM1602Init+0x296>
7dc: 03 c0 rjmp .+6 ; 0x7e4 <LCM1602Init+0x29c>
__ticks = 0; /* i.e. 65536 */
7de: 1c 86 std Y+12, r1 ; 0x0c
7e0: 1b 86 std Y+11, r1 ; 0x0b
7e2: 0a c0 rjmp .+20 ; 0x7f8 <LCM1602Init+0x2b0>
else
__ticks = (uint16_t)__tmp;
7e4: 69 81 ldd r22, Y+1 ; 0x01
7e6: 7a 81 ldd r23, Y+2 ; 0x02
7e8: 8b 81 ldd r24, Y+3 ; 0x03
7ea: 9c 81 ldd r25, Y+4 ; 0x04
7ec: 0e 94 de 07 call 0xfbc <__fixsfsi>
7f0: dc 01 movw r26, r24
7f2: cb 01 movw r24, r22
7f4: 9c 87 std Y+12, r25 ; 0x0c
7f6: 8b 87 std Y+11, r24 ; 0x0b
7f8: 8b 85 ldd r24, Y+11 ; 0x0b
7fa: 9c 85 ldd r25, Y+12 ; 0x0c
7fc: 9e 83 std Y+6, r25 ; 0x06
7fe: 8d 83 std Y+5, r24 ; 0x05
800: 8d 81 ldd r24, Y+5 ; 0x05
802: 9e 81 ldd r25, Y+6 ; 0x06
804: 01 97 sbiw r24, 0x01 ; 1
806: f1 f7 brne .-4 ; 0x804 <LCM1602Init+0x2bc>
808: 9e 83 std Y+6, r25 ; 0x06
80a: 8d 83 std Y+5, r24 ; 0x05
_delay_ms(5);
LCM1602WriteCommand(0x38,1); //以后的显示都要检查忙
80c: 61 e0 ldi r22, 0x01 ; 1
80e: 88 e3 ldi r24, 0x38 ; 56
810: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
LCM1602WriteCommand(0x08,1); //关闭显示
814: 61 e0 ldi r22, 0x01 ; 1
816: 88 e0 ldi r24, 0x08 ; 8
818: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
LCM1602WriteCommand(0x01,1); //显示清屏
81c: 61 e0 ldi r22, 0x01 ; 1
81e: 81 e0 ldi r24, 0x01 ; 1
820: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
LCM1602WriteCommand(0x06,1); //写指令06H,文字不动,光标自动右移
824: 61 e0 ldi r22, 0x01 ; 1
826: 86 e0 ldi r24, 0x06 ; 6
828: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
LCM1602WriteCommand(0x0d,1); //写指令0CH,显示ON,光标OFF,闪烁ON
82c: 61 e0 ldi r22, 0x01 ; 1
82e: 8d e0 ldi r24, 0x0D ; 13
830: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
834: 2c 96 adiw r28, 0x0c ; 12
836: 0f b6 in r0, 0x3f ; 63
838: f8 94 cli
83a: de bf out 0x3e, r29 ; 62
83c: 0f be out 0x3f, r0 ; 63
83e: cd bf out 0x3d, r28 ; 61
840: df 91 pop r29
842: cf 91 pop r28
844: 08 95 ret
00000846 <LCM1602BusyWait>:
}
//1602总线忙等待
void LCM1602BusyWait(void)
{
846: cf 93 push r28
848: df 93 push r29
84a: cd b7 in r28, 0x3d ; 61
84c: de b7 in r29, 0x3e ; 62
DB_IN; //PB定义为输入,读引脚信号
84e: 10 92 37 00 sts 0x0037, r1
RS_CLR;
852: 80 91 32 00 lds r24, 0x0032
856: 8f 7e andi r24, 0xEF ; 239
858: 80 93 32 00 sts 0x0032, r24
RW_SET; //当RS为低电平RW为高电平时可以读忙信号
85c: 80 91 32 00 lds r24, 0x0032
860: 80 62 ori r24, 0x20 ; 32
862: 80 93 32 00 sts 0x0032, r24
E_SET;
866: 80 91 32 00 lds r24, 0x0032
86a: 80 68 ori r24, 0x80 ; 128
86c: 80 93 32 00 sts 0x0032, r24
asm("nop\n nop"); //延时两个nop时间
870: 00 00 nop
872: 00 00 nop
while(DB_READ&0x80); //直到忙信号结束,1602可再次写入信号
874: 80 91 36 00 lds r24, 0x0036
878: 88 23 and r24, r24
87a: 0c f4 brge .+2 ; 0x87e <LCM1602BusyWait+0x38>
87c: fb cf rjmp .-10 ; 0x874 <LCM1602BusyWait+0x2e>
DB_OUT;
87e: 8f ef ldi r24, 0xFF ; 255
880: 80 93 37 00 sts 0x0037, r24
E_CLR;
884: 9f e7 ldi r25, 0x7F ; 127
886: 80 91 32 00 lds r24, 0x0032
88a: 89 23 and r24, r25
88c: 80 93 32 00 sts 0x0032, r24
890: df 91 pop r29
892: cf 91 pop r28
894: 08 95 ret
00000896 <LCM1602WriteCommand>:
}
//向1602写入命令
void LCM1602WriteCommand(uchar com,uchar Busy)//Busy为0时忽略忙检测,为1时检查
{
896: cf 93 push r28
898: df 93 push r29
89a: cd b7 in r28, 0x3d ; 61
89c: de b7 in r29, 0x3e ; 62
89e: 22 97 sbiw r28, 0x02 ; 2
8a0: 0f b6 in r0, 0x3f ; 63
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -