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