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

📄 1602b_lcd.lis

📁 本次设计的自动往返电动小汽车
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0112 862F              mov R24,R22
 0114 972F              mov R25,R23
 0116 807F              andi R24,240
 0118 9070              andi R25,0
 011A 28B2              in R2,0x18
 011C 3324              clr R3
 011E 282A              or R2,R24
 0120 392A              or R3,R25
 0122 28BA              out 0x18,R2
 0124 09C0              rjmp L7
 0126           L6:
 0126                   .dbline 77
 0126           ;     else
 0126           ;       LCD_DATA_PORT |= command_temp&0xf0;
 0126 842F              mov R24,R20
 0128 952F              mov R25,R21
 012A 807F              andi R24,240
 012C 9070              andi R25,0
 012E 28B2              in R2,0x18
 0130 3324              clr R3
 0132 282A              or R2,R24
 0134 392A              or R3,R25
 0136 28BA              out 0x18,R2
 0138           L7:
 0138                   .dbline 78
 0138           ;     LCD_en_write();
 0138 A5DF              rcall _LCD_en_write
 013A                   .dbline 79
 013A           ;     LCD_RW_PORT |= LCD_RW;
 013A C29A              sbi 0x18,2
 013C                   .dbline 80
 013C           ;     LCD_RS_PORT ^= LCD_RS;    
 013C 82E0              ldi R24,2
 013E 28B2              in R2,0x18
 0140 2826              eor R2,R24
 0142 28BA              out 0x18,R2
 0144                   .dbline -2
 0144                   .dbline 81
 0144           ;   }
 0144           L3:
 0144 00D0              rcall pop_gset4
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbsym r data_temp 22 i
 0148                   .dbsym r command_temp 20 i
 0148                   .dbsym r data 12 i
 0148                   .dbsym r command 10 i
 0148                   .dbend
 0148                   .dbfunc e LCD_wait_Ready _LCD_wait_Ready fV
                        .even
 0148           _LCD_wait_Ready::
 0148                   .dbline -1
 0148                   .dbline 84
 0148           ; 
 0148           ; void LCD_wait_Ready(void)                  //等待LCD空闲
 0148           ;   {
 0148                   .dbline 85
 0148           ;     LCD_DATA_DDR &= ~0x80;                 //PB7 I/O口方向设置为输入
 0148 BF98              cbi 0x17,7
 014A                   .dbline 86
 014A           ;     LCD_RW_PORT |= LCD_RW;                 //RW=1
 014A C29A              sbi 0x18,2
 014C                   .dbline 87
 014C           ;     LCD_RS_PORT &= ~LCD_RS;                //RS=0
 014C C198              cbi 0x18,1
 014E                   .dbline 88
 014E           ;     LCD_EN_PORT |= LCD_EN;                 //EN=1
 014E C39A              sbi 0x18,3
 0150           L9:
 0150                   .dbline 89
 0150           L10:
 0150                   .dbline 89
 0150           ;     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PD7,为0表示空闲;
 0150 B799              sbic 0x16,7
 0152 03C0              rjmp L12
 0154 01E0              ldi R16,1
 0156 10E0              ldi R17,0
 0158 02C0              rjmp L13
 015A           L12:
 015A 0027              clr R16
 015C 1127              clr R17
 015E           L13:
 015E 0030              cpi R16,0
 0160 0107              cpc R16,R17
 0162 B1F3              breq L9
 0164           X2:
 0164                   .dbline 90
 0164           ;     LCD_EN_PORT &= ~LCD_EN;                //EN=0
 0164 C398              cbi 0x18,3
 0166                   .dbline 91
 0166           ;     LCD_DATA_DDR |= 0xf0;
 0166 87B3              in R24,0x17
 0168 806F              ori R24,240
 016A 87BB              out 0x17,R24
 016C                   .dbline -2
 016C                   .dbline 92
 016C           ;   }
 016C           L8:
 016C                   .dbline 0 ; func end
 016C 0895              ret
 016E                   .dbend
 016E                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 016E           ;        address -> R20
 016E           ;              y -> R20
 016E           ;              x -> R22
                        .even
 016E           _LCD_set_xy::
 016E 00D0              rcall push_gset2
 0170 422F              mov R20,R18
 0172 602F              mov R22,R16
 0174                   .dbline -1
 0174                   .dbline 101
 0174           ; 
 0174           ; /**********************************************************
 0174           ; /* LCD_set_xy        : 设置LCD显示的起始位置
 0174           ; /* 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
 0174           ;                      LCD第一行显示寄存器地址:0X80-0X8F
 0174           ;                      LCD第一行显示寄存器地址:0XC0-0XCF
 0174           ; ***********************************************************/
 0174           ; void LCD_set_xy( unsigned char x, unsigned char y )
 0174           ;   {
 0174                   .dbline 103
 0174           ;     unsigned char address;
 0174           ;     if (y == 0) address = 0x80 + x;
 0174 4423              tst R20
 0176 19F4              brne L15
 0178                   .dbline 103
 0178 462F              mov R20,R22
 017A 4058              subi R20,128    ; addi 128
 017C 02C0              rjmp L16
 017E           L15:
 017E                   .dbline 105
 017E           ;     else 
 017E           ;        address = 0xC0 + x;
 017E 462F              mov R20,R22
 0180 4054              subi R20,64    ; addi 192
 0182           L16:
 0182                   .dbline 106
 0182           ;     LCD_write_char( address, 0 );
 0182 2227              clr R18
 0184 3327              clr R19
 0186 042F              mov R16,R20
 0188 1127              clr R17
 018A 82DF              rcall _LCD_write_char
 018C                   .dbline -2
 018C                   .dbline 107
 018C           ;   }
 018C           L14:
 018C 00D0              rcall pop_gset2
 018E                   .dbline 0 ; func end
 018E 0895              ret
 0190                   .dbsym r address 20 c
 0190                   .dbsym r y 20 c
 0190                   .dbsym r x 22 c
 0190                   .dbend
 0190                   .dbfunc e LCD_write_string _LCD_write_string fV
 0190           ;              s -> R20,R21
 0190           ;              Y -> R10
 0190           ;              X -> R22
                        .even
 0190           _LCD_write_string::
 0190 00D0              rcall push_gset3
 0192 A22E              mov R10,R18
 0194 602F              mov R22,R16
 0196 4E81              ldd R20,y+6
 0198 5F81              ldd R21,y+7
 019A                   .dbline -1
 019A                   .dbline 114
 019A           ; /**********************************************************
 019A           ; /* LCD_write_string  : 英文字符串显示函数
 019A           ; /* 输入参数:*s      :英文字符串指针;
 019A           ; /*           X、Y    : 显示字符串的位置
 019A           ; ***********************************************************/
 019A           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 019A           ;   {
 019A                   .dbline 115
 019A           ;     LCD_set_xy( X, Y );
 019A 2A2D              mov R18,R10
 019C 062F              mov R16,R22
 019E E7DF              rcall _LCD_set_xy
 01A0 09C0              rjmp L19
 01A2           L18:
 01A2                   .dbline 117
 01A2                   .dbline 118
 01A2 E42F              mov R30,R20
 01A4 F52F              mov R31,R21
 01A6 2081              ldd R18,z+0
 01A8 3327              clr R19
 01AA 0027              clr R16
 01AC 1127              clr R17
 01AE 70DF              rcall _LCD_write_char
 01B0                   .dbline 119
 01B0 4F5F              subi R20,255  ; offset = 1
 01B2 5F4F              sbci R21,255
 01B4                   .dbline 120
 01B4           L19:
 01B4                   .dbline 116
 01B4           ;     while (*s) 
 01B4 E42F              mov R30,R20
 01B6 F52F              mov R31,R21
 01B8 2080              ldd R2,z+0
 01BA 2220              tst R2
 01BC 91F7              brne L18
 01BE                   .dbline -2
 01BE                   .dbline 121
 01BE           ;       {
 01BE           ;         LCD_write_char( 0, *s );
 01BE           ;           s ++;
 01BE           ;       }
 01BE           ;   }
 01BE           L17:
 01BE 00D0              rcall pop_gset3
 01C0                   .dbline 0 ; func end
 01C0 0895              ret
 01C2                   .dbsym r s 20 pc
 01C2                   .dbsym r Y 10 c
 01C2                   .dbsym r X 22 c
 01C2                   .dbend
 01C2                   .dbfunc e LCD_write _LCD_write fV
 01C2           ;           data -> y+4
 01C2           ;              Y -> R22
 01C2           ;              X -> R20
                        .even
 01C2           _LCD_write::
 01C2 00D0              rcall push_gset2
 01C4 622F              mov R22,R18
 01C6 402F              mov R20,R16
 01C8                   .dbline -1
 01C8                   .dbline 128
 01C8           ; /**********************************************************
 01C8           ; /* LCD_write         : 英文字符显示函数
 01C8           ; /* 输入参数:data    :英文字符
 01C8           ; /*           X、Y    : 显示字符的位置
 01C8           ; ***********************************************************/  
 01C8           ; void LCD_write(unsigned char X, unsigned char Y,unsigned data) 
 01C8           ;   {
 01C8                   .dbline 129
 01C8           ;    LCD_set_xy( X, Y );
 01C8 262F              mov R18,R22
 01CA 042F              mov R16,R20
 01CC D0DF              rcall _LCD_set_xy
 01CE                   .dbline 130
 01CE           ;    LCD_write_char(0, data);
 01CE 2C81              ldd R18,y+4
 01D0 3D81              ldd R19,y+5
 01D2 0027              clr R16
 01D4 1127              clr R17
 01D6 5CDF              rcall _LCD_write_char
 01D8                   .dbline -2
 01D8                   .dbline 131
 01D8           ;   } 
 01D8           L21:
 01D8 00D0              rcall pop_gset2
 01DA                   .dbline 0 ; func end
 01DA 0895              ret
 01DC                   .dbsym l data 4 i
 01DC                   .dbsym r Y 22 c
 01DC                   .dbsym r X 20 c
 01DC                   .dbend
 01DC                   .dbfunc e LCD_clr _LCD_clr fV
                        .even
 01DC           _LCD_clr::
 01DC                   .dbline -1
 01DC                   .dbline 136
 01DC           ; /**********************************************************
 01DC           ; /* LCD_clr           : 清屏函数
 01DC           ; ***********************************************************/    
 01DC           ; void LCD_clr(void) 
 01DC           ;   {
 01DC                   .dbline 137
 01DC           ;    LCD_write_char(0x01,0);
 01DC 2227              clr R18
 01DE 3327              clr R19
 01E0 01E0              ldi R16,1
 01E2 10E0              ldi R17,0
 01E4 55DF              rcall _LCD_write_char
 01E6                   .dbline 138
 01E6           ;    delay_nms(2);
 01E6 02E0              ldi R16,2
 01E8 10E0              ldi R17,0
 01EA                   .dbline -2
 01EA                   .dbline 139
 01EA           ;   } 
 01EA           L22:
 01EA                   .dbline 0 ; func end
 01EA 00C0              rjmp _delay_nms
 01EC                   .dbend

⌨️ 快捷键说明

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