⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3310lcd_function.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 00D2 062F              mov R16,R22
 00D4 CEDF              xcall _LCD_set_XY
 00D6 05C0              xjmp L15
 00D8           L14:
 00D8                   .dbline 96
 00D8                   .dbline 97
 00D8 FA01              movw R30,R20
 00DA 0081              ldd R16,z+0
 00DC D9DF              xcall _LCD_write_char
 00DE                   .dbline 98
 00DE 4F5F              subi R20,255  ; offset = 1
 00E0 5F4F              sbci R21,255
 00E2                   .dbline 99
 00E2           L15:
 00E2                   .dbline 95
 00E2           ;       ////if(X+sizeof(s)*6 >83)  X = 83- sizeof(s)*6;
 00E2           ;     while (*s) 
 00E2 FA01              movw R30,R20
 00E4 2080              ldd R2,z+0
 00E6 2220              tst R2
 00E8 B9F7              brne L14
 00EA                   .dbline -2
 00EA           L13:
 00EA 0E940000          xcall pop_gset3
 00EE                   .dbline 0 ; func end
 00EE 0895              ret
 00F0                   .dbsym r s 20 pc
 00F0                   .dbsym r Y 10 c
 00F0                   .dbsym r X 22 c
 00F0                   .dbend
 00F0                   .dbfunc e LCD_write_chinese_string _LCD_write_chinese_string fV
 00F0           ;              i -> R20
 00F0           ;              n -> R14
 00F0           ;            row -> R10
 00F0           ;           line -> R12
 00F0           ;            num -> R22
 00F0           ;        ch_with -> y+14
 00F0           ;              Y -> y+12
 00F0           ;              X -> y+10
                        .even
 00F0           _LCD_write_chinese_string::
 00F0 0E940000          xcall push_arg4
 00F4 0E940000          xcall push_gset5
 00F8 6889              ldd R22,y+16
 00FA CA88              ldd R12,y+18
 00FC AC88              ldd R10,y+20
 00FE                   .dbline -1
 00FE                   .dbline 119
 00FE           ;       {
 00FE           ;        LCD_write_char(*s);
 00FE           ;        s++;
 00FE           ;       }
 00FE           ;   }
 00FE           ; /*-----------------------------------------------------------------------
 00FE           ; LCD_write_chinese_string: 在LCD上显示汉字
 00FE           ; 
 00FE           ; 输入参数:X、Y    :显示汉字的起始X、Y坐标;
 00FE           ;           ch_with :汉字点阵的宽度
 00FE           ;           num     :显示汉字的个数;  
 00FE           ;           line    :汉字点阵数组中的起始行数
 00FE           ;           row     :汉字显示的行间距
 00FE           ; 编写日期          :2004-8-11 
 00FE           ; 最后修改日期      :2004-8-12 
 00FE           ; 测试:
 00FE           ;       LCD_write_chi(0,0,12,7,0,0);
 00FE           ;       LCD_write_chi(0,2,12,7,0,0);
 00FE           ;       LCD_write_chi(0,4,12,7,0,0);    
 00FE           ; -----------------------------------------------------------------------*/                        
 00FE           ; void LCD_write_chinese_string(unsigned char X, unsigned char Y, 
 00FE           ;                    unsigned char ch_with,unsigned char num,
 00FE           ;                    unsigned char line,unsigned char row)
 00FE           ;   {
 00FE                   .dbline 122
 00FE           ;     
 00FE           ;     unsigned char i,n;
 00FE           ;     LCD_set_XY(X,Y);                             //设置初始位置
 00FE 2C85              ldd R18,y+12
 0100 0A85              ldd R16,y+10
 0102 B7DF              xcall _LCD_set_XY
 0104                   .dbline 124
 0104           ;     
 0104           ;     for (i=0;i<num;)
 0104 4427              clr R20
 0106 32C0              xjmp L21
 0108           L18:
 0108                   .dbline 125
 0108           ;       {
 0108                   .dbline 126
 0108           ;               for (n=0; n<ch_with*2; n++)              //写一个汉字
 0108 EE24              clr R14
 010A 23C0              xjmp L25
 010C           L22:
 010C                   .dbline 127
 010C           ;                 { 
 010C                   .dbline 128
 010C           ;                   if (n==ch_with)                      //写汉字的下半部分
 010C 0E84              ldd R0,y+14
 010E E014              cp R14,R0
 0110 79F4              brne L26
 0112                   .dbline 129
 0112           ;                     {
 0112                   .dbline 130
 0112           ;                       if (i==0) LCD_set_XY(X,Y+1);
 0112 4423              tst R20
 0114 29F4              brne L28
 0116                   .dbline 130
 0116 2C85              ldd R18,y+12
 0118 2F5F              subi R18,255    ; addi 1
 011A 0A85              ldd R16,y+10
 011C AADF              xcall _LCD_set_XY
 011E 08C0              xjmp L29
 0120           L28:
 0120                   .dbline 132
 0120           ;                       else
 0120           ;                          LCD_set_XY((X+(ch_with+row)*i),Y+1);
 0120 2C85              ldd R18,y+12
 0122 2F5F              subi R18,255    ; addi 1
 0124 2E84              ldd R2,y+14
 0126 2A0C              add R2,R10
 0128 249E              mul R2,R20
 012A 0A85              ldd R16,y+10
 012C 000D              add R16,R0
 012E A1DF              xcall _LCD_set_XY
 0130           L29:
 0130                   .dbline 133
 0130           ;               }
 0130           L26:
 0130                   .dbline 134
 0130 21E0              ldi R18,1
 0132 2C2C              mov R2,R12
 0134 240E              add R2,R20
 0136 88E1              ldi R24,24
 0138 829D              mul R24,R2
 013A 1001              movw R2,R0
 013C 80E0              ldi R24,<_write_chinese_string
 013E 90E0              ldi R25,>_write_chinese_string
 0140 280E              add R2,R24
 0142 391E              adc R3,R25
 0144 EE2D              mov R30,R14
 0146 FF27              clr R31
 0148 E20D              add R30,R2
 014A F31D              adc R31,R3
 014C 0491              lpm R16,Z
 014E 0ED1              xcall _LCD_write_byte
 0150                   .dbline 135
 0150           L23:
 0150                   .dbline 126
 0150 E394              inc R14
 0152           L25:
 0152                   .dbline 126
 0152 82E0              ldi R24,2
 0154 0E84              ldd R0,y+14
 0156 809D              mul R24,R0
 0158 E014              cp R14,R0
 015A C0F2              brlo L22
 015C                   .dbline 136
 015C 4395              inc R20
 015E                   .dbline 137
 015E 2C85              ldd R18,y+12
 0160 2E84              ldd R2,y+14
 0162 2A0C              add R2,R10
 0164 249E              mul R2,R20
 0166 0A85              ldd R16,y+10
 0168 000D              add R16,R0
 016A 83DF              xcall _LCD_set_XY
 016C                   .dbline 138
 016C           L19:
 016C                   .dbline 124
 016C           L21:
 016C                   .dbline 124
 016C 4617              cp R20,R22
 016E 08F4              brsh X0
 0170 CBCF              xjmp L18
 0172           X0:
 0172                   .dbline -2
 0172           L17:
 0172 0E940000          xcall pop_gset5
 0176 2496              adiw R28,4
 0178                   .dbline 0 ; func end
 0178 0895              ret
 017A                   .dbsym r i 20 c
 017A                   .dbsym r n 14 c
 017A                   .dbsym r row 10 c
 017A                   .dbsym r line 12 c
 017A                   .dbsym r num 22 c
 017A                   .dbsym l ch_with 14 c
 017A                   .dbsym l Y 12 c
 017A                   .dbsym l X 10 c
 017A                   .dbend
                        .area lit(rom, con, rel)
 0390           L31:
 0390 00                .byte 0
 0391 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 03CD 00000000000000000000      .word 0,0,0,0,0
 03D7 00000000000000000000      .word 0,0,0,0,0
 03E1 000000            .byte 0,0,0
 03E4           L32:
 03E4 00                .byte 0
 03E5 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0421 00000000000000000000      .word 0,0,0,0,0
 042B 00000000000000000000      .word 0,0,0,0,0
 0435 000000            .byte 0,0,0
                        .area text(rom, con, rel)
 017A                   .dbfile C:\AVR\M\1\3310LCD_function.c
 017A                   .dbfunc e LCD_move_chinese_string _LCD_move_chinese_string fV
 017A           ;              i -> R20
 017A           ;              j -> R22
 017A           ;       buffer_l -> y+84
 017A           ;       buffer_h -> y+0
 017A           ;              n -> R10
 017A           ;              T -> R12
 017A           ;              Y -> R14
 017A           ;              X -> y+178
                        .even
 017A           _LCD_move_chinese_string::
 017A 0E940000          xcall push_arg4
 017E 0E940000          xcall push_gset5
 0182 E22E              mov R14,R18
 0184 EF97              sbiw R28,63
 0186 EF97              sbiw R28,63
 0188 AA97              sbiw R28,42  ; offset = 168
 018A FE01              movw R30,R28
 018C EA54              subi R30,74  ; addi 182
 018E FF4F              sbci R31,255
 0190 C080              ldd R12,z+0
 0192                   .dbline -1
 0192                   .dbline 151
 0192           ;                   LCD_write_byte(write_chinese_string[line+i][n],1);
 0192           ;                 }
 0192           ;               i++;
 0192           ;               LCD_set_XY((X+(ch_with+row)*i),Y);
 0192           ;       }
 0192           ;   }
 0192           ;   
 0192           ; /*-----------------------------------------------------------------------
 0192           ; LCD_move_chinese_string: 汉字移动
 0192           ; 
 0192           ; 输入参数:X、Y    :显示汉字的起始X、Y坐标;
 0192           ;           T       :移动速度;
 0192           ; 
 0192           ; 编写日期          :2004-8-13 
 0192           ; 最后修改日期      :2004-8-13 
 0192           ; -----------------------------------------------------------------------*/                        
 0192           ; void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T)
 0192           ;   {
 0192                   .dbline 152
 0192           ;     unsigned char i,n,j=0;
 0192 6627              clr R22
 0194                   .dbline 153
 0194           ;     unsigned char buffer_h[84]={0};
 0194 80E0              ldi R24,<L31
 0196 90E0              ldi R25,>L31
 0198 FE01              movw R30,R28
 019A 04E5              ldi R16,84
 019C 10E0              ldi R17,0
 019E FA93              st -y,R31
 01A0 EA93              st -y,R30
 01A2 9A93              st -y,R25
 01A4 8A93              st -y,R24
 01A6 0E940000          xcall asgncblk
 01AA                   .dbline 154
 01AA           ;     unsigned char buffer_l[84]={0};
 01AA 80E0              ldi R24,<L32
 01AC 90E0              ldi R25,>L32
 01AE FE01              movw R30,R28
 01B0 EC5A              subi R30,172  ; offset = 84
 01B2 FF4F              sbci R31,255
 01B4 04E5              ldi R16,84
 01B6 10E0              ldi R17,0
 01B8 FA93              st -y,R31
 01BA EA93              st -y,R30
 01BC 9A93              st -y,R25
 01BE 8A93              st -y,R24
 01C0 0E940000          xcall asgncblk
 01C4                   .dbline 156
 01C4           ;       
 01C4           ;     for (i=0; i<156; i++)
 01C4 4427              clr R20
 01C6 80C0              xjmp L36
 01C8           L33:
 01C8                   .dbline 157
 01C8           ;       {
 01C8                   .dbline 158
 01C8           ;         buffer_h[83] = move_chinese_string[i/12][j];
 01C8 1CE0              ldi R17,12
 01CA 042F              mov R16,R20
 01CC 0E940000          xcall div8u
 01D0 88E1              ldi R24,24
 01D2 809F              mul R24,R16
 01D4 1001              movw R2,R0
 01D6 80E0              ldi R24,<_move_chinese_string
 01D8 90E0              ldi R25,>_move_chinese_string
 01DA 280E              add R2,R24
 01DC 391E              adc R3,R25
 01DE E62F              mov R30,R22
 01E0 FF27              clr R31
 01E2 E20D              add R30,R2
 01E4 F31D              adc R31,R3
 01E6 E491              lpm R30,Z
 01E8 DE01              movw R26,R28
 01EA AD5A              subi R26,173  ; addi 83
 01EC BF4F              sbci R27,255
 01EE EC93              st x,R30
 01F0                   .dbline 159
 01F0           ;         buffer_l[83] = move_chinese_string[i/12][j+12];
 01F0 1CE0              ldi R17,12
 01F2 042F              mov R16,R20
 01F4 0E940000          xcall div8u
 01F8 88E1              ldi R24,24
 01FA 809F              mul R24,R16
 01FC 1001              movw R2,R0
 01FE 80E0              ldi R24,<_move_chinese_string
 0200 90E0              ldi R25,>_move_chinese_string
 0202 280E              add R2,R24
 0204 391E              adc R3,R25
 0206 E62F              mov R30,R22
 0208 FF27              clr R31
 020A 3C96              adiw R30,12
 020C E20D              add R30,R2
 020E F31D              adc R31,R3
 0210 E491              lpm R30,Z
 0212 DE01              movw R26,R28
 0214 A955              subi R26,89  ; addi 167
 0216 BF4F              sbci R27,255
 0218 EC93              st x,R30
 021A                   .dbline 160
 021A           ;         j++;
 021A 6395              inc R22
 021C                   .dbline 161
 021C           ;         if (j==12) j=0;
 021C 6C30              cpi R22,12
 021E 09F4              brne L39
 0220                   .dbline 161
 0220 6627              clr R22
 0222           L39:
 0222                   .dbline 163
 0222           ;         
 0222           ;         for (n=0; n<83; n++)
 0222 AA24              clr R10
 0224 1EC0              xjmp L44
 0226           L41:
 0226                   .dbline 164
 0226                   .dbline 165
 0226 CE01              movw R24,R28
 0228 0196              adiw R24,1
 022A EA2D              mov R30,R10
 022C FF27              clr R31
 022E E80F              add R30,R24
 0230 F91F              adc R31,R25
 0232 2080              ldd R2,z+0
 0234 CE01              movw R24,R28
 0236 EA2D              mov R30,R10
 0238 FF27              clr R31
 023A E80F              add R30,R24
 023C F91F              adc R31,R25
 023E 2082              std z+0,R2
 0240                   .dbline 166
 0240 CE01              movw R24,R28
 0242 8B5A              subi R24,171  ; offset = 85
 0244 9F4F              sbci R25,255
 0246 EA2D              mov R30,R10
 0248 FF27              clr R31
 024A E80F              add R30,R24
 024C F91F              adc R31,R25
 024E 2080              ldd R2,z+0
 0250 CE01              movw R24,R28
 0252 8C5A              subi R24,172  ; offset = 84
 0254 9F4F              sbci R25,255
 0256 EA2D              mov R30,R10
 0258 FF27              clr R31
 025A E80F              add R30,R24
 025C F91F              adc R31,R25
 025E 2082              std z+0,R2
 0260                   .dbline 167

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -