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

📄 1602b_lcd.lis

📁 本设计以ATMEL公司生产的AT90S8515作为控制核心
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0128           L12:
 0128 0027              clr R16
 012A 1127              clr R17
 012C           L13:
 012C 0030              cpi R16,0
 012E 0107              cpc R16,R17
 0130 B1F3              breq L9
 0132           X2:
 0132                   .dbline 88
 0132           ;     LCD_EN_PORT &= ~LCD_EN;                //EN=0
 0132 C398              cbi 0x18,3
 0134                   .dbline 89
 0134           ;     LCD_DATA_DDR |= 0xf0;
 0134 87B3              in R24,0x17
 0136 806F              ori R24,240
 0138 87BB              out 0x17,R24
 013A                   .dbline -2
 013A                   .dbline 90
 013A           ;   }
 013A           L8:
 013A                   .dbline 0 ; func end
 013A 0895              ret
 013C                   .dbend
 013C                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 013C           ;        address -> R20
 013C           ;              y -> R20
 013C           ;              x -> R22
                        .even
 013C           _LCD_set_xy::
 013C 00D0              rcall push_gset2
 013E 422F              mov R20,R18
 0140 602F              mov R22,R16
 0142                   .dbline -1
 0142                   .dbline 99
 0142           ; 
 0142           ; /**********************************************************
 0142           ; /* LCD_set_xy        : 设置LCD显示的起始位置
 0142           ; /* 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
 0142           ;                      LCD第一行显示寄存器地址:0X80-0X8F
 0142           ;                      LCD第一行显示寄存器地址:0XC0-0XCF
 0142           ; ***********************************************************/
 0142           ; void LCD_set_xy( unsigned char x, unsigned char y )
 0142           ;   {
 0142                   .dbline 101
 0142           ;     unsigned char address;
 0142           ;     if (y == 0) address = 0x80 + x;
 0142 4423              tst R20
 0144 19F4              brne L15
 0146                   .dbline 101
 0146 462F              mov R20,R22
 0148 4058              subi R20,128    ; addi 128
 014A 02C0              rjmp L16
 014C           L15:
 014C                   .dbline 103
 014C           ;     else 
 014C           ;        address = 0xC0 + x;
 014C 462F              mov R20,R22
 014E 4054              subi R20,64    ; addi 192
 0150           L16:
 0150                   .dbline 104
 0150           ;     LCD_write_char( address, 0 );
 0150 2227              clr R18
 0152 3327              clr R19
 0154 042F              mov R16,R20
 0156 1127              clr R17
 0158 82DF              rcall _LCD_write_char
 015A                   .dbline -2
 015A                   .dbline 105
 015A           ;   }
 015A           L14:
 015A 00D0              rcall pop_gset2
 015C                   .dbline 0 ; func end
 015C 0895              ret
 015E                   .dbsym r address 20 c
 015E                   .dbsym r y 20 c
 015E                   .dbsym r x 22 c
 015E                   .dbend
 015E                   .dbfunc e LCD_write_string _LCD_write_string fV
 015E           ;              s -> R20,R21
 015E           ;              Y -> R10
 015E           ;              X -> R22
                        .even
 015E           _LCD_write_string::
 015E 00D0              rcall push_gset3
 0160 A22E              mov R10,R18
 0162 602F              mov R22,R16
 0164 4E81              ldd R20,y+6
 0166 5F81              ldd R21,y+7
 0168                   .dbline -1
 0168                   .dbline 112
 0168           ; /**********************************************************
 0168           ; /* LCD_write_string  : 英文字符串显示函数
 0168           ; /* 输入参数:*s      :英文字符串指针;
 0168           ; /*           X、Y    : 显示字符串的位置
 0168           ; ***********************************************************/
 0168           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 0168           ;   {
 0168                   .dbline 113
 0168           ;     LCD_set_xy( X, Y );
 0168 2A2D              mov R18,R10
 016A 062F              mov R16,R22
 016C E7DF              rcall _LCD_set_xy
 016E 09C0              rjmp L19
 0170           L18:
 0170                   .dbline 115
 0170                   .dbline 116
 0170 E42F              mov R30,R20
 0172 F52F              mov R31,R21
 0174 2081              ldd R18,z+0
 0176 3327              clr R19
 0178 0027              clr R16
 017A 1127              clr R17
 017C 70DF              rcall _LCD_write_char
 017E                   .dbline 117
 017E 4F5F              subi R20,255  ; offset = 1
 0180 5F4F              sbci R21,255
 0182                   .dbline 118
 0182           L19:
 0182                   .dbline 114
 0182           ;     while (*s) 
 0182 E42F              mov R30,R20
 0184 F52F              mov R31,R21
 0186 2080              ldd R2,z+0
 0188 2220              tst R2
 018A 91F7              brne L18
 018C                   .dbline -2
 018C                   .dbline 119
 018C           ;       {
 018C           ;         LCD_write_char( 0, *s );
 018C           ;           s ++;
 018C           ;       }
 018C           ;   }
 018C           L17:
 018C 00D0              rcall pop_gset3
 018E                   .dbline 0 ; func end
 018E 0895              ret
 0190                   .dbsym r s 20 pc
 0190                   .dbsym r Y 10 c
 0190                   .dbsym r X 22 c
 0190                   .dbend
 0190                   .dbfunc e LCD_write _LCD_write fV
 0190           ;           data -> y+4
 0190           ;              Y -> R22
 0190           ;              X -> R20
                        .even
 0190           _LCD_write::
 0190 00D0              rcall push_gset2
 0192 622F              mov R22,R18
 0194 402F              mov R20,R16
 0196                   .dbline -1
 0196                   .dbline 126
 0196           ; /**********************************************************
 0196           ; /* LCD_write         : 英文字符显示函数
 0196           ; /* 输入参数:data    :英文字符
 0196           ; /*           X、Y    : 显示字符的位置
 0196           ; ***********************************************************/  
 0196           ; void LCD_write(unsigned char X, unsigned char Y,unsigned data) 
 0196           ;   {
 0196                   .dbline 127
 0196           ;    LCD_set_xy( X, Y );
 0196 262F              mov R18,R22
 0198 042F              mov R16,R20
 019A D0DF              rcall _LCD_set_xy
 019C                   .dbline 128
 019C           ;    LCD_write_char(0, data);
 019C 2C81              ldd R18,y+4
 019E 3D81              ldd R19,y+5
 01A0 0027              clr R16
 01A2 1127              clr R17
 01A4 5CDF              rcall _LCD_write_char
 01A6                   .dbline -2
 01A6                   .dbline 129
 01A6           ;   } 
 01A6           L21:
 01A6 00D0              rcall pop_gset2
 01A8                   .dbline 0 ; func end
 01A8 0895              ret
 01AA                   .dbsym l data 4 i
 01AA                   .dbsym r Y 22 c
 01AA                   .dbsym r X 20 c
 01AA                   .dbend
 01AA                   .dbfunc e LCD_clr _LCD_clr fV
                        .even
 01AA           _LCD_clr::
 01AA                   .dbline -1
 01AA                   .dbline 134
 01AA           ; /**********************************************************
 01AA           ; /* LCD_clr           : 清屏函数
 01AA           ; ***********************************************************/    
 01AA           ; void LCD_clr(void) 
 01AA           ;   {
 01AA                   .dbline 135
 01AA           ;    LCD_write_char(0x01,0);
 01AA 2227              clr R18
 01AC 3327              clr R19
 01AE 01E0              ldi R16,1
 01B0 10E0              ldi R17,0
 01B2 55DF              rcall _LCD_write_char
 01B4                   .dbline 136
 01B4           ;    delay_nms(2);
 01B4 02E0              ldi R16,2
 01B6 10E0              ldi R17,0
 01B8                   .dbline -2
 01B8                   .dbline 137
 01B8           ;   } 
 01B8           L22:
 01B8                   .dbline 0 ; func end
 01B8 00C0              rjmp _delay_nms
 01BA                   .dbend
 01BA                   .dbfunc e LCD_display _LCD_display fV
 01BA           ;           temp -> R10
 01BA           ;              i -> R12
 01BA           ;           data -> y+18
 01BA           ;    data_length -> R14
 01BA           ;              y -> y+14
 01BA           ;              x -> y+12
                        .even
 01BA           _LCD_display::
 01BA 00D0              rcall push_arg4
 01BC 00D0              rcall push_gset5
 01BE 2297              sbiw R28,2
 01C0 E888              ldd R14,y+16
 01C2                   .dbline -1
 01C2                   .dbline 147
 01C2           ; /**********************************************************
 01C2           ; /* LCD_display
 01C2           ; /* 在LCD具体位置开始,显示一段长度不超过5的数值,如54321
 01C2           ; /* x——列值
 01C2           ; /* y——行值
 01C2           ; /* data_length——数值长度<11
 01C2           ; /* data ——数值内容
 01C2           ; ***********************************************************/
 01C2           ; void LCD_display(unsigned char x,unsigned char y,unsigned char data_length,unsigned long int data)
 01C2           ;   {
 01C2                   .dbline 149
 01C2           ;    unsigned char i,temp;
 01C2           ;    for(i=0;i<data_length;i++)
 01C2 CC24              clr R12
 01C4 3AC0              rjmp L27
 01C6           L24:
 01C6                   .dbline 150
 01C6                   .dbline 151
 01C6 4AE0              ldi R20,10
 01C8 50E0              ldi R21,0
 01CA 60E0              ldi R22,0
 01CC 70E0              ldi R23,0
 01CE EC2F              mov R30,R28
 01D0 FD2F              mov R31,R29
 01D2 2288              ldd R2,z+18
 01D4 3388              ldd R3,z+19
 01D6 4488              ldd R4,z+20
 01D8 5588              ldd R5,z+21
 01DA 7A93              st -y,R23
 01DC 6A93              st -y,R22
 01DE 5A93              st -y,R21
 01E0 4A93              st -y,R20
 01E2 022D              mov R16,R2
 01E4 132D              mov R17,R3
 01E6 242D              mov R18,R4
 01E8 352D              mov R19,R5
 01EA 00D0              rcall mod32u
 01EC A02E              mov R10,R16
 01EE                   .dbline 152
 01EE 8A2D              mov R24,R10
 01F0 9927              clr R25
 01F2 C096              adiw R24,48
 01F4 9983              std y+1,R25
 01F6 8883              std y+0,R24
 01F8 2E85              ldd R18,y+14
 01FA 0E2D              mov R16,R14
 01FC 0C84              ldd R0,y+12
 01FE 000D              add R16,R0
 0200 0C19              sub R16,R12
 0202 0150              subi R16,1
 0204 C5DF              rcall _LCD_write
 0206                   .dbline 153
 0206 4AE0              ldi R20,10
 0208 50E0              ldi R21,0
 020A 60E0              ldi R22,0
 020C 70E0              ldi R23,0
 020E EC2F              mov R30,R28
 0210 FD2F              mov R31,R29
 0212 2288              ldd R2,z+18
 0214 3388              ldd R3,z+19
 0216 4488              ldd R4,z+20
 0218 5588              ldd R5,z+21
 021A 7A93              st -y,R23
 021C 6A93              st -y,R22
 021E 5A93              st -y,R21
 0220 4A93              st -y,R20
 0222 022D              mov R16,R2
 0224 132D              mov R17,R3
 0226 242D              mov R18,R4
 0228 352D              mov R19,R5
 022A 00D0              rcall div32u
 022C EC2F              mov R30,R28
 022E FD2F              mov R31,R29
 0230 028B              std z+18,R16
 0232 138B              std z+19,R17
 0234 248B              std z+20,R18
 0236 358B              std z+21,R19
 0238                   .dbline 154
 0238           L25:
 0238                   .dbline 149
 0238 C394              inc R12
 023A           L27:
 023A                   .dbline 149
 023A CE14              cp R12,R14
 023C 08F4              brsh X3
 023E C3CF              rjmp L24
 0240           X3:
 0240                   .dbline -2
 0240                   .dbline 155
 0240           ;      {
 0240           ;       temp=data%10;
 0240           ;       LCD_write(data_length+x-i-1,y,'0'+temp);
 0240           ;       data=data/10; 
 0240           ;      }
 0240           ;   }
 0240           L23:
 0240 2296              adiw R28,2
 0242 00D0              rcall pop_gset5
 0244 2496              adiw R28,4
 0246                   .dbline 0 ; func end
 0246 0895              ret
 0248                   .dbsym r temp 10 c
 0248                   .dbsym r i 12 c
 0248                   .dbsym l data 18 l
 0248                   .dbsym r data_length 14 c
 0248                   .dbsym l y 14 c
 0248                   .dbsym l x 12 c
 0248                   .dbend

⌨️ 快捷键说明

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