                        .module LCD1602.C
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ8630~1\LCD1602.C
                        .area data(ram, con, rel)
 0000                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ8630~1\LCD1602.C
 0000           L2:
 0000                   .blkb 17
                        .area idata
 0000 20202020424B2D415652313238202020  .byte 32,32,32,32,'B,'K,45,'A,'V,'R,49,50,56,32,32,32
 0010 00                .byte 0
                        .area data(ram, con, rel)
 0011                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ8630~1\LCD1602.C
 0011           L3:
 0011                   .blkb 17
                        .area idata
 0011 20204C43443136303220544553542020  .byte 32,32,'L,'C,'D,49,54,48,50,32,'T,'E,'S,'T,32,32
 0021 00                .byte 0
                        .area data(ram, con, rel)
 0022                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ8630~1\LCD1602.C
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ8630~1\LCD1602.C
 0000                   .dbfile E:\BK-AVR~1\BK-AVR128ÅäÌ×ÊµÑé³ÌÐò\Êµ8630~1\LCD1602.C
 0000                   .dbfunc e main _main fV
 0000           ;              i -> <dead>
 0000           ; START_DISPLAY2 -> y+19
 0000           ; START_DISPLAY1 -> y+2
                        .even
 0000           _main::
 0000 A497              sbiw R28,36
 0002                   .dbline -1
 0002                   .dbline 56
 0002           ; /********************************************************
 0002           ; ÊµÑéÊ®Èý  LCD1602ÏÔÊ¾ÊµÑé
 0002           ; ËµÃ÷:      
 0002           ;           
 0002           ; CPUÐÍºÅ:  ATMEGA128A
 0002           ; Ê±ÖÓ:     8MHZ
 0002           ;  ********************************************************/
 0002           ; #include<iom128v.h>
 0002           ; #include<macros.h>
 0002           ; #define uchar unsigned char
 0002           ; #define uint  unsigned int
 0002           ; #define ulint unsigned long int
 0002           ; //#define DEBUG
 0002           ; 
 0002           ; #define  LCD_DATA_PORT    PORTA        //¶¨ÒåLCDµÄD0-D7ËùÔÚ¶Ë¿Ú
 0002           ; #define  LCD_DATA_POUT    DDRA=0xFF    //¶¨ÒåLCDÊý¾Ý¶Ë¿ÚÎªÊä³ö
 0002           ; #define  LCD_DATA_PIN     DDRA=0x00    //¶¨ÒåLCDÊý¾Ý¶Ë¿ÚÎªÊäÈë(ÔÚ¶ÁLCD×´Ì¬Ê±ÓÃµ½)
 0002           ; 
 0002           ; #define  LCD_Control_PORT PORTB        //¶¨ÒåLCDµÄEN RW RSËùÔÚ¶Ë¿Ú·½±ãºóÃæ²Ù×÷
 0002           ; #define  LCD_Control_OUT  DDRB|=(1<<DDB5)|(1<<DDB6)|(1<<DDB7)
 0002           ; #define  LCD_Control_IN   DDRB&=~((1<<DDB5)|(1<<DDB6)|(1<<DDB7))
 0002           ; 
 0002           ; #define  LCD_EN_1         PORTB|=1<<PD7
 0002           ; #define  LCD_EN_0         PORTB&=~(1<<PD7)
 0002           ; //LCD¶ÁÐ´¿ØÖÆÒý½Å
 0002           ; #define  LCD_RW_1         PORTB|=1<<PD6
 0002           ; #define  LCD_RW_0         PORTB&=~(1<<PD6)
 0002           ; //LCDÖ¸Áî»òÊý¾ÝÑ¡ÔñÒý½Å
 0002           ; #define  LCD_RS_1         PORTB|=1<<PD5
 0002           ; #define  LCD_RS_0         PORTB&=~(1<<PD5)
 0002           ; 
 0002           ; 
 0002           ; void Delayus(uint US);
 0002           ; void Delayms(uint MS);        
 0002           ; 
 0002           ;       
 0002           ; void mcu_io_init(void);
 0002           ; 
 0002           ; void lcd_init(void);
 0002           ; void LCD_en_write(void);
 0002           ; void wait_LCD_Ready(void);
 0002           ; 
 0002           ; void set_LCD_xy(uchar x, uchar y );
 0002           ; void LCD_write_onechar(uchar COMM,uchar DAT);
 0002           ; void LCD_write_string(uchar X,uchar Y,uchar *string);
 0002           ; 
 0002           ; 
 0002           ; /****************************************************
 0002           ; º¯ÊýÃû³Æ:main
 0002           ; ¹¦ÄÜÃèÊö:Ö÷º¯Êý
 0002           ; Êä¡¡Èë: ÎÞ
 0002           ; Êä¡¡³ö: ÎÞ
 0002           ; ÈÕÆÚ£º2009-4-8
 0002           ; *****************************************************/
 0002           ; void main(void)
 0002           ; {
 0002                   .dbline 58
 0002           ;       uchar i;
 0002           ;       uchar START_DISPLAY1[]={"    BK-AVR128   "};
 0002 80E0              ldi R24,<L2
 0004 90E0              ldi R25,>L2
 0006 FE01              movw R30,R28
 0008 3296              adiw R30,2
 000A 01E1              ldi R16,17
 000C 10E0              ldi R17,0
 000E FA93              st -y,R31
 0010 EA93              st -y,R30
 0012 9A93              st -y,R25
 0014 8A93              st -y,R24
 0016 0E940000          xcall asgnblk
 001A                   .dbline 59
 001A           ;       uchar START_DISPLAY2[]={"  LCD1602 TEST  "};     
 001A 80E0              ldi R24,<L3
 001C 90E0              ldi R25,>L3
 001E FE01              movw R30,R28
 0020 7396              adiw R30,19
 0022 01E1              ldi R16,17
 0024 10E0              ldi R17,0
 0026 FA93              st -y,R31
 0028 EA93              st -y,R30
 002A 9A93              st -y,R25
 002C 8A93              st -y,R24
 002E 0E940000          xcall asgnblk
 0032                   .dbline 60
 0032           ;       mcu_io_init();
 0032 1CD0              xcall _mcu_io_init
 0034                   .dbline 61
 0034           ;       Delayms(500);
 0034 04EF              ldi R16,500
 0036 11E0              ldi R17,1
 0038 D9D0              xcall _Delayms
 003A 15C0              xjmp L5
 003C           L4:
 003C                   .dbline 63
 003C           ;       while(1)
 003C           ;       {
 003C                   .dbline 64
 003C           ;       lcd_init();
 003C 3CD0              xcall _lcd_init
 003E                   .dbline 65
 003E           ;       Delayms(500);
 003E 04EF              ldi R16,500
 0040 11E0              ldi R17,1
 0042 D4D0              xcall _Delayms
 0044                   .dbline 66
 0044           ;       LCD_write_string(0,0,START_DISPLAY1);
 0044 CE01              movw R24,R28
 0046 0296              adiw R24,2
 0048 9983              std y+1,R25
 004A 8883              std y+0,R24
 004C 2227              clr R18
 004E 0027              clr R16
 0050 90D0              xcall _LCD_write_string
 0052                   .dbline 67
 0052           ;       LCD_write_string(0,1,START_DISPLAY2);
 0052 CE01              movw R24,R28
 0054 4396              adiw R24,19
 0056 9983              std y+1,R25
 0058 8883              std y+0,R24
 005A 21E0              ldi R18,1
 005C 0027              clr R16
 005E 89D0              xcall _LCD_write_string
 0060                   .dbline 68
 0060           ;       Delayms(1000);
 0060 08EE              ldi R16,1000
 0062 13E0              ldi R17,3
 0064 C3D0              xcall _Delayms
 0066                   .dbline 69
 0066           ;       }
 0066           L5:
 0066                   .dbline 62
 0066 EACF              xjmp L4
 0068           X0:
 0068                   .dbline -2
 0068           L1:
 0068                   .dbline 0 ; func end
 0068 A496              adiw R28,36
 006A 0895              ret
 006C                   .dbsym l i 3 c
 006C                   .dbsym l START_DISPLAY2 19 A[17:17]c
 006C                   .dbsym l START_DISPLAY1 2 A[17:17]c
 006C                   .dbend
 006C                   .dbfunc e mcu_io_init _mcu_io_init fV
                        .even
 006C           _mcu_io_init::
 006C                   .dbline -1
 006C                   .dbline 80
 006C           ; }
 006C           ; 
 006C           ; /****************************************************
 006C           ; º¯ÊýÃû³Æ:mcu_io_init
 006C           ; ¹¦ÄÜÃèÊö:ÉÏµçCPU IO¿Ú³õÊ¼»¯
 006C           ; Êä¡¡Èë: ÎÞ
 006C           ; Êä¡¡³ö: ÎÞ
 006C           ; ÈÕÆÚ£º2009-4-8
 006C           ; *****************************************************/
 006C           ; void mcu_io_init(void)
 006C           ; {    
 006C                   .dbline 81
 006C           ;        DDRF |=0X0E;           //LED¼°ÊýÂë¹ÜËø´æIO¿ÚÉèÎªÊä³ö
 006C 80916100          lds R24,97
 0070 8E60              ori R24,14
 0072 80936100          sts 97,R24
 0076                   .dbline 82
 0076           ;        PORTF|=0X0E;             
 0076 80916200          lds R24,98
 007A 8E60              ori R24,14
 007C 80936200          sts 98,R24
 0080                   .dbline 84
 0080           ;       
 0080           ;        DDRA=0XFF;             //LED IO¿ÚÉèÎªÊä³ö
 0080 8FEF              ldi R24,255
 0082 8ABB              out 0x1a,R24
 0084                   .dbline 85
 0084           ;        PORTA=0XFF;
 0084 8BBB              out 0x1b,R24
 0086                   .dbline 86
 0086           ;        PORTF&=0xF7;           //Ëø´æÊý¾Ý¹Ø±ÕLED
 0086 80916200          lds R24,98
 008A 877F              andi R24,247
 008C 80936200          sts 98,R24
 0090                   .dbline 88
 0090           ;        
 0090           ;        PORTA=0X00;
 0090 2224              clr R2
 0092 2BBA              out 0x1b,R2
 0094                   .dbline 89
 0094           ;        PORTF&=0XF8;           //Ëø´æÊý¾Ý¹Ø±ÕÊýÂë¹Ü
 0094 80916200          lds R24,98
 0098 887F              andi R24,248
 009A 80936200          sts 98,R24
 009E                   .dbline 91
 009E           ;        
 009E           ;        DDRB |=0X10;           //PB4ÉèÎªÊä³ö
 009E BC9A              sbi 0x17,4
 00A0                   .dbline 92
 00A0           ;        PORTB|=0X10;           //¹Ø±ÕPB4Íâ½ÓµÄLED
 00A0 C49A              sbi 0x18,4
 00A2                   .dbline 94
 00A2           ;      
 00A2           ;        LCD_DATA_PORT=0xff;
 00A2 8FEF              ldi R24,255
 00A4 8BBB              out 0x1b,R24
 00A6                   .dbline 95
 00A6           ;        LCD_DATA_POUT;          //LCDÊý¾Ý¿ÚÉèÎªÊä³ö
 00A6 8ABB              out 0x1a,R24
 00A8                   .dbline 97
 00A8           ;       
 00A8           ;        LCD_EN_1;
 00A8 C79A              sbi 0x18,7
 00AA                   .dbline 98
 00AA           ;        LCD_RW_1;
 00AA C69A              sbi 0x18,6
 00AC                   .dbline 99
 00AC           ;        LCD_RS_1;
 00AC C59A              sbi 0x18,5
 00AE                   .dbline 100
 00AE           ;        LCD_Control_IN;
 00AE 87B3              in R24,0x17
 00B0 8F71              andi R24,31
 00B2 87BB              out 0x17,R24
 00B4                   .dbline -2
 00B4           L7:
 00B4                   .dbline 0 ; func end
 00B4 0895              ret
 00B6                   .dbend
 00B6                   .dbfunc e lcd_init _lcd_init fV
                        .even
 00B6           _lcd_init::
 00B6                   .dbline -1
 00B6                   .dbline 113
 00B6           ; }
 00B6           ; 
 00B6           ; /****************************************************
 00B6           ; º¯ÊýÃû³Æ:lcd_init
 00B6           ; ¹¦ÄÜÃèÊö:LCD³õÊ¼»¯
 00B6           ; Êä¡¡Èë: ÎÞ
 00B6           ; Êä¡¡³ö: ÎÞ
 00B6           ; ÈÕÆÚ£º2009-4-8
 00B6           ; ËµÃ÷:×¢Òâ³õÊ¼»¯¹ý³Ì²¢¼ÓÉÏÊÊµ±ÑÓÊ±
 00B6           ;      ºóÃæLCDµÄÏÔÊ¾·½Ê½¿É°´Êµ¼ÊÐèÒªÐÞ¸Ä
 00B6           ; *****************************************************/
 00B6           ; void lcd_init(void)
 00B6           ; {
 00B6                   .dbline 114
 00B6           ;     Delayms(15);
 00B6 0FE0              ldi R16,15
 00B8 10E0              ldi R17,0
 00BA 98D0              xcall _Delayms
 00BC                   .dbline 115
 00BC           ;       LCD_DATA_POUT;     
 00BC 8FEF              ldi R24,255
 00BE 8ABB              out 0x1a,R24
 00C0                   .dbline 116
 00C0           ;     LCD_Control_OUT;
 00C0 87B3              in R24,0x17
 00C2 806E              ori R24,224
 00C4 87BB              out 0x17,R24
 00C6                   .dbline 117
 00C6           ;     LCD_write_onechar(0x38,0);
 00C6 2227              clr R18
 00C8 08E3              ldi R16,56
 00CA 3DD0              xcall _LCD_write_onechar
 00CC                   .dbline 118
 00CC           ;       Delayms(1);
 00CC 01E0              ldi R16,1
 00CE 10E0              ldi R17,0
 00D0 8DD0              xcall _Delayms
 00D2                   .dbline 119
 00D2           ;     LCD_write_onechar(0x38,0);
 00D2 2227              clr R18
 00D4 08E3              ldi R16,56
 00D6 37D0              xcall _LCD_write_onechar
 00D8                   .dbline 120
 00D8           ;       Delayms(1);
 00D8 01E0              ldi R16,1
 00DA 10E0              ldi R17,0
 00DC 87D0              xcall _Delayms
 00DE                   .dbline 121
 00DE           ;     LCD_write_onechar(0x38,0);
 00DE 2227              clr R18
 00E0 08E3              ldi R16,56
 00E2 31D0              xcall _LCD_write_onechar
 00E4                   .dbline 122
 00E4           ;       Delayms(1);
 00E4 01E0              ldi R16,1
 00E6 10E0              ldi R17,0
 00E8 81D0              xcall _Delayms
 00EA                   .dbline 123
 00EA           ;     LCD_write_onechar(0x38,0);
 00EA 2227              clr R18
 00EC 08E3              ldi R16,56
 00EE 2BD0              xcall _LCD_write_onechar
 00F0                   .dbline 124
 00F0           ;     LCD_write_onechar(0x08,0);    /*ÏÔÊ¾¹Ø±Õ*/
 00F0 2227              clr R18
 00F2 08E0              ldi R16,8
 00F4 28D0              xcall _LCD_write_onechar
 00F6                   .dbline 125
 00F6           ;     LCD_write_onechar(0x01,0);    /*ÏÔÊ¾ÇåÆÁ*/
 00F6 2227              clr R18
 00F8 01E0              ldi R16,1
 00FA 25D0              xcall _LCD_write_onechar
 00FC                   .dbline 126
 00FC           ;       LCD_write_onechar(0x06,0);    /*ÏÔÊ¾¹â±êÒÆ¶¯ÉèÖÃ*/
 00FC 2227              clr R18
 00FE 06E0              ldi R16,6
 0100 22D0              xcall _LCD_write_onechar
 0102                   .dbline 127
 0102           ;       Delayms(1);;  
 0102 01E0              ldi R16,1
 0104 10E0              ldi R17,0
 0106 72D0              xcall _Delayms
 0108                   .dbline 127
 0108                   .dbline 128
 0108           ;     LCD_write_onechar(0x0C,0);    /*ÏÔÊ¾¿ª¼°¹â±êÉèÖÃ*/
 0108 2227              clr R18
 010A 0CE0              ldi R16,12
 010C                   .dbline -2
 010C           L8:
 010C                   .dbline 0 ; func end
 010C 1CC0              xjmp _LCD_write_onechar
 010E                   .dbend
 010E                   .dbfunc e LCD_en_write _LCD_en_write fV
                        .even
 010E           _LCD_en_write::
 010E                   .dbline -1
 010E                   .dbline 139
 010E           ; }
 010E           ; 
 010E           ; /****************************************************
 010E           ; º¯ÊýÃû³Æ:LCD_en_write
 010E           ; ¹¦ÄÜÃèÊö:EN¶Ë²úÉúÒ»¸öÂö³å£¬Ð´LCD
 010E           ; Êä¡¡Èë: ÎÞ
 010E           ; Êä¡¡³ö: ÎÞ
 010E           ; ÈÕÆÚ£º2009-4-8
 010E           ; *****************************************************/
 010E           ; void LCD_en_write(void)        
 010E           ; {
 010E                   .dbline 140
 010E           ;     LCD_EN_1;
 010E C79A              sbi 0x18,7
 0110                   .dbline 141
 0110           ;     Delayus(300);  //EÂö³åÖÜÆÚ×îÐ¡150ns
 0110 0CE2              ldi R16,300
 0112 11E0              ldi R17,1
 0114 54D0              xcall _Delayus
 0116                   .dbline 142
 0116           ;     LCD_EN_0;
 0116 C798              cbi 0x18,7
 0118                   .dbline -2
 0118           L9:
 0118                   .dbline 0 ; func end
 0118 0895              ret
 011A                   .dbend
 011A                   .dbfunc e wait_LCD_Ready _wait_LCD_Ready fV
 011A           ;          temp1 -> R10
                        .even
 011A           _wait_LCD_Ready::
 011A AA92              st -y,R10
 011C                   .dbline -1
 011C                   .dbline 153
 011C           ; }
 011C           ; 
 011C           ; /****************************************************
 011C           ; º¯ÊýÃû³Æ:wait_LCD_Ready
 011C           ; ¹¦ÄÜÃèÊö:ÅÐ¶ÏLCDÃ¦±êÖ¾
 011C           ; Êä¡¡Èë: ÎÞ
 011C           ; Êä¡¡³ö: ÎÞ
 011C           ; ÈÕÆÚ£º2009-4-8
 011C           ; *****************************************************/
 011C           ; void wait_LCD_Ready(void)
 011C           ; {
 011C                   .dbline 155
 011C           ;       uchar temp1;
 011C           ;     LCD_DATA_PORT=0XFF;
 011C 8FEF              ldi R24,255
 011E 8BBB              out 0x1b,R24
 0120                   .dbline 156
 0120           ;     LCD_DATA_PIN;                  //D7ÉèÎªÊäÈë£¬×¼±¸ÅÐ¶ÏLCDÃ¦±êÖ¾ 
 0120 2224              clr R2
 0122 2ABA              out 0x1a,R2
 0124                   .dbline 158
 0124           ;                                    //1ÎªÃ¦  0Îª¿ÕÏÐ
 0124           ;       LCD_RS_0;
 0124 C598              cbi 0x18,5
 0126                   .dbline 159
 0126           ;     LCD_RW_1;                      //¶Á
 0126 C69A              sbi 0x18,6
 0128                   .dbline 160
 0128           ;       LCD_EN_1;
 0128 C79A              sbi 0x18,7
 012A                   .dbline 161
 012A           ;       Delayus(2);
 012A 02E0              ldi R16,2
 012C 10E0              ldi R17,0
 012E 47D0              xcall _Delayus
 0130           L11:
 0130                   .dbline 162
 0130           ;     while((temp1=PINC & 0X80));
 0130           L12:
 0130                   .dbline 162
 0130 83B3              in R24,0x13
 0132 8078              andi R24,128
 0134 A82E              mov R10,R24
 0136 8823              tst R24
 0138 D9F7              brne L11
 013A           X1:
 013A                   .dbline 163
 013A           ;       LCD_EN_0;
 013A C798              cbi 0x18,7
 013C                   .dbline 164
 013C           ;     LCD_RS_1;
 013C C59A              sbi 0x18,5
 013E                   .dbline 165
 013E           ;       LCD_DATA_POUT;
 013E 8FEF              ldi R24,255
 0140 8ABB              out 0x1a,R24
 0142                   .dbline -2
 0142           L10:
 0142                   .dbline 0 ; func end
 0142 A990              ld R10,y+
 0144 0895              ret
 0146                   .dbsym r temp1 10 c
 0146                   .dbend
 0146                   .dbfunc e LCD_write_onechar _LCD_write_onechar fV
 0146           ;            DAT -> R12
 0146           ;           COMM -> R10
                        .even
 0146           _LCD_write_onechar::
 0146 AA92              st -y,R10
 0148 CA92              st -y,R12
 014A C22E              mov R12,R18
 014C A02E              mov R10,R16
 014E                   .dbline -1
 014E                   .dbline 176
 014E           ; }
 014E           ; 
 014E           ; /****************************************************
 014E           ; º¯ÊýÃû³Æ:LCD_write_onechar
 014E           ; ¹¦ÄÜÃèÊö:Ð´Ò»¸ö×Ö½Úµ½LCD
 014E           ; Êä¡¡Èë: COMM(Ö¸Áî)   DAT£¨ÏÔÊ¾Êý¾Ý) 
 014E           ; Êä¡¡³ö: ÎÞ
 014E           ; ÈÕÆÚ£º2009-4-8
 014E           ; *****************************************************/
 014E           ; void LCD_write_onechar(uchar COMM,uchar DAT)
 014E           ; { 
 014E                   .dbline 177
 014E           ;        wait_LCD_Ready();         //µÈ´ýLCD¿ÕÏÐ
 014E E5DF              xcall _wait_LCD_Ready
 0150                   .dbline 178
 0150           ;        LCD_RW_0;                 //Ð´
 0150 C698              cbi 0x18,6
 0152                   .dbline 181
 0152           ;        
 0152           ;        //Ð´Êý¾Ý
 0152           ;        if(COMM==0)
 0152 AA20              tst R10
 0154 19F4              brne L15
 0156           X2:
 0156                   .dbline 182
 0156           ;        {
 0156                   .dbline 183
 0156           ;           LCD_RS_1;  //RS¸ßµçÆ½ÏòLCDÐ´Êý¾Ý
 0156 C59A              sbi 0x18,5
 0158                   .dbline 184
 0158           ;               LCD_DATA_PORT=DAT;
 0158 CBBA              out 0x1b,R12
 015A                   .dbline 185
 015A           ;        } 
 015A 02C0              xjmp L16
 015C           L15:
 015C                   .dbline 188
 015C           ;        //Ð´ÃüÁî
 015C           ;        else
 015C           ;        {
 015C                   .dbline 189
 015C           ;           LCD_RS_0;
 015C C598              cbi 0x18,5
 015E                   .dbline 190
 015E           ;         LCD_DATA_PORT=COMM;
 015E ABBA              out 0x1b,R10
 0160                   .dbline 191
 0160           ;        }
 0160           L16:
 0160                   .dbline 192
 0160           ;        LCD_en_write(); 
 0160 D6DF              xcall _LCD_en_write
 0162                   .dbline 193
 0162           ;        Delayus(2);
 0162 02E0              ldi R16,2
 0164 10E0              ldi R17,0
 0166 2BD0              xcall _Delayus
 0168                   .dbline 194
 0168           ;        LCD_RW_1;
 0168 C69A              sbi 0x18,6
 016A                   .dbline 195
 016A           ;        LCD_RS_1;
 016A C59A              sbi 0x18,5
 016C                   .dbline -2
 016C           L14:
 016C                   .dbline 0 ; func end
 016C C990              ld R12,y+
 016E A990              ld R10,y+
 0170 0895              ret
 0172                   .dbsym r DAT 12 c
 0172                   .dbsym r COMM 10 c
 0172                   .dbend
 0172                   .dbfunc e LCD_write_string _LCD_write_string fV
 0172           ;         string -> R20,R21
 0172           ;              Y -> R12
 0172           ;              X -> R10
                        .even
 0172           _LCD_write_string::
 0172 0E940000          xcall push_xgset303C
 0176 C22E              mov R12,R18
 0178 A02E              mov R10,R16
 017A 4E81              ldd R20,y+6
 017C 5F81              ldd R21,y+7
 017E                   .dbline -1
 017E                   .dbline 206
 017E           ; }
 017E           ; 
 017E           ; /****************************************************
 017E           ; º¯ÊýÃû³Æ:LCD_write_string
 017E           ; ¹¦ÄÜÃèÊö:LCD×Ö·û´®ÏÔÊ¾º¯Êý
 017E           ; Êä¡¡Èë: x/y£¨XÓëY×ø±ê)   *string£¨×Ö·û´®Ê×µØÖ·)
 017E           ; Êä¡¡³ö: ÎÞ
 017E           ; ÈÕÆÚ£º2009-4-8
 017E           ; *****************************************************/
 017E           ; void LCD_write_string(uchar X,uchar Y,uchar *string)
 017E           ; {
 017E                   .dbline 207
 017E           ;     set_LCD_xy( X, Y );                //ÉèÖÃLCDÏÔÊ¾×ø±ê
 017E 2C2D              mov R18,R12
 0180 0A2D              mov R16,R10
 0182 0DD0              xcall _set_LCD_xy
 0184 06C0              xjmp L19
 0186           L18:
 0186                   .dbline 209
 0186           ;     while (*string) 
 0186           ;     {
 0186                   .dbline 210
 0186           ;       LCD_write_onechar(0,*string );
 0186 FA01              movw R30,R20
 0188 2081              ldd R18,z+0
 018A 0027              clr R16
 018C DCDF              xcall _LCD_write_onechar
 018E                   .dbline 211
 018E           ;         string ++;                       //Ö¸ÏòÏÂÒ»ÏÔÊ¾×Ö·ûµØÖ·
 018E 4F5F              subi R20,255  ; offset = 1
 0190 5F4F              sbci R21,255
 0192                   .dbline 212
 0192           ;     }
 0192           L19:
 0192                   .dbline 208
 0192 FA01              movw R30,R20
 0194 2080              ldd R2,z+0
 0196 2220              tst R2
 0198 B1F7              brne L18
 019A           X3:
 019A                   .dbline -2
 019A           L17:
 019A                   .dbline 0 ; func end
 019A 0C940000          xjmp pop_xgset303C
 019E                   .dbsym r string 20 pc
 019E                   .dbsym r Y 12 c
 019E                   .dbsym r X 10 c
 019E                   .dbend
 019E                   .dbfunc e set_LCD_xy _set_LCD_xy fV
 019E           ;    DIS_address -> R20
 019E           ;              y -> R10
 019E           ;              x -> R22
                        .even
 019E           _set_LCD_xy::
 019E 0E940000          xcall push_xgsetF00C
 01A2 A22E              mov R10,R18
 01A4 602F              mov R22,R16
 01A6                   .dbline -1
 01A6                   .dbline 226
 01A6           ; }
 01A6           ; 
 01A6           ; /****************************************************
 01A6           ; º¯ÊýÃû³Æ:set_LCD_xy
 01A6           ; ¹¦ÄÜÃèÊö:ÉèÖÃÏÔÊ¾×ø±ê
 01A6           ; Êä¡¡Èë: x/y£¨XÓëY×ø±ê)
 01A6           ; Êä¡¡³ö: ÎÞ
 01A6           ; ÈÕÆÚ£º2009-4-8
 01A6           ; ËµÃ÷:  LMB1602µÚÒ»ÐÐÊ×µØÖ·Îª0x80
 01A6           ;               µÚ¶þÐÐÎª0xC0
 01A6           ; ÈÕÆÚ£º2009-4-7
 01A6           ; *****************************************************/
 01A6           ; void set_LCD_xy(uchar x, uchar y )
 01A6           ; {
 01A6                   .dbline 228
 01A6           ;     uchar DIS_address;
 01A6           ;     if (y == 0) 
 01A6 AA20              tst R10
 01A8 19F4              brne L22
 01AA           X4:
 01AA                   .dbline 229
 01AA           ;          DIS_address = 0x80 + x;            //µÚÒ»ÐÐXÁÐ
 01AA 462F              mov R20,R22
 01AC 4058              subi R20,128    ; addi 128
 01AE 02C0              xjmp L23
 01B0           L22:
 01B0                   .dbline 231
 01B0           ;     else 
 01B0           ;        DIS_address = 0xc0 + x;
 01B0 462F              mov R20,R22
 01B2 4054              subi R20,64    ; addi 192
 01B4           L23:
 01B4                   .dbline 232
 01B4           ;     LCD_write_onechar( DIS_address, 0 );  //µÚ¶þÐÐXÁÐ
 01B4 2227              clr R18
 01B6 042F              mov R16,R20
 01B8 C6DF              xcall _LCD_write_onechar
 01BA                   .dbline -2
 01BA           L21:
 01BA                   .dbline 0 ; func end
 01BA 0C940000          xjmp pop_xgsetF00C
 01BE                   .dbsym r DIS_address 20 c
 01BE                   .dbsym r y 10 c
 01BE                   .dbsym r x 22 c
 01BE                   .dbend
 01BE                   .dbfunc e Delayus _Delayus fV
 01BE           ;              i -> R20,R21
 01BE           ;             US -> R10,R11
                        .even
 01BE           _Delayus::
 01BE 0E940000          xcall push_xgset300C
 01C2 5801              movw R10,R16
 01C4                   .dbline -1
 01C4                   .dbline 242
 01C4           ; }
 01C4           ; 
 01C4           ; /****************************************************
 01C4           ; º¯ÊýÃû³Æ: Delayus
 01C4           ; ¹¦    ÄÜ: ÑÓÊ±Ö¸¶¨Î¢Ãë£¨8M¾§Õñ£©
 01C4           ; ²Î    Êý: US--ÑÓÊ±µÄÎ¢ÃëÊý(´óÔ¼£¬²»ÊÇºÜ¾«È·£¬MSÔ½´óÔ½×¼È·)
 01C4           ; ·µ»ØÖµ  : ÎÞ
 01C4           ; /****************************************************/
 01C4           ; void Delayus(uint US)           
 01C4           ; {
 01C4                   .dbline 244
 01C4           ;      uint i;
 01C4           ;      US=US*5/4;                
 01C4 05E0              ldi R16,5
 01C6 10E0              ldi R17,0
 01C8 9501              movw R18,R10
 01CA 0E940000          xcall empy16s
 01CE 5801              movw R10,R16
 01D0 B694              lsr R11
 01D2 A794              ror R10
 01D4 B694              lsr R11
 01D6 A794              ror R10
 01D8                   .dbline 245
 01D8           ;      for( i=0;i<US;i++); 
 01D8 4427              clr R20
 01DA 5527              clr R21
 01DC 02C0              xjmp L28
 01DE           L25:
 01DE                   .dbline 245
 01DE           L26:
 01DE                   .dbline 245
 01DE 4F5F              subi R20,255  ; offset = 1
 01E0 5F4F              sbci R21,255
 01E2           L28:
 01E2                   .dbline 245
 01E2 4A15              cp R20,R10
 01E4 5B05              cpc R21,R11
 01E6 D8F3              brlo L25
 01E8           X5:
 01E8                   .dbline -2
 01E8           L24:
 01E8                   .dbline 0 ; func end
 01E8 0C940000          xjmp pop_xgset300C
 01EC                   .dbsym r i 20 i
 01EC                   .dbsym r US 10 i
 01EC                   .dbend
 01EC                   .dbfunc e Delayms _Delayms fV
 01EC           ;              i -> R20,R21
 01EC           ;              j -> R22,R23
 01EC           ;             MS -> R16,R17
                        .even
 01EC           _Delayms::
 01EC 0E940000          xcall push_xgsetF000
 01F0                   .dbline -1
 01F0                   .dbline 255
 01F0           ; }
 01F0           ; /****************************************************
 01F0           ; º¯ÊýÃû³Æ: Delayms
 01F0           ; ¹¦    ÄÜ: ÑÓÊ±Ö¸¶¨ºÁÃë£¨8M¾§Õñ£©
 01F0           ; ²Î    Êý: MS--ÑÓÊ±µÄºÁÃëÊý
 01F0           ; ·µ»ØÖµ  : ÎÞ
 01F0           ; Í¨¹ýÈí¼þ·ÂÕæ·´¸´ÊµÑéµÃµ½µÄÊýÖµ
 01F0           ; /****************************************************/
 01F0           ; void Delayms(uint MS)           
 01F0           ; {
 01F0                   .dbline 257
 01F0           ;      uint i,j;
 01F0           ;      for( i=0;i<MS;i++)
 01F0 4427              clr R20
 01F2 5527              clr R21
 01F4 0BC0              xjmp L33
 01F6           L30:
 01F6                   .dbline 258
 01F6           ;      for(j=0;j<1141;j++);
 01F6 6627              clr R22
 01F8 7727              clr R23
 01FA 02C0              xjmp L37
 01FC           L34:
 01FC                   .dbline 258
 01FC           L35:
 01FC                   .dbline 258
 01FC 6F5F              subi R22,255  ; offset = 1
 01FE 7F4F              sbci R23,255
 0200           L37:
 0200                   .dbline 258
 0200 6537              cpi R22,117
 0202 E4E0              ldi R30,4
 0204 7E07              cpc R23,R30
 0206 D0F3              brlo L34
 0208           X6:
 0208           L31:
 0208                   .dbline 257
 0208 4F5F              subi R20,255  ; offset = 1
 020A 5F4F              sbci R21,255
 020C           L33:
 020C                   .dbline 257
 020C 4017              cp R20,R16
 020E 5107              cpc R21,R17
 0210 90F3              brlo L30
 0212           X7:
 0212                   .dbline -2
 0212           L29:
 0212                   .dbline 0 ; func end
 0212 0C940000          xjmp pop_xgsetF000
 0216                   .dbsym r i 20 i
 0216                   .dbsym r j 22 i
 0216                   .dbsym r MS 16 i
 0216                   .dbend
 0216           ; }
