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

📄 3310lcd_function.lis

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

⌨️ 快捷键说明

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