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