📄 lcd.lst
字号:
513 00d0 DEB7 movw r16,r22
515 00d4 0FB6 .LM44:
516 00d6 F894 ldi r24,lo8(5)
517 00d8 DEBF movw r30,r28
518 00da 0FBE adiw r30,1
519 00dc CDBF st Z+,__zero_reg__
520 dec r24
521 00de 9C01 brne .-6
522 00e0 8B01 movw r30,r28
214:lcd.c **** /***************************************************************
215:lcd.c **** This function writes a integer type value to LCD module
216:lcd.c ****
217:lcd.c **** Arguments:
218:lcd.c **** 1)int val : Value to print
219:lcd.c ****
220:lcd.c **** 2)unsigned int field_length :total length of field in which the value is printed
221:lcd.c **** must be between 1-5 if it is -1 the field length is no of digits in the val
222:lcd.c ****
223:lcd.c **** ****************************************************************/
224:lcd.c ****
225:lcd.c **** char str[5]={0,0,0,0,0};
523 18
524 .L19:
526 00e4 FE01 .LM45:
527 00e6 3196 movw r24,r18
528 00e8 1192 ldi r22,lo8(10)
529 00ea 8A95 ldi r23,hi8(10)
530 00ec 01F4 call __divmodhi4
531 00ee FE01 std Z+1,r24
533 00f2 00C0 .LM46:
534 movw r24,r18
226:lcd.c **** int i=4,j=0;
227:lcd.c **** while(val)
228:lcd.c **** {
229:lcd.c **** str[i]=val%10;
535 (10)
536 ldi r23,hi8(10)
537 00f4 C901 call __divmodhi4
538 00f6 6AE0 movw r18,r22
539 00f8 70E0 .L18:
540 00fa 0E94 0000 sbiw r30,1
230:lcd.c **** val=val/10;
542 cp r18,__zero_reg__
543 cpc r19,__zero_reg__
544 0100 C901 brne .L19
546 0104 70E0 .LM48:
547 0106 0E94 0000 ldi r24,hi8(-1)
548 010a 9B01 cpi r16,lo8(-1)
549 cpc r17,r24
550 010c 3197 brne .L21
551 movw r30,r28
552 .L24:
553 010e 2115 adiw r30,1
555 0112 01F4 .LM49:
231:lcd.c **** i--;
232:lcd.c **** }
233:lcd.c **** if(field_length==-1)
556 r24
557 breq .L24
559 0116 0F3F .LM50:
560 0118 1807 movw r24,r28
561 011a 01F4 adiw r24,1
562 011c FE01 sub r30,r24
563 sbc r31,r25
564 011e 3196 movw r24,r30
234:lcd.c **** while(str[j]==0) j++;
565 6
566 .L21:
568 0122 8823 .LM51:
569 0124 01F0 ldi r24,lo8(5)
570 ldi r25,hi8(5)
571 sub r24,r16
572 0126 CE01 sbc r25,r17
573 0128 0196 .L26:
574 012a E81B movw r14,r28
575 012c F90B sec
576 012e CF01 adc r14,__zero_reg__
577 0130 00C0 adc r15,__zero_reg__
578 add r14,r24
235:lcd.c **** else
236:lcd.c **** j=5-field_length;
579 movw r16,r24
580 rjmp .L27
581 0132 85E0 .L28:
583 0136 801B .LM52:
584 0138 910B movw r30,r14
585 ld r24,Z+
586 013a 7E01 movw r14,r30
587 013c 0894 ldi r22,lo8(1)
588 013e E11C subi r24,lo8(-(48))
589 0140 F11C call LCDByte
591 0144 F91E .LM53:
592 0146 8C01 subi r16,lo8(-(1))
593 0148 00C0 sbci r17,hi8(-(1))
594 .L27:
237:lcd.c ****
238:lcd.c **** if(val<0) LCDData('-');
239:lcd.c **** for(i=j;i<5;i++)
240:lcd.c **** {
241:lcd.c **** LCDData(48+str[i]);
595 r17,__zero_reg__
596 brlt .L28
597 014a F701 /* epilogue: frame size=5 */
598 014c 8191 adiw r28,5
599 014e 7F01 in __tmp_reg__,__SREG__
600 0150 61E0 cli
601 0152 805D out __SP_H__,r29
602 0154 0E94 0000 out __SREG__,__tmp_reg__
603 out __SP_L__,r28
604 pop r29
605 0158 0F5F pop r28
606 015a 1F4F pop r17
607 pop r16
608 015c 0530 pop r15
609 015e 1105 pop r14
610 0160 04F0 ret
611 /* epilogue end (size=13) */
612 0162 2596 /* function LCDWriteInt size 93 (66) */
619 0170 CF91 .Lscope3:
623 0178 EF90 .global LCDGotoXY
625 LCDGotoXY:
627 .LM54:
628 /* prologue: frame size=0 */
629 /* prologue end (size=0) */
631 .LM55:
632 cpi r24,lo8(40)
633 brsh .L36
635 .LM56:
636 cpse r22,__zero_reg__
637 ori r24,lo8(64)
638 .L34:
242:lcd.c **** }
243:lcd.c **** }
244:lcd.c **** void LCDGotoXY(uint8_t x,uint8_t y)
245:lcd.c **** {
640 ll LCDByte
641 .L36:
642 ret
643 /* epilogue: frame size=0 */
246:lcd.c **** if(x<40)
644 ,__zero_reg__
645 ori r24,lo8(64)
646 017c 8832 .L34:
247:lcd.c **** {
248:lcd.c **** if(y) x|=0b01000000;
648 46,.LM55-LCDGotoXY
649 .LM55:
650 0180 6111 cpi r24,lo8(40)
651 0182 8064 brsh .L36
249:lcd.c **** x|=0b10000000;
250:lcd.c **** LCDCmd(x);
653 54-LCDGotoXY
654 .LM54:
655 0184 60E0 /* prologue: frame size=0 */
656 0186 8068 /* prologue end (size=0) */
658 .LM55:
659 018c 0895 cpi r24,lo8(40)
660 brsh .L36
662 .LM56:
663 cpse r22,__zero_reg__
664 ori r24,lo8(64)
665 .L34:
667 .LM57:
668 ldi r22,lo8(0)
669 ori r24,lo8(-128)
670 call LCDByte
671 .L36:
672 ret
673 /* epilogue: frame size=0 */
674 018e 1F93 /* epilogue: noreturn */
675 /* epilogue end (size=0) */
676 0190 182F /* function LCDGotoXY size 10 (10) */
678 .Lscope4:
681 .global InitLCD
105:c:/winavr/bin/../avr/include/util/delay.h **** "1: dec %0" "\n\t"
106:c:/winavr/bin/../avr/include/util/delay.h **** "brne 1b"
107:c:/winavr/bin/../avr/include/util/delay.h **** : "=r" (__count)
108:c:/winavr/bin/../avr/include/util/delay.h **** : "0" (__count)
109:c:/winavr/bin/../avr/include/util/delay.h **** );
110:c:/winavr/bin/../avr/include/util/delay.h **** }
111:c:/winavr/bin/../avr/include/util/delay.h ****
112:c:/winavr/bin/../avr/include/util/delay.h **** /** \ingroup util_delay
113:c:/winavr/bin/../avr/include/util/delay.h ****
114:c:/winavr/bin/../avr/include/util/delay.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
115:c:/winavr/bin/../avr/include/util/delay.h **** iterations are possible. (The value 65536 would have to be
116:c:/winavr/bin/../avr/include/util/delay.h **** passed as 0.) The loop executes four CPU cycles per iteration,
117:c:/winavr/bin/../avr/include/util/delay.h **** not including the overhead the compiler requires to setup the
118:c:/winavr/bin/../avr/include/util/delay.h **** counter register pair.
119:c:/winavr/bin/../avr/include/util/delay.h ****
120:c:/winavr/bin/../avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
121:c:/winavr/bin/../avr/include/util/delay.h **** milliseconds can be achieved.
122:c:/winavr/bin/../avr/include/util/delay.h **** */
123:c:/winavr/bin/../avr/include/util/delay.h **** void
124:c:/winavr/bin/../avr/include/util/delay.h **** _delay_loop_2(uint16_t __count)
125:c:/winavr/bin/../avr/include/util/delay.h **** {
126:c:/winavr/bin/../avr/include/util/delay.h **** __asm__ volatile (
683
685 0192 80E6 .Lscope4:
688 0196 0197 .global InitLCD
690 InitLCD:
692 .LM58:
693 /* prologue: frame size=0 */
694 push r17
695 /* prologue end (size=1) */
696 mov r17,r24
697 .LBB118:
698 .LBB119:
699 019a 84B3 .LBB120:
700 019c 8F60 .LBB121:
702 .Ltext25:
704 01a0 8F9A .LM59:
705 ldi r24,lo8(-5536)
706 ldi r25,hi8(-5536)
707 01a2 8E9A /* #APP */
708 1: sbiw r24,1
709 brne 1b
710 01a4 8D9A /* #NOAPP */
711 .LBE121:
712 .LBE120:
713 01a6 85B3 .LBE119:
714 01a8 807F .LBE118:
716 .Ltext26:
718 01ac 9798 .LM60:
719 in r24,52-0x20
720 ori r24,lo8(15)
721 01ae 9598 out 52-0x20,r24
723 .LM61:
724 01b0 9698 sbi 49-0x20,7
726 .LM62:
727 sbi 49-0x20,6
729 .LM63:
730 sbi 49-0x20,5
732 .LM64:
733 01b2 81E0 in r24,53-0x20
734 andi r24,lo8(-16)
735 01b4 8A95 out 53-0x20,r24
737 .LM65:
738 cbi 50-0x20,7
740 .LM66:
741 cbi 50-0x20,5
743 .LM67:
744 cbi 50-0x20,6
745 .LBB122:
746 01b8 979A .LBB123:
747 .LBB124:
748 .LBB125:
750 .Ltext27:
752 .LM68:
753 ldi r24,lo8(1)
754 /* #APP */
755 1: dec r24
756 brne 1b
757 /* #NOAPP */
758 01bc 82E0 .LBE125:
759 01be 982F .LBE124:
760 .LBE123:
761 01c0 9A95 .LBE122:
763 .Ltext28:
765 .LM69:
766 sbi 50-0x20,7
768 .LM70:
769 sbi 53-0x20,1
770 .LBB126:
771 .LBB127:
772 01c4 9798 .LBB128:
773 .LBB129:
775 .Ltext29:
777 .LM71:
778 ldi r24,lo8(2)
779 mov r25,r24
780 /* #APP */
781 1: dec r25
782 01c6 8A95 brne 1b
783 01c8 01F4 /* #NOAPP */
784 .LBE129:
785 .LBE128:
786 .LBE127:
787 .LBE126:
789 .Ltext30:
791 .LM72:
792 cbi 50-0x20,7
793 01ca 0E94 0000 .LBB130:
794 .LBB131:
795 .LBB132:
796 01ce 60E0 .LBB133:
798 01d2 8C60 .Ltext31:
800 .LM73:
801 /* #APP */
802 01d8 60E0 1: dec r24
803 01da 88E2 brne 1b
804 01dc 0E94 0000 /* #NOAPP */
805 .LBE133:
806 01e0 1F91 .LBE132:
807 01e2 0895 .LBE131:
808 .LBE130:
810 .Ltext32:
812 .LM74:
813 call LCDBusyLoop
815 .LM75:
816 ldi r22,lo8(0)
817 mov r24,r17
818 ori r24,lo8(12)
819 call LCDByte
821 .LM76:
822 ldi r22,lo8(0)
823 ldi r24,lo8(40)
824 call LCDByte
825 /* epilogue: frame size=0 */
826 pop r17
DEFINED SYMBOLS
*ABS*:00000000 lcd.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:70 .text:00000000 LCDBusyLoop
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:292 .text:00000056 LCDByte
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:466 .text:000000a6 LCDWriteString
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:502 .text:000000c2 LCDWriteInt
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:639 .text:0000017c LCDGotoXY
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc6Laaaa.s:670 .text:0000018e InitLCD
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -