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

📄 rd_lcd1602b.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00EE                   .dbline 305
 00EE           ;               LCD_SEND_HALF_CHAR_HIGH(Data);
 00EE 8BB1              in R24,0xb
 00F0 8778              andi R24,135
 00F2 8BB9              out 0xb,R24
 00F4                   .dbline 305
 00F4 802F              mov R24,R16
 00F6 807F              andi R24,240
 00F8 8695              lsr R24
 00FA 2BB0              in R2,0xb
 00FC 282A              or R2,R24
 00FE 2BB8              out 0xb,R2
 0100                   .dbline 305
 0100                   .dbline 306
 0100           ;               LCD_E = HIGH;
 0100 8BB1              in R24,0xb
 0102 8068              ori R24,128
 0104 8BB9              out 0xb,R24
 0106                   .dbline 307
 0106           ;           LCD_E = LOW;
 0106 8BB1              in R24,0xb
 0108 8F77              andi R24,127
 010A 8BB9              out 0xb,R24
 010C                   .dbline 308
 010C           ;       }
 010C                   .dbline 310
 010C           ; 
 010C           ;       {
 010C                   .dbline 311
 010C           ;         LCD_SEND_HALF_CHAR_LOW(Data); 
 010C 8BB1              in R24,0xb
 010E 8778              andi R24,135
 0110 8BB9              out 0xb,R24
 0112                   .dbline 311
 0112 802F              mov R24,R16
 0114 8F70              andi R24,15
 0116 880F              lsl R24
 0118 880F              lsl R24
 011A 880F              lsl R24
 011C 2BB0              in R2,0xb
 011E 282A              or R2,R24
 0120 2BB8              out 0xb,R2
 0122                   .dbline 311
 0122                   .dbline 312
 0122           ;               LCD_E = HIGH;
 0122 8BB1              in R24,0xb
 0124 8068              ori R24,128
 0126 8BB9              out 0xb,R24
 0128                   .dbline 313
 0128           ;               LCD_E = LOW;
 0128 8BB1              in R24,0xb
 012A 8F77              andi R24,127
 012C 8BB9              out 0xb,R24
 012E                   .dbline 314
 012E           ;       }
 012E                   .dbline 320
 012E           ;     #else
 012E           ;         LCD_DATA_PORT = Data;
 012E           ;         LCD_E = HIGH;
 012E           ;         LCD_E = LOW;
 012E           ;     #endif
 012E           ;     SetRead;          
 012E 8AB1              in R24,0xa
 0130 8778              andi R24,135
 0132 8AB9              out 0xa,R24
 0134                   .dbline 320
 0134 8BB1              in R24,0xb
 0136 8867              ori R24,120
 0138 8BB9              out 0xb,R24
 013A                   .dbline 320
 013A 0000              nop
 013C                   .dbline 320
 013C                   .dbline 320
 013C 85B1              in R24,0x5
 013E 8160              ori R24,1
 0140 85B9              out 0x5,R24
 0142                   .dbline 320
 0142                   .dbline 321
 0142           ;       SetCommand;
 0142 85B1              in R24,0x5
 0144 8D7F              andi R24,253
 0146 85B9              out 0x5,R24
 0148                   .dbline 321
 0148                   .dbline -2
 0148           L13:
 0148                   .dbline 0 ; func end
 0148 0895              ret
 014A                   .dbsym r Data 16 c
 014A                   .dbend
 014A                   .dbfunc e LCDWaitForReady _LCDWaitForReady fV
                        .even
 014A           _LCDWaitForReady::
 014A                   .dbline -1
 014A                   .dbline 331
 014A           ; }
 014A           ; 
 014A           ; /***********************************************************
 014A           ; *   函数说明:等待LCD空闲状态函数                          *
 014A           ; *   输入:    无                                           *
 014A           ; *   输出:    无                                           *
 014A           ; *   调用函数:LCDDelayUs()                                 *
 014A           ; ***********************************************************/
 014A           ; void LCDWaitForReady(void)
 014A           ; {
 014A                   .dbline 336
 014A           ; #ifdef _USE_LCD_ONLY_WRITE
 014A           ;       LCDDelayUs(500);
 014A           ; #else
 014A           ;       
 014A           ;       SetRead;
 014A 8AB1              in R24,0xa
 014C 8778              andi R24,135
 014E 8AB9              out 0xa,R24
 0150                   .dbline 336
 0150 8BB1              in R24,0xb
 0152 8867              ori R24,120
 0154 8BB9              out 0xb,R24
 0156                   .dbline 336
 0156 0000              nop
 0158                   .dbline 336
 0158                   .dbline 336
 0158 85B1              in R24,0x5
 015A 8160              ori R24,1
 015C 85B9              out 0x5,R24
 015E                   .dbline 336
 015E                   .dbline 337
 015E           ;       SetCommand;
 015E 85B1              in R24,0x5
 0160 8D7F              andi R24,253
 0162 85B9              out 0x5,R24
 0164                   .dbline 337
 0164                   .dbline 339
 0164           ;    
 0164           ;     LCD_E = HIGH;
 0164 8BB1              in R24,0xb
 0166 8068              ori R24,128
 0168 8BB9              out 0xb,R24
 016A           L15:
 016A                   .dbline 340
 016A           ;       while (LCD_BF == 1);   //RW=1,读PD7,为0表示空闲;
 016A           L16:
 016A                   .dbline 340
 016A 89B1              in R24,0x9
 016C 8695              lsr R24
 016E 8695              lsr R24
 0170 8695              lsr R24
 0172 8695              lsr R24
 0174 8695              lsr R24
 0176 8695              lsr R24
 0178 8170              andi R24,1
 017A 8130              cpi R24,1
 017C B1F3              breq L15
 017E           X2:
 017E                   .dbline 341
 017E           ;     LCD_E = LOW;
 017E 8BB1              in R24,0xb
 0180 8F77              andi R24,127
 0182 8BB9              out 0xb,R24
 0184                   .dbline -2
 0184           L14:
 0184                   .dbline 0 ; func end
 0184 0895              ret
 0186                   .dbend
 0186                   .dbfunc e LCDSetXY _LCDSetXY fV
 0186           ;       Address0 -> R20
 0186           ;              Y -> R10
 0186           ;              X -> R22
                        .even
 0186           _LCDSetXY::
 0186 00D0              rcall push_xgsetF00C
 0188 A22E              mov R10,R18
 018A 602F              mov R22,R16
 018C                   .dbline -1
 018C                   .dbline 423
 018C           ;       
 018C           ; #endif
 018C           ; }
 018C           ; #else
 018C           ; 
 018C           ; /***********************************************************
 018C           ; *   函数说明:向LCD发送指令函数                            *
 018C           ; *   输入:    需要发送的指令                               *
 018C           ; *   输出:    无                                           *
 018C           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH()                    *
 018C           ; *             LCD_SEND_HALF_CHAR_LOW()                     *
 018C           ; ***********************************************************/
 018C           ; void LCDSendCommand(UINT8 Command)
 018C           ; {
 018C           ;       SetCommand;
 018C           ;       {
 018C           ;           SetEnable;
 018C           ;               
 018C           ;               LCD_SEND_HALF_CHAR_HIGH(Command);
 018C           ;               
 018C           ;           SetDisable;
 018C           ;       }
 018C           ;       {
 018C           ;           SetEnable;
 018C           ;               
 018C           ;         LCD_SEND_HALF_CHAR_LOW(Command);      
 018C           ;               
 018C           ;               SetDisable;
 018C           ;       }
 018C           ;       SetCommand;
 018C           ; }
 018C           ; 
 018C           ; /***********************************************************
 018C           ; *   函数说明:向LCD发送数据函数                            *
 018C           ; *   输入:    需要发送的数据                               *
 018C           ; *   输出:    无                                           *
 018C           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH()                    *
 018C           ; *             LCD_SEND_HALF_CHAR_LOW()                     *
 018C           ; ***********************************************************/
 018C           ; void LCDSendData(UINT8 Data)
 018C           ; {
 018C           ;       SetData;
 018C           ;       {
 018C           ;           SetEnable;
 018C           ;               
 018C           ;               LCD_SEND_HALF_CHAR_HIGH(Data);
 018C           ;               
 018C           ;           SetDisable;
 018C           ;       }
 018C           ; 
 018C           ;       {
 018C           ;           SetEnable;
 018C           ;               
 018C           ;         LCD_SEND_HALF_CHAR_LOW(Data); 
 018C           ;               
 018C           ;               SetDisable;
 018C           ;       }
 018C           ;       SetCommand;
 018C           ; }
 018C           ; 
 018C           ; /***********************************************************
 018C           ; *   函数说明:等待LCD空闲状态函数                          *
 018C           ; *   输入:    无                                           *
 018C           ; *   输出:    无                                           *
 018C           ; *   调用函数:LCDDelayUs()                                 *
 018C           ; ***********************************************************/
 018C           ; void LCDWaitForReady(void)
 018C           ; {
 018C           ;       LCDDelayUs(30);
 018C           ; }
 018C           ; 
 018C           ; #endif
 018C           ; 
 018C           ; 
 018C           ; /***********************************************************
 018C           ; *   函数说明:设置显示坐标函数                             *
 018C           ; *   输入:    x,y坐标值                                    *
 018C           ; *   输出:    无                                           *
 018C           ; *   调用函数:LCDWaitForReady()  LCDSendCommand()          *
 018C           ; ***********************************************************/
 018C           ; void LCDSetXY(UINT8 X,UINT8 Y)
 018C           ; {
 018C                   .dbline 425
 018C           ;     UINT8 Address;
 018C           ;     if (Y == 0)
 018C AA20              tst R10
 018E 19F4              brne L19
 0190           X3:
 0190                   .dbline 426
 0190           ;       {
 0190                   .dbline 427
 0190           ;           Address = 0x80 + X;
 0190 462F              mov R20,R22
 0192 4058              subi R20,128    ; addi 128
 0194                   .dbline 428
 0194           ;       }
 0194 02C0              rjmp L20
 0196           L19:
 0196                   .dbline 430
 0196           ;     else
 0196           ;       { 
 0196                   .dbline 431
 0196           ;         Address = 0xc0 + X;
 0196 462F              mov R20,R22
 0198 4054              subi R20,64    ; addi 192
 019A                   .dbline 432
 019A           ;       }
 019A           L20:
 019A                   .dbline 434
 019A           ;       
 019A           ;       LCDWaitForReady();
 019A D7DF              rcall _LCDWaitForReady
 019C                   .dbline 435
 019C           ;     LCDSendCommand(Address);
 019C 042F              mov R16,R20
 019E 5FDF              rcall _LCDSendCommand
 01A0                   .dbline -2
 01A0           L18:
 01A0                   .dbline 0 ; func end
 01A0 00C0              rjmp pop_xgsetF00C
 01A2                   .dbsym r Address0 20 c
 01A2                   .dbsym r Y 10 c
 01A2                   .dbsym r X 22 c
 01A2                   .dbend
 01A2                   .dbfunc e LCDDisplayString _LCDDisplayString fV
 01A2           ;         String -> R20,R21

⌨️ 快捷键说明

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