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

📄 lcd_1602_driver.lis

📁 这是一个电池放电器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 013C           _LCD_clear::
 013C 00D0              rcall push_gset1
 013E                   .dbline -1
 013E                   .dbline 109
 013E           ; }
 013E           ; /*-----------------------------------------------------------------------
 013E           ; LCD_clear    : 清除屏幕的函数
 013E           ; 
 013E           ; 输入参数      :无
 013E           ; 编写日期      :2005/10/18    
 013E           ;        说明      :   lcd_data[]也会被清0
 013E           ; -----------------------------------------------------------------------*/
 013E           ; void LCD_clear(void)
 013E           ;   {  
 013E                   .dbline 111
 013E           ;      unsigned char i;
 013E           ;      LCD_write_char(0,0x01);//显示清屏
 013E 21E0              ldi R18,1
 0140 30E0              ldi R19,0
 0142 0027              clr R16
 0144 1127              clr R17
 0146 97DF              rcall _LCD_write_char
 0148                   .dbline 112
 0148           ;        for(i=0;i<32;i++)
 0148 4427              clr R20
 014A 09C0              rjmp L18
 014C           L15:
 014C                   .dbline 113
 014C                   .dbline 114
 014C 80E0              ldi R24,<_lcd_data
 014E 90E0              ldi R25,>_lcd_data
 0150 E42F              mov R30,R20
 0152 FF27              clr R31
 0154 E80F              add R30,R24
 0156 F91F              adc R31,R25
 0158 2224              clr R2
 015A 2082              std z+0,R2
 015C                   .dbline 115
 015C           L16:
 015C                   .dbline 112
 015C 4395              inc R20
 015E           L18:
 015E                   .dbline 112
 015E 4032              cpi R20,32
 0160 A8F3              brlo L15
 0162                   .dbline 116
 0162           ;          {
 0162           ;             lcd_data[i]=0;
 0162           ;          }
 0162           ;          delay_nus(500);
 0162 04EF              ldi R16,500
 0164 11E0              ldi R17,1
 0166 00D0              rcall _delay_nus
 0168                   .dbline -2
 0168           L14:
 0168 00D0              rcall pop_gset1
 016A                   .dbline 0 ; func end
 016A 0895              ret
 016C                   .dbsym r i 20 c
 016C                   .dbend
 016C                   .dbfunc e LCD_write_string _LCD_write_string fV
 016C           ;              e -> R20
 016C           ;              s -> R22,R23
 016C           ;              y -> R18
 016C           ;              x -> R16
                        .even
 016C           _LCD_write_string::
 016C 00D0              rcall push_gset2
 016E 6C81              ldd R22,y+4
 0170 7D81              ldd R23,y+5
 0172 4E81              ldd R20,y+6
 0174                   .dbline -1
 0174                   .dbline 152
 0174           ;   }
 0174           ; /*-----------------------------------------------------------------------
 0174           ; LCD_check   : 统计发送数据到LCD次数的函数
 0174           ; 
 0174           ; 输入参数      :x,y 显示结果的座标
 0174           ; 编写日期      :2005/10/18    
 0174           ;        说明      :如果每秒调用一次,就是统计每秒的次数
 0174           ; -----------------------------------------------------------------------
 0174           ; void LCD_check(unsigned char x,unsigned char y) //检测每秒钟写LCD
 0174           ;                                                                       //次数的函数
 0174           ;   {  
 0174           ;     unsigned char  i;
 0174           ;       unsigned char  lcd[2]={0};
 0174           ;       add=y*16+x;//设置起始座标
 0174           ;         lcd[0]=num/10+48;
 0174           ;               lcd[1]=num%10+48;
 0174           ;       num=0;  
 0174           ;    for (i=0;i<2;i++) 
 0174           ;       {
 0174           ;               if(lcd_data[add]==lcd[i]){}
 0174           ;                         else
 0174           ;                            {data[add]=lcd[i];}
 0174           ;                         add++;
 0174           ;       }
 0174           ;       LCD_updata;
 0174           ;   }*/ 
 0174           ; /*-----------------------------------------------------------------------
 0174           ; LCD_write_string  : 英文字符串显示函数
 0174           ; 
 0174           ; 输入参数:*s       :英文字符串指针;
 0174           ;                  X、Y    : 显示字符串的位置
 0174           ;                                e          : 把从最后一个字符到x=e之间的内容删除
 0174           ; 编写日期          :2005/10/18                
 0174           ; -----------------------------------------------------------------------*/
 0174           ; void LCD_write_string(unsigned char x,unsigned char y, const unsigned char *s,unsigned char e)
 0174           ;   { 
 0174                   .dbline 153
 0174           ;     if(y<2)
 0174 2230              cpi R18,2
 0176 50F5              brsh L23
 0178                   .dbline 154
 0178           ;       add=y*16+x;//设置起始座标
 0178 80E1              ldi R24,16
 017A 829F              mul R24,R18
 017C 202C              mov R2,R0
 017E 200E              add R2,R16
 0180 20920000          sts _add,R2
 0184 23C0              rjmp L23
 0186           L22:
 0186                   .dbline 156
 0186           ;     while (*s) 
 0186           ;       { 
 0186                   .dbline 157
 0186           ;           if(lcd_data[add]==*s)//如果LCD上显示的数和
 0186 80E0              ldi R24,<_lcd_data
 0188 90E0              ldi R25,>_lcd_data
 018A E0910000          lds R30,_add
 018E FF27              clr R31
 0190 E80F              add R30,R24
 0192 F91F              adc R31,R25
 0194 2080              ldd R2,z+0
 0196 FB01              movw R30,R22
 0198 E491              lpm R30,Z
 019A 2E16              cp R2,R30
 019C 09F4              brne L25
 019E                   .dbline 158
 019E           ;                  {}                             //待写入的数相同的话
 019E                   .dbline 158
 019E 0FC0              rjmp L26
 01A0           L25:
 01A0                   .dbline 159
 01A0           ;               else{data[add]=*s;}//要显示的数据存入显存
 01A0                   .dbline 159
 01A0 80E0              ldi R24,<_data
 01A2 90E0              ldi R25,>_data
 01A4 E0910000          lds R30,_add
 01A8 FF27              clr R31
 01AA E80F              add R30,R24
 01AC F91F              adc R31,R25
 01AE DB01              movw R26,R22
 01B0 FA93              st -y,R31
 01B2 EA93              st -y,R30
 01B4 FD01              movw R30,R26
 01B6 A491              lpm R26,Z
 01B8 E991              ld R30,y+
 01BA F991              ld R31,y+
 01BC A083              std z+0,R26
 01BE                   .dbline 159
 01BE           L26:
 01BE                   .dbline 160
 01BE 6F5F              subi R22,255  ; offset = 1
 01C0 7F4F              sbci R23,255
 01C2                   .dbline 161
 01C2 80910000          lds R24,_add
 01C6 8F5F              subi R24,255    ; addi 1
 01C8 80930000          sts _add,R24
 01CC                   .dbline 162
 01CC           L23:
 01CC                   .dbline 155
 01CC FB01              movw R30,R22
 01CE E491              lpm R30,Z
 01D0 EE23              tst R30
 01D2 C9F6              brne L22
 01D4                   .dbline 163
 01D4           ;              s ++;//指针加1
 01D4           ;              add++;//显存地址加1
 01D4           ;       }
 01D4           ;         if(y==1)
 01D4 2130              cpi R18,1
 01D6 81F4              brne L32
 01D8                   .dbline 164
 01D8           ;           e+=16;
 01D8 405F              subi R20,240    ; addi 16
 01DA                   .dbline 165
 01DA           ;         for(;e>=add;add++)
 01DA 0EC0              rjmp L32
 01DC           L29:
 01DC                   .dbline 166
 01DC                   .dbline 166
 01DC 80E0              ldi R24,<_data
 01DE 90E0              ldi R25,>_data
 01E0 E0910000          lds R30,_add
 01E4 FF27              clr R31
 01E6 E80F              add R30,R24
 01E8 F91F              adc R31,R25
 01EA 80E2              ldi R24,32
 01EC 8083              std z+0,R24
 01EE                   .dbline 166
 01EE           L30:
 01EE                   .dbline 165
 01EE 80910000          lds R24,_add
 01F2 8F5F              subi R24,255    ; addi 1
 01F4 80930000          sts _add,R24
 01F8           L32:
 01F8                   .dbline 165
 01F8 20900000          lds R2,_add
 01FC 4215              cp R20,R2
 01FE 70F7              brsh L29
 0200                   .dbline 167
 0200           ;          {data[add]=' ';}
 0200           ;       LCD_updata;
 0200 2224              clr R2
 0202 20920000          sts _new,R2
 0206                   .dbline -2
 0206           L19:
 0206 00D0              rcall pop_gset2
 0208                   .dbline 0 ; func end
 0208 0895              ret
 020A                   .dbsym r e 20 c
 020A                   .dbsym r s 22 pkc
 020A                   .dbsym r y 18 c
 020A                   .dbsym r x 16 c
 020A                   .dbend
                        .area lit(rom, con, rel)
 0000           L34:
 0000 00                .byte 0
 0001 000000000000000000        .byte 0,0,0,0,0,0,0,0,0
                        .area text(rom, con, rel)
 020A                   .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
 020A                   .dbfunc e LCD_write_number _LCD_write_number fV
 020A           ;              c -> R10
 020A           ;              b -> R12
 020A           ;            lcd -> y+0
 020A           ;              i -> R14
 020A           ;              e -> R6
 020A           ;              s -> R8,R9
 020A           ;            dat -> y+24
 020A           ;              d -> y+22
 020A           ;              y -> y+20
 020A           ;              x -> R14
                        .even
 020A           _LCD_write_number::
 020A 3A93              st -y,r19
 020C 2A93              st -y,r18
 020E 00D0              rcall push_gset5
 0210 E02E              mov R14,R16
 0212 2A97              sbiw R28,10
 0214 8C8C              ldd R8,y+28
 0216 9D8C              ldd R9,y+29
 0218 6E8C              ldd R6,y+30
 021A                   .dbline -1
 021A                   .dbline 181
 021A           ;   }
 021A           ; /*-----------------------------------------------------------------------
 021A           ; LCD_write_number  : 数字显示函数
 021A           ; 
 021A           ; 输入参数:
 021A           ;           X、Y    : 显示字符串的位置
 021A           ;                d     :在第d位插入小数点
 021A           ;                data      :要显示的数据 长整形
 021A           ;                    *s     :数据的单位
 021A           ;                e       : 把从最后一个字符到x=e之间的内容删除
 021A           ; 编写日期       :2005/10/18                   
 021A           ; -----------------------------------------------------------------------*/ 
 021A           ; void LCD_write_number(unsigned char x,unsigned char y,unsigned char d,unsigned long dat,const unsigned char *s,unsigned char e)
 021A           ;   { 
 021A                   .dbline 183
 021A           ;     unsigned char  i;
 021A           ;       unsigned char b=0;
 021A CC24              clr R12
 021C                   .dbline 184
 021C           ;       unsigned char c='.';
 021C 8EE2              ldi R24,46
 021E A82E              mov R10,R24
 0220                   .dbline 185
 0220           ;       unsigned char lcd[10]={0};
 0220 80E0              ldi R24,<L34
 0222 90E0              ldi R25,>L34
 0224 FE01              movw R30,R28
 0226 0AE0              ldi R16,10
 0228 10E0              ldi R17,0
 022A FA93              st -y,R31
 022C EA93              st -y,R30
 022E 9A93              st -y,R25
 0230 8A93              st -y,R24
 0232 00D0              rcall asgncblk
 0234                   .dbline 186
 0234           ;       if(y<2)//如果Y>1则不重新计算地址
 0234 8C89              ldd R24,y+20
 0236 8230              cpi R24,2
 0238 38F4              brsh L35
 023A                   .dbline 187
 023A           ;     add=y*16+x;//设置起始座标
 023A 80E1              ldi R24,16
 023C 0C88              ldd R0,y+20
 023E 809D              mul R24,R0
 0240 202C              mov R2,R0
 0242 2E0C              add R2,R14
 0244 20920000          sts _add,R2
 0248           L35:
 0248                   .dbline 189
 0248           ;     
 0248           ;    for (i=10;i>0;i--) 
 0248 8AE0              ldi R24,10
 024A E82E              mov R14,R24
 024C 36C0              rjmp L40
 024E           L37:
 024E                   .dbline 190
 024E                   .dbline 191
 024E 4AE0              ldi R20,10
 0250 50E0              ldi R21,0
 0252 60E0              ldi R22,0
 0254 70E0              ldi R23,0
 0256 FE01              movw R30,R28
 0258 208C              ldd R2,z+24
 025A 318C              ldd R3,z+25
 025C 428C              ldd R4,z+26
 025E 538C              ldd R5,z+27
 0260 7A93              st -y,R23
 0262 6A93              st -y,R22
 0264 5A93              st -y,R21
 0266 4A93              st -y,R20
 0268 8101              movw R16,R2
 026A 9201              movw R18,R4
 026C 00D0              rcall mod32u
 026E 1801              movw R2,R16
 0270 2901              movw R4,R18
 0272 40E3              ldi R20,48
 0274 50E0              ldi R21,0
 0276 60E0              ldi R22,0
 0278 70E0              ldi R23,0
 027A 240E              add R2,R20
 027C 351E              adc R3,R21
 027E 461E              adc R4,R22
 0280 571E              adc R5,R23
 0282 CE01              movw R24,R28
 0284 EE2D              mov R30,R14
 0286 FF27              clr R31
 0288 E80F              add R30,R24
 028A F91F              adc R31,R25
 028C 2082              std z+0,R2
 028E                   .dbline 192
 028E 4AE0              ldi R20,10
 0290 50E0              ldi R21,0
 0292 60E0              ldi R22,0
 0294 70E0              ldi R23,0
 0296 FE01              movw R30,R28
 0298 208C              ldd R2,z+24
 029A 318C              ldd R3,z+25
 029C 428C              ldd R4,z+26
 029E 538C              ldd R5,z+27
 02A0 7A93              st -y,R23
 02A2 6A93              st -y,R22
 02A4 5A93              st -y,R21
 02A6 4A93              st -y,R20
 02A8 8101              movw R16,R2
 02AA 9201              movw R18,R4
 02AC 00D0              rcall div32u
 02AE FE01              movw R30,R28
 02B0 008F              std z+24,R16
 02B2 118F              std z+25,R17
 02B4 228F              std z+26,R18

⌨️ 快捷键说明

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