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

📄 rd_lcd1602b.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 004C                   .dbline 231
 004C           ;     LCDWaitForReady();
 004C 3FD0              xcall _LCDWaitForReady
 004E                   .dbline 232
 004E           ;       LCDSendCommand(LCD_CMD_CLS);
 004E 01E0              ldi R16,1
 0050 09D0              xcall _LCDSendCommand
 0052                   .dbline 233
 0052           ;       LCDDelay(2);
 0052 02E0              ldi R16,2
 0054 10E0              ldi R17,0
 0056 D4DF              xcall _LCDDelay
 0058                   .dbline 234
 0058           ;       LCDSendCommand(LCD_CMD_ENTER_SET);
 0058 02E0              ldi R16,2
 005A 04D0              xcall _LCDSendCommand
 005C                   .dbline 235
 005C           ;     LCDWaitForReady();
 005C 37D0              xcall _LCDWaitForReady
 005E                   .dbline 236
 005E           ;     LCDSendCommand(LCD_CMD_NOT_MOVE);
 005E 04E1              ldi R16,20
 0060 01D0              xcall _LCDSendCommand
 0062                   .dbline -2
 0062           L11:
 0062                   .dbline 0 ; func end
 0062 0895              ret
 0064                   .dbend
 0064                   .dbfunc e LCDSendCommand _LCDSendCommand fV
 0064           ;        Command -> R16
                        .even
 0064           _LCDSendCommand::
 0064                   .dbline -1
 0064                   .dbline 248
 0064           ;       
 0064           ; }
 0064           ; 
 0064           ; #ifndef _Use_LCD1602B_Serial
 0064           ; /***********************************************************
 0064           ; *   函数说明:向LCD发送指令函数                            *
 0064           ; *   输入:    需要发送的指令                               *
 0064           ; *   输出:    无                                           *
 0064           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH() LCD_SEND_HALF_CHAR_LOW() *
 0064           ; ***********************************************************/
 0064           ; void LCDSendCommand(char Command)
 0064           ; {
 0064                   .dbline 249
 0064           ;       SetWrite;
 0064 8FEF              ldi R24,255
 0066 8ABB              out 0x1a,R24
 0068                   .dbline 249
 0068                   .dbline 249
 0068 88B3              in R24,0x18
 006A 8D7F              andi R24,253
 006C 88BB              out 0x18,R24
 006E                   .dbline 249
 006E                   .dbline 250
 006E           ;       SetCommand;
 006E 88B3              in R24,0x18
 0070 8E7F              andi R24,254
 0072 88BB              out 0x18,R24
 0074                   .dbline 250
 0074                   .dbline 263
 0074           ;     #ifndef _LCD1602_FULL_DATA_MODEL
 0074           ;       {
 0074           ;               LCD_SEND_HALF_CHAR_HIGH(Command);
 0074           ;         LCD_E = HIGH;
 0074           ;           LCD_E = LOW;
 0074           ;       }
 0074           ;       {
 0074           ;         LCD_SEND_HALF_CHAR_LOW(Command);      
 0074           ;               LCD_E = HIGH;
 0074           ;               LCD_E = LOW;
 0074           ;       }
 0074           ;     #else
 0074           ;         LCD_DATA_PORT = Command;
 0074 0BBB              out 0x1b,R16
 0076                   .dbline 264
 0076           ;         LCD_E = HIGH;
 0076 88B3              in R24,0x18
 0078 8460              ori R24,4
 007A 88BB              out 0x18,R24
 007C                   .dbline 265
 007C           ;         LCD_E = LOW;
 007C 88B3              in R24,0x18
 007E 8B7F              andi R24,251
 0080 88BB              out 0x18,R24
 0082                   .dbline 267
 0082           ;     #endif
 0082           ;     SetRead;          
 0082 2224              clr R2
 0084 2ABA              out 0x1a,R2
 0086                   .dbline 267
 0086 8FEF              ldi R24,255
 0088 8BBB              out 0x1b,R24
 008A                   .dbline 267
 008A                   .dbline 267
 008A 88B3              in R24,0x18
 008C 8260              ori R24,2
 008E 88BB              out 0x18,R24
 0090                   .dbline 267
 0090                   .dbline 268
 0090           ;       SetCommand;
 0090 88B3              in R24,0x18
 0092 8E7F              andi R24,254
 0094 88BB              out 0x18,R24
 0096                   .dbline 268
 0096                   .dbline -2
 0096           L12:
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r Command 16 c
 0098                   .dbend
 0098                   .dbfunc e LCDSendData _LCDSendData fV
 0098           ;           Data -> R16
                        .even
 0098           _LCDSendData::
 0098                   .dbline -1
 0098                   .dbline 278
 0098           ; }
 0098           ; 
 0098           ; /***********************************************************
 0098           ; *   函数说明:向LCD发送数据函数                            *
 0098           ; *   输入:    需要发送的数据                               *
 0098           ; *   输出:    无                                           *
 0098           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH() LCD_SEND_HALF_CHAR_LOW() *
 0098           ; ***********************************************************/
 0098           ; void LCDSendData(char Data)
 0098           ; {
 0098                   .dbline 279
 0098           ;     SetWrite;
 0098 8FEF              ldi R24,255
 009A 8ABB              out 0x1a,R24
 009C                   .dbline 279
 009C                   .dbline 279
 009C 88B3              in R24,0x18
 009E 8D7F              andi R24,253
 00A0 88BB              out 0x18,R24
 00A2                   .dbline 279
 00A2                   .dbline 280
 00A2           ;       SetData;
 00A2 88B3              in R24,0x18
 00A4 8160              ori R24,1
 00A6 88BB              out 0x18,R24
 00A8                   .dbline 280
 00A8                   .dbline 294
 00A8           ;     #ifndef _LCD1602_FULL_DATA_MODEL
 00A8           ;       {
 00A8           ;               LCD_SEND_HALF_CHAR_HIGH(Data);
 00A8           ;               LCD_E = HIGH;
 00A8           ;           LCD_E = LOW;
 00A8           ;       }
 00A8           ; 
 00A8           ;       {
 00A8           ;         LCD_SEND_HALF_CHAR_LOW(Data); 
 00A8           ;               LCD_E = HIGH;
 00A8           ;               LCD_E = LOW;
 00A8           ;       }
 00A8           ;     #else
 00A8           ;         LCD_DATA_PORT = Data;
 00A8 0BBB              out 0x1b,R16
 00AA                   .dbline 295
 00AA           ;         LCD_E = HIGH;
 00AA 88B3              in R24,0x18
 00AC 8460              ori R24,4
 00AE 88BB              out 0x18,R24
 00B0                   .dbline 296
 00B0           ;         LCD_E = LOW;
 00B0 88B3              in R24,0x18
 00B2 8B7F              andi R24,251
 00B4 88BB              out 0x18,R24
 00B6                   .dbline 298
 00B6           ;     #endif
 00B6           ;     SetRead;          
 00B6 2224              clr R2
 00B8 2ABA              out 0x1a,R2
 00BA                   .dbline 298
 00BA 8FEF              ldi R24,255
 00BC 8BBB              out 0x1b,R24
 00BE                   .dbline 298
 00BE                   .dbline 298
 00BE 88B3              in R24,0x18
 00C0 8260              ori R24,2
 00C2 88BB              out 0x18,R24
 00C4                   .dbline 298
 00C4                   .dbline 299
 00C4           ;       SetCommand;
 00C4 88B3              in R24,0x18
 00C6 8E7F              andi R24,254
 00C8 88BB              out 0x18,R24
 00CA                   .dbline 299
 00CA                   .dbline -2
 00CA           L13:
 00CA                   .dbline 0 ; func end
 00CA 0895              ret
 00CC                   .dbsym r Data 16 c
 00CC                   .dbend
 00CC                   .dbfunc e LCDWaitForReady _LCDWaitForReady fV
                        .even
 00CC           _LCDWaitForReady::
 00CC                   .dbline -1
 00CC                   .dbline 309
 00CC           ; }
 00CC           ; 
 00CC           ; /***********************************************************
 00CC           ; *   函数说明:等待LCD空闲状态函数                          *
 00CC           ; *   输入:    无                                           *
 00CC           ; *   输出:    无                                           *
 00CC           ; *   调用函数:LCDDelayUs()                                 *
 00CC           ; ***********************************************************/
 00CC           ; void LCDWaitForReady(void)
 00CC           ; {
 00CC                   .dbline 311
 00CC           ; #ifdef _USE_LCD_ONLY_WRITE
 00CC           ;       LCDDelayUs(500);
 00CC 04EF              ldi R16,500
 00CE 11E0              ldi R17,1
 00D0 A7DF              xcall _LCDDelayUs
 00D2                   .dbline -2
 00D2           L14:
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbend
 00D4                   .dbfunc e LCDSetXY _LCDSetXY fV
 00D4           ;       Address0 -> R20
 00D4           ;              Y -> R10
 00D4           ;              X -> R22
                        .even
 00D4           _LCDSetXY::
 00D4 0E940000          xcall push_xgsetF00C
 00D8 A22E              mov R10,R18
 00DA 602F              mov R22,R16
 00DC                   .dbline -1
 00DC                   .dbline 401
 00DC           ; #else
 00DC           ;       
 00DC           ;       SetRead;
 00DC           ;       SetCommand;
 00DC           ;    
 00DC           ;     LCD_E = HIGH;
 00DC           ;       while (LCD_BF == 1);   //RW=1,读PD7,为0表示空闲;
 00DC           ;     LCD_E = LOW;
 00DC           ;       
 00DC           ; #endif
 00DC           ; }
 00DC           ; #else
 00DC           ; 
 00DC           ; /***********************************************************
 00DC           ; *   函数说明:向LCD发送指令函数                            *
 00DC           ; *   输入:    需要发送的指令                               *
 00DC           ; *   输出:    无                                           *
 00DC           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH()                    *
 00DC           ; *             LCD_SEND_HALF_CHAR_LOW()                     *
 00DC           ; ***********************************************************/
 00DC           ; void LCDSendCommand(char Command)
 00DC           ; {
 00DC           ;       SetCommand;
 00DC           ;       {
 00DC           ;           SetEnable;
 00DC           ;               
 00DC           ;               LCD_SEND_HALF_CHAR_HIGH(Command);
 00DC           ;               
 00DC           ;           SetDisable;
 00DC           ;       }
 00DC           ;       {
 00DC           ;           SetEnable;
 00DC           ;               
 00DC           ;         LCD_SEND_HALF_CHAR_LOW(Command);      
 00DC           ;               
 00DC           ;               SetDisable;
 00DC           ;       }
 00DC           ;       SetCommand;
 00DC           ; }
 00DC           ; 
 00DC           ; /***********************************************************
 00DC           ; *   函数说明:向LCD发送数据函数                            *
 00DC           ; *   输入:    需要发送的数据                               *
 00DC           ; *   输出:    无                                           *
 00DC           ; *   调用函数:LCD_SEND_HALF_CHAR_HIGH()                    *
 00DC           ; *             LCD_SEND_HALF_CHAR_LOW()                     *
 00DC           ; ***********************************************************/
 00DC           ; void LCDSendData(char Data)
 00DC           ; {
 00DC           ;       SetData;
 00DC           ;       {
 00DC           ;           SetEnable;
 00DC           ;               
 00DC           ;               LCD_SEND_HALF_CHAR_HIGH(Data);
 00DC           ;               
 00DC           ;           SetDisable;
 00DC           ;       }
 00DC           ; 
 00DC           ;       {
 00DC           ;           SetEnable;
 00DC           ;               
 00DC           ;         LCD_SEND_HALF_CHAR_LOW(Data); 
 00DC           ;               
 00DC           ;               SetDisable;
 00DC           ;       }
 00DC           ;       SetCommand;
 00DC           ; }
 00DC           ; 
 00DC           ; /***********************************************************
 00DC           ; *   函数说明:等待LCD空闲状态函数                          *
 00DC           ; *   输入:    无                                           *
 00DC           ; *   输出:    无                                           *
 00DC           ; *   调用函数:LCDDelayUs()                                 *
 00DC           ; ***********************************************************/
 00DC           ; void LCDWaitForReady(void)
 00DC           ; {
 00DC           ;       LCDDelayUs(30);
 00DC           ; }
 00DC           ; 
 00DC           ; #endif
 00DC           ; 
 00DC           ; 
 00DC           ; /***********************************************************
 00DC           ; *   函数说明:设置显示坐标函数                             *
 00DC           ; *   输入:    x,y坐标值                                    *
 00DC           ; *   输出:    无                                           *
 00DC           ; *   调用函数:LCDWaitForReady()  LCDSendCommand()          *
 00DC           ; ***********************************************************/
 00DC           ; void LCDSetXY(char X,char Y)
 00DC           ; {
 00DC                   .dbline 403
 00DC           ;     char Address;
 00DC           ;     if (Y == 0)
 00DC AA20              tst R10
 00DE 19F4              brne L16
 00E0           X2:
 00E0                   .dbline 404
 00E0           ;       {
 00E0                   .dbline 405
 00E0           ;           Address = 0x80 + X;
 00E0 462F              mov R20,R22
 00E2 4058              subi R20,128    ; addi 128
 00E4                   .dbline 406
 00E4           ;       }
 00E4 02C0              xjmp L17
 00E6           L16:
 00E6                   .dbline 408
 00E6           ;     else
 00E6           ;       { 
 00E6                   .dbline 409
 00E6           ;         Address = 0xc0 + X;
 00E6 462F              mov R20,R22

⌨️ 快捷键说明

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