📄 rd_lcd1602b.lis
字号:
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 + -