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

📄 rd_lcd1602b.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0018 C0F3              brlo L2
 001A           X0:
 001A                   .dbline -2
 001A           L1:
 001A                   .dbline 0 ; func end
 001A 00C0              rjmp pop_xgset300C
 001C                   .dbsym r TimeCounter1 20 i
 001C                   .dbsym r Time 10 i
 001C                   .dbend
 001C                   .dbfunc s LCDDelayUs _LCDDelayUs fV
 001C           ;   TimeCounter1 -> R20,R21
 001C           ;           Time -> R16,R17
                        .even
 001C           _LCDDelayUs:
 001C 4A93              st -y,R20
 001E 5A93              st -y,R21
 0020                   .dbline -1
 0020                   .dbline 227
 0020           ; }
 0020           ; 
 0020           ; /***********************************************************
 0020           ; *   函数说明:LCD驱动指令周期延时函数                      *
 0020           ; *   输入:    需要大体延时Us数                             *
 0020           ; *   输出:    无                                           *
 0020           ; *   调用函数:无                                           *
 0020           ; ***********************************************************/
 0020           ; static void LCDDelayUs(UINT16 Time)
 0020           ; {
 0020                   .dbline 228
 0020           ;      UINT16 TimeCounter = 0;
 0020                   .dbline 229
 0020           ;        for (TimeCounter = 0;TimeCounter < Time;TimeCounter ++)
 0020 4427              clr R20
 0022 5527              clr R21
 0024 03C0              rjmp L10
 0026           L7:
 0026                   .dbline 230
 0026           ;        {
 0026                   .dbline 231
 0026           ;            asm("nop");
 0026 0000              nop
 0028                   .dbline 232
 0028           ;        }
 0028           L8:
 0028                   .dbline 229
 0028 4F5F              subi R20,255  ; offset = 1
 002A 5F4F              sbci R21,255
 002C           L10:
 002C                   .dbline 229
 002C 4017              cp R20,R16
 002E 5107              cpc R21,R17
 0030 D0F3              brlo L7
 0032           X1:
 0032                   .dbline -2
 0032           L6:
 0032                   .dbline 0 ; func end
 0032 5991              ld R21,y+
 0034 4991              ld R20,y+
 0036 0895              ret
 0038                   .dbsym r TimeCounter1 20 i
 0038                   .dbsym r Time 16 i
 0038                   .dbend
 0038                   .dbfunc e LCDInit _LCDInit fV
                        .even
 0038           _LCDInit::
 0038                   .dbline -1
 0038                   .dbline 243
 0038           ; }
 0038           ; 
 0038           ; /***********************************************************
 0038           ; *   函数说明:LCD初始化函数                                *
 0038           ; *   输入:    无                                           *
 0038           ; *   输出:    无                                           *
 0038           ; *   调用函数:LCDDelay()  LCDWaitForReady()                *
 0038           ; *             LCDSendCommand()                             *
 0038           ; ***********************************************************/
 0038           ; void LCDInit(void)
 0038           ; {
 0038                   .dbline 244
 0038           ;     LCDDelay(15);
 0038 0FE0              ldi R16,15
 003A 10E0              ldi R17,0
 003C E1DF              rcall _LCDDelay
 003E                   .dbline 247
 003E           ;    
 003E           ; #ifndef _LCD1602_FULL_DATA_MODEL
 003E           ;       LCDSendCommand(0x28);
 003E 08E2              ldi R16,40
 0040 0ED0              rcall _LCDSendCommand
 0042                   .dbline 251
 0042           ; #else
 0042           ;     LCDSendCommand(0x38);
 0042           ; #endif
 0042           ;     LCDWaitForReady();
 0042 83D0              rcall _LCDWaitForReady
 0044                   .dbline 252
 0044           ;       LCDSendCommand(LCD_CMD_DISP_CTR);
 0044 0CE0              ldi R16,12
 0046 0BD0              rcall _LCDSendCommand
 0048                   .dbline 253
 0048           ;     LCDWaitForReady();
 0048 80D0              rcall _LCDWaitForReady
 004A                   .dbline 254
 004A           ;       LCDSendCommand(LCD_CMD_CLS);
 004A 01E0              ldi R16,1
 004C 08D0              rcall _LCDSendCommand
 004E                   .dbline 255
 004E           ;       LCDDelay(2);
 004E 02E0              ldi R16,2
 0050 10E0              ldi R17,0
 0052 D6DF              rcall _LCDDelay
 0054                   .dbline 256
 0054           ;       LCDSendCommand(LCD_CMD_ENTER_SET);
 0054 02E0              ldi R16,2
 0056 03D0              rcall _LCDSendCommand
 0058                   .dbline 257
 0058           ;     LCDWaitForReady();
 0058 78D0              rcall _LCDWaitForReady
 005A                   .dbline 258
 005A           ;     LCDSendCommand(LCD_CMD_NOT_MOVE);
 005A 04E1              ldi R16,20
 005C                   .dbline -2
 005C           L11:
 005C                   .dbline 0 ; func end
 005C 00C0              rjmp _LCDSendCommand
 005E                   .dbend
 005E                   .dbfunc e LCDSendCommand _LCDSendCommand fV
 005E           ;        Command -> R16
                        .even
 005E           _LCDSendCommand::
 005E                   .dbline -1
 005E                   .dbline 270
 005E           ;       
 005E           ; }
 005E           ; 
 005E           ; #ifndef _Use_LCD1602B_Serial
 005E           ; /***********************************************************
 005E           ; *   函数说明:向LCD发送指令函数                            *
 005E           ; *   输入:    需要发送的指令                               *
 005E           ; *   输出:    无                                           *
 005E           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH() LCD_SEND_HALF_CHAR_LOW() *
 005E           ; ***********************************************************/
 005E           ; void LCDSendCommand(UINT8 Command)
 005E           ; {
 005E                   .dbline 271
 005E           ;       SetWrite;
 005E 8AB1              in R24,0xa
 0060 8867              ori R24,120
 0062 8AB9              out 0xa,R24
 0064                   .dbline 271
 0064 8BB1              in R24,0xb
 0066 8867              ori R24,120
 0068 8BB9              out 0xb,R24
 006A                   .dbline 271
 006A 0000              nop
 006C                   .dbline 271
 006C                   .dbline 271
 006C 85B1              in R24,0x5
 006E 8E7F              andi R24,254
 0070 85B9              out 0x5,R24
 0072                   .dbline 271
 0072                   .dbline 272
 0072           ;       SetCommand;
 0072 85B1              in R24,0x5
 0074 8D7F              andi R24,253
 0076 85B9              out 0x5,R24
 0078                   .dbline 272
 0078                   .dbline 274
 0078           ;     #ifndef _LCD1602_FULL_DATA_MODEL
 0078           ;       {
 0078                   .dbline 275
 0078           ;               LCD_SEND_HALF_CHAR_HIGH(Command);
 0078 8BB1              in R24,0xb
 007A 8778              andi R24,135
 007C 8BB9              out 0xb,R24
 007E                   .dbline 275
 007E 802F              mov R24,R16
 0080 807F              andi R24,240
 0082 8695              lsr R24
 0084 2BB0              in R2,0xb
 0086 282A              or R2,R24
 0088 2BB8              out 0xb,R2
 008A                   .dbline 275
 008A                   .dbline 276
 008A           ;         LCD_E = HIGH;
 008A 8BB1              in R24,0xb
 008C 8068              ori R24,128
 008E 8BB9              out 0xb,R24
 0090                   .dbline 277
 0090           ;           LCD_E = LOW;
 0090 8BB1              in R24,0xb
 0092 8F77              andi R24,127
 0094 8BB9              out 0xb,R24
 0096                   .dbline 278
 0096           ;       }
 0096                   .dbline 279
 0096           ;       {
 0096                   .dbline 280
 0096           ;         LCD_SEND_HALF_CHAR_LOW(Command);      
 0096 8BB1              in R24,0xb
 0098 8778              andi R24,135
 009A 8BB9              out 0xb,R24
 009C                   .dbline 280
 009C 802F              mov R24,R16
 009E 8F70              andi R24,15
 00A0 880F              lsl R24
 00A2 880F              lsl R24
 00A4 880F              lsl R24
 00A6 2BB0              in R2,0xb
 00A8 282A              or R2,R24
 00AA 2BB8              out 0xb,R2
 00AC                   .dbline 280
 00AC                   .dbline 281
 00AC           ;               LCD_E = HIGH;
 00AC 8BB1              in R24,0xb
 00AE 8068              ori R24,128
 00B0 8BB9              out 0xb,R24
 00B2                   .dbline 282
 00B2           ;               LCD_E = LOW;
 00B2 8BB1              in R24,0xb
 00B4 8F77              andi R24,127
 00B6 8BB9              out 0xb,R24
 00B8                   .dbline 283
 00B8           ;       }
 00B8                   .dbline 289
 00B8           ;     #else
 00B8           ;         LCD_DATA_PORT = Command;
 00B8           ;         LCD_E = HIGH;
 00B8           ;         LCD_E = LOW;
 00B8           ;     #endif
 00B8           ;     SetRead;          
 00B8 8AB1              in R24,0xa
 00BA 8778              andi R24,135
 00BC 8AB9              out 0xa,R24
 00BE                   .dbline 289
 00BE 8BB1              in R24,0xb
 00C0 8867              ori R24,120
 00C2 8BB9              out 0xb,R24
 00C4                   .dbline 289
 00C4 0000              nop
 00C6                   .dbline 289
 00C6                   .dbline 289
 00C6 85B1              in R24,0x5
 00C8 8160              ori R24,1
 00CA 85B9              out 0x5,R24
 00CC                   .dbline 289
 00CC                   .dbline 290
 00CC           ;       SetCommand;
 00CC 85B1              in R24,0x5
 00CE 8D7F              andi R24,253
 00D0 85B9              out 0x5,R24
 00D2                   .dbline 290
 00D2                   .dbline -2
 00D2           L12:
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym r Command 16 c
 00D4                   .dbend
 00D4                   .dbfunc e LCDSendData _LCDSendData fV
 00D4           ;           Data -> R16
                        .even
 00D4           _LCDSendData::
 00D4                   .dbline -1
 00D4                   .dbline 300
 00D4           ; }
 00D4           ; 
 00D4           ; /***********************************************************
 00D4           ; *   函数说明:向LCD发送数据函数                            *
 00D4           ; *   输入:    需要发送的数据                               *
 00D4           ; *   输出:    无                                           *
 00D4           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH() LCD_SEND_HALF_CHAR_LOW() *
 00D4           ; ***********************************************************/
 00D4           ; void LCDSendData(UINT8 Data)
 00D4           ; {
 00D4                   .dbline 301
 00D4           ;     SetWrite;
 00D4 8AB1              in R24,0xa
 00D6 8867              ori R24,120
 00D8 8AB9              out 0xa,R24
 00DA                   .dbline 301
 00DA 8BB1              in R24,0xb
 00DC 8867              ori R24,120
 00DE 8BB9              out 0xb,R24
 00E0                   .dbline 301
 00E0 0000              nop
 00E2                   .dbline 301
 00E2                   .dbline 301
 00E2 85B1              in R24,0x5
 00E4 8E7F              andi R24,254
 00E6 85B9              out 0x5,R24
 00E8                   .dbline 301
 00E8                   .dbline 302
 00E8           ;       SetData;
 00E8 85B1              in R24,0x5
 00EA 8260              ori R24,2
 00EC 85B9              out 0x5,R24
 00EE                   .dbline 302
 00EE                   .dbline 304
 00EE           ;     #ifndef _LCD1602_FULL_DATA_MODEL
 00EE           ;       {

⌨️ 快捷键说明

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