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

📄 lcd7920.lis

📁 网卡驱动程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00F2           ;              Y -> R12
 00F2           ;              X -> R10
                        .even
 00F2           _LCD_WriteChar::
 00F2 AA92              st -y,R10
 00F4 CA92              st -y,R12
 00F6 C22E              mov R12,R18
 00F8 A02E              mov R10,R16
 00FA                   .dbline -1
 00FA                   .dbline 135
 00FA           ;       
 00FA           ; }
 00FA           ; 
 00FA           ; //写一个字符到LCD
 00FA           ; void LCD_WriteChar(unsigned char X,unsigned char Y,unsigned char c1)
 00FA           ; {
 00FA                   .dbline 138
 00FA           ; //从显示屏指定的行(Y),列(X)的位置写入字符
 00FA           ; 
 00FA           ;    LCD_WriteCmd(0x34);        // 8bit I/F, basic command
 00FA 04E3              ldi R16,52
 00FC B0DF              xcall _LCD_WriteCmd
 00FE                   .dbline 139
 00FE           ;    LCD_WriteCmd(0x30);        // 8bit I/F, basic command, graphic off
 00FE 00E3              ldi R16,48
 0100 AEDF              xcall _LCD_WriteCmd
 0102                   .dbline 141
 0102           ;    
 0102           ;    LCD_Set_xy(X,Y);   
 0102 2C2D              mov R18,R12
 0104 0A2D              mov R16,R10
 0106 CDDF              xcall _LCD_Set_xy
 0108                   .dbline 142
 0108           ;    LCD_WriteData(c1);
 0108 0A81              ldd R16,y+2
 010A BADF              xcall _LCD_WriteData
 010C                   .dbline 144
 010C           ;    
 010C           ;    Delay_nms(1); //2006.11.19
 010C 01E0              ldi R16,1
 010E 10E0              ldi R17,0
 0110 0E940000          xcall _Delay_nms
 0114                   .dbline -2
 0114           L21:
 0114                   .dbline 0 ; func end
 0114 C990              ld R12,y+
 0116 A990              ld R10,y+
 0118 0895              ret
 011A                   .dbsym l c1 2 c
 011A                   .dbsym r Y 12 c
 011A                   .dbsym r X 10 c
 011A                   .dbend
 011A                   .dbfunc e LCD_WriteStr _LCD_WriteStr fV
 011A           ;           pstr -> R22,R23
 011A           ;              j -> R20
 011A           ;          pstr1 -> y+8
 011A           ;              Y -> R12
 011A           ;              X -> R10
                        .even
 011A           _LCD_WriteStr::
 011A 0E940000          xcall push_xgsetF03C
 011E C22E              mov R12,R18
 0120 A02E              mov R10,R16
 0122                   .dbline -1
 0122                   .dbline 149
 0122           ; }
 0122           ; 
 0122           ; //指定光标位置,写字符串到LCD显示
 0122           ; void LCD_WriteStr(unsigned char X,unsigned char Y,unsigned char *pstr1)
 0122           ; {
 0122                   .dbline 152
 0122           ; //从显示屏指定的行(Y),列(X)的位置写入字符串
 0122           ; unsigned char j;
 0122           ; unsigned char *pstr = pstr1;
 0122 6885              ldd R22,y+8
 0124 7985              ldd R23,y+9
 0126                   .dbline 154
 0126           ; 
 0126           ;    LCD_WriteCmd(0x34);        // 8bit I/F, basic command
 0126 04E3              ldi R16,52
 0128 9ADF              xcall _LCD_WriteCmd
 012A                   .dbline 155
 012A           ;    LCD_WriteCmd(0x30);        // 8bit I/F, basic command, graphic off
 012A 00E3              ldi R16,48
 012C 98DF              xcall _LCD_WriteCmd
 012E                   .dbline 157
 012E           ; 
 012E           ;    LCD_Set_xy(Y,X);
 012E 2A2D              mov R18,R10
 0130 0C2D              mov R16,R12
 0132 B7DF              xcall _LCD_Set_xy
 0134                   .dbline 159
 0134           ;        
 0134           ;    j=Y * LINEWIDTH + X;
 0134 82E1              ldi R24,18
 0136 8C9D              mul R24,R12
 0138 402D              mov R20,R0
 013A 4A0D              add R20,R10
 013C 25C0              xjmp L24
 013E           L23:
 013E                   .dbline 161
 013E           ;    while (*pstr && j< (LINEWIDTH * LINES))
 013E           ;    {
 013E                   .dbline 162
 013E           ;       if (j%LINEWIDTH==0)         //判断是否换行
 013E 12E1              ldi R17,18
 0140 042F              mov R16,R20
 0142 0E940000          xcall mod8u
 0146 0023              tst R16
 0148 31F4              brne L26
 014A           X6:
 014A                   .dbline 163
 014A           ;       {
 014A                   .dbline 164
 014A           ;          LCD_Set_xy(j/LINEWIDTH,0);   //如换行, 则光标移动到行首
 014A 2227              clr R18
 014C 12E1              ldi R17,18
 014E 042F              mov R16,R20
 0150 0E940000          xcall div8u
 0154 A6DF              xcall _LCD_Set_xy
 0156                   .dbline 165
 0156           ;       }
 0156           L26:
 0156                   .dbline 168
 0156           ;                
 0156           ;       //避免最后一格写半个汉字, 把汉字写到下一行
 0156           ;       if (((j+1)%2==0) && *pstr>127 && *(pstr-1)<128) 
 0156 12E0              ldi R17,2
 0158 042F              mov R16,R20
 015A 0F5F              subi R16,255    ; addi 1
 015C 0E940000          xcall mod8u
 0160 0023              tst R16
 0162 69F4              brne L28
 0164           X7:
 0164 8FE7              ldi R24,127
 0166 FB01              movw R30,R22
 0168 2080              ldd R2,z+0
 016A 8215              cp R24,R2
 016C 40F4              brsh L28
 016E           X8:
 016E 3197              sbiw R30,1
 0170 8081              ldd R24,z+0
 0172 8038              cpi R24,128
 0174 20F4              brsh L28
 0176           X9:
 0176                   .dbline 169
 0176           ;       {
 0176                   .dbline 170
 0176           ;          LCD_WriteData(' '); 
 0176 00E2              ldi R16,32
 0178 83DF              xcall _LCD_WriteData
 017A                   .dbline 171
 017A           ;          j++;
 017A 4395              inc R20
 017C                   .dbline 172
 017C           ;       }
 017C 05C0              xjmp L29
 017E           L28:
 017E                   .dbline 174
 017E           ;       else
 017E           ;       {       
 017E                   .dbline 175
 017E           ;          LCD_WriteData(*pstr++);
 017E FB01              movw R30,R22
 0180 0191              ld R16,Z+
 0182 BF01              movw R22,R30
 0184 7DDF              xcall _LCD_WriteData
 0186                   .dbline 176
 0186           ;          j++;
 0186 4395              inc R20
 0188                   .dbline 177
 0188           ;       }
 0188           L29:
 0188                   .dbline 178
 0188           ;    }
 0188           L24:
 0188                   .dbline 160
 0188 FB01              movw R30,R22
 018A 2080              ldd R2,z+0
 018C 2220              tst R2
 018E 19F0              breq L30
 0190           X10:
 0190 4432              cpi R20,36
 0192 08F4              brsh X12
 0194 D4CF              xjmp L23
 0196           X12:
 0196           X11:
 0196           L30:
 0196                   .dbline 180
 0196           ;        
 0196           ;    Delay_nms(1); //2006.11.19
 0196 01E0              ldi R16,1
 0198 10E0              ldi R17,0
 019A 0E940000          xcall _Delay_nms
 019E                   .dbline -2
 019E           L22:
 019E                   .dbline 0 ; func end
 019E 0C940000          xjmp pop_xgsetF03C
 01A2                   .dbsym r pstr 22 pc
 01A2                   .dbsym r j 20 c
 01A2                   .dbsym l pstr1 8 pc
 01A2                   .dbsym r Y 12 c
 01A2                   .dbsym r X 10 c
 01A2                   .dbend
 01A2                   .dbfunc e LCD_WriteStrAuto _LCD_WriteStrAuto fV
 01A2           ;           pstr -> R22,R23
 01A2           ;              i -> R20
 01A2           ;              j -> R20
 01A2           ;          pstr1 -> R10,R11
                        .even
 01A2           _LCD_WriteStrAuto::
 01A2 0E940000          xcall push_xgsetF00C
 01A6 5801              movw R10,R16
 01A8                   .dbline -1
 01A8                   .dbline 185
 01A8           ; }
 01A8           ; 
 01A8           ; //从显示屏的初始位置写入字符串,自动换行
 01A8           ; void LCD_WriteStrAuto(unsigned char *pstr1)
 01A8           ; {
 01A8                   .dbline 188
 01A8           ; unsigned char i;
 01A8           ; unsigned char j;
 01A8           ; unsigned char *pstr = pstr1;
 01A8 B501              movw R22,R10
 01AA                   .dbline 190
 01AA           ; 
 01AA           ;    LCD_WriteCmd(0x34);        // 8bit I/F, basic command
 01AA 04E3              ldi R16,52
 01AC 58DF              xcall _LCD_WriteCmd
 01AE                   .dbline 191
 01AE           ;    LCD_WriteCmd(0x30);        // 8bit I/F, basic command, graphic off
 01AE 00E3              ldi R16,48
 01B0 56DF              xcall _LCD_WriteCmd
 01B2                   .dbline 193
 01B2           ; 
 01B2           ;    for(i=0;i<36;i++)       //清空屏幕
 01B2 4427              clr R20
 01B4 0FC0              xjmp L35
 01B6           L32:
 01B6                   .dbline 194
 01B6           ;    {
 01B6                   .dbline 195
 01B6           ;       if (i%18==0)         //判断是否换行
 01B6 12E1              ldi R17,18
 01B8 042F              mov R16,R20
 01BA 0E940000          xcall mod8u
 01BE 0023              tst R16
 01C0 31F4              brne L36
 01C2           X13:
 01C2                   .dbline 196
 01C2           ;       {
 01C2                   .dbline 197
 01C2           ;          LCD_Set_xy(i/18,0);   //如换行, 则光标移动到行首
 01C2 2227              clr R18
 01C4 12E1              ldi R17,18
 01C6 042F              mov R16,R20
 01C8 0E940000          xcall div8u
 01CC 6ADF              xcall _LCD_Set_xy
 01CE                   .dbline 198
 01CE           ;       }
 01CE           L36:
 01CE                   .dbline 200
 01CE           ; 
 01CE           ;       LCD_WriteData(' '); //
 01CE 00E2              ldi R16,32
 01D0 57DF              xcall _LCD_WriteData
 01D2                   .dbline 201
 01D2           ;    }
 01D2           L33:
 01D2                   .dbline 193
 01D2 4395              inc R20
 01D4           L35:
 01D4                   .dbline 193
 01D4 4432              cpi R20,36
 01D6 78F3              brlo L32
 01D8           X14:
 01D8                   .dbline 203
 01D8           ;               
 01D8           ;    j=0;
 01D8 4427              clr R20
 01DA 25C0              xjmp L39
 01DC           L38:
 01DC                   .dbline 205
 01DC           ;    while (*pstr && j<36)
 01DC           ;    {
 01DC                   .dbline 206
 01DC           ;       if (j%18==0)         //判断是否换行
 01DC 12E1              ldi R17,18
 01DE 042F              mov R16,R20
 01E0 0E940000          xcall mod8u
 01E4 0023              tst R16
 01E6 31F4              brne L41
 01E8           X15:
 01E8                   .dbline 207
 01E8           ;       {
 01E8                   .dbline 208
 01E8           ;          LCD_Set_xy(j/18,0);   //如换行, 则光标移动到行首
 01E8 2227              clr R18
 01EA 12E1              ldi R17,18
 01EC 042F              mov R16,R20
 01EE 0E940000          xcall div8u
 01F2 57DF              xcall _LCD_Set_xy
 01F4                   .dbline 209
 01F4           ;       }
 01F4           L41:
 01F4                   .dbline 212
 01F4           ;                
 01F4           ;       //避免最后一格写半个汉字, 把汉字写到下一行
 01F4           ;       if (((j+1)%2==0) && *pstr>127 && *(pstr-1)<128) 
 01F4 12E0              ldi R17,2
 01F6 042F              mov R16,R20
 01F8 0F5F              subi R16,255    ; addi 1
 01FA 0E940000          xcall mod8u
 01FE 0023              tst R16
 0200 69F4              brne L43
 0202           X16:
 0202 8FE7              ldi R24,127
 0204 FB01              movw R30,R22
 0206 2080              ldd R2,z+0
 0208 8215              cp R24,R2
 020A 40F4              brsh L43
 020C           X17:
 020C 3197              sbiw R30,1
 020E 8081              ldd R24,z+0
 0210 8038              cpi R24,128
 0212 20F4              brsh L43
 0214           X18:
 0214                   .dbline 213
 0214           ;       {
 0214                   .dbline 214
 0214           ;          LCD_WriteData(' '); //
 0214 00E2              ldi R16,32
 0216 34DF              xcall _LCD_WriteData
 0218                   .dbline 215
 0218           ;          j++;
 0218 4395              inc R20
 021A                   .dbline 216
 021A           ;       }
 021A 05C0              xjmp L44
 021C           L43:
 021C                   .dbline 218
 021C           ;       else
 021C           ;       {       
 021C                   .dbline 219
 021C           ;          LCD_WriteData(*pstr++);
 021C FB01              movw R30,R22
 021E 0191              ld R16,Z+
 0220 BF01              movw R22,R30
 0222 2EDF              xcall _LCD_WriteData
 0224                   .dbline 220
 0224           ;          j++;
 0224 4395              inc R20
 0226                   .dbline 221
 0226           ;       }
 0226           L44:
 0226                   .dbline 222
 0226           ;    }
 0226           L39:
 0226                   .dbline 204
 0226 FB01              movw R30,R22
 0228 2080              ldd R2,z+0
 022A 2220              tst R2
 022C 19F0              breq L45
 022E           X19:
 022E 4432              cpi R20,36
 0230 08F4              brsh X21
 0232 D4CF              xjmp L38
 0234           X21:
 0234           X20:
 0234           L45:
 0234                   .dbline 224
 0234           ;        
 0234           ;    Delay_nms(1); //11.19
 0234 01E0              ldi R16,1
 0236 10E0              ldi R17,0
 0238 0E940000          xcall _Delay_nms
 023C                   .dbline -2
 023C           L31:
 023C                   .dbline 0 ; func end
 023C 0C940000          xjmp pop_xgsetF00C
 0240                   .dbsym r pstr 22 pc
 0240                   .dbsym r i 20 c
 0240                   .dbsym r j 20 c
 0240                   .dbsym r pstr1 10 pc
 0240                   .dbend
 0240           ; }
 0240           ; 

⌨️ 快捷键说明

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