📄 rd_lcd1602b.s
字号:
; }
.dbline 289
; #else
; LCD_DATA_PORT = Command;
; LCD_E = HIGH;
; LCD_E = LOW;
; #endif
; SetRead;
in R24,0xa
andi R24,135
out 0xa,R24
.dbline 289
in R24,0xb
ori R24,120
out 0xb,R24
.dbline 289
nop
.dbline 289
.dbline 289
in R24,0x5
ori R24,1
out 0x5,R24
.dbline 289
.dbline 290
; SetCommand;
in R24,0x5
andi R24,253
out 0x5,R24
.dbline 290
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r Command 16 c
.dbend
.dbfunc e LCDSendData _LCDSendData fV
; Data -> R16
.even
_LCDSendData::
.dbline -1
.dbline 300
; }
;
; /***********************************************************
; * 函数说明:向LCD发送数据函数 *
; * 输入: 需要发送的数据 *
; * 输出: 无 *
; * 调用函数:LCD_SEND_HALF_CHAR_HIGH() LCD_SEND_HALF_CHAR_LOW() *
; ***********************************************************/
; void LCDSendData(UINT8 Data)
; {
.dbline 301
; SetWrite;
in R24,0xa
ori R24,120
out 0xa,R24
.dbline 301
in R24,0xb
ori R24,120
out 0xb,R24
.dbline 301
nop
.dbline 301
.dbline 301
in R24,0x5
andi R24,254
out 0x5,R24
.dbline 301
.dbline 302
; SetData;
in R24,0x5
ori R24,2
out 0x5,R24
.dbline 302
.dbline 304
; #ifndef _LCD1602_FULL_DATA_MODEL
; {
.dbline 305
; LCD_SEND_HALF_CHAR_HIGH(Data);
in R24,0xb
andi R24,135
out 0xb,R24
.dbline 305
mov R24,R16
andi R24,240
lsr R24
in R2,0xb
or R2,R24
out 0xb,R2
.dbline 305
.dbline 306
; LCD_E = HIGH;
in R24,0xb
ori R24,128
out 0xb,R24
.dbline 307
; LCD_E = LOW;
in R24,0xb
andi R24,127
out 0xb,R24
.dbline 308
; }
.dbline 310
;
; {
.dbline 311
; LCD_SEND_HALF_CHAR_LOW(Data);
in R24,0xb
andi R24,135
out 0xb,R24
.dbline 311
mov R24,R16
andi R24,15
lsl R24
lsl R24
lsl R24
in R2,0xb
or R2,R24
out 0xb,R2
.dbline 311
.dbline 312
; LCD_E = HIGH;
in R24,0xb
ori R24,128
out 0xb,R24
.dbline 313
; LCD_E = LOW;
in R24,0xb
andi R24,127
out 0xb,R24
.dbline 314
; }
.dbline 320
; #else
; LCD_DATA_PORT = Data;
; LCD_E = HIGH;
; LCD_E = LOW;
; #endif
; SetRead;
in R24,0xa
andi R24,135
out 0xa,R24
.dbline 320
in R24,0xb
ori R24,120
out 0xb,R24
.dbline 320
nop
.dbline 320
.dbline 320
in R24,0x5
ori R24,1
out 0x5,R24
.dbline 320
.dbline 321
; SetCommand;
in R24,0x5
andi R24,253
out 0x5,R24
.dbline 321
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbsym r Data 16 c
.dbend
.dbfunc e LCDWaitForReady _LCDWaitForReady fV
.even
_LCDWaitForReady::
.dbline -1
.dbline 331
; }
;
; /***********************************************************
; * 函数说明:等待LCD空闲状态函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:LCDDelayUs() *
; ***********************************************************/
; void LCDWaitForReady(void)
; {
.dbline 336
; #ifdef _USE_LCD_ONLY_WRITE
; LCDDelayUs(500);
; #else
;
; SetRead;
in R24,0xa
andi R24,135
out 0xa,R24
.dbline 336
in R24,0xb
ori R24,120
out 0xb,R24
.dbline 336
nop
.dbline 336
.dbline 336
in R24,0x5
ori R24,1
out 0x5,R24
.dbline 336
.dbline 337
; SetCommand;
in R24,0x5
andi R24,253
out 0x5,R24
.dbline 337
.dbline 339
;
; LCD_E = HIGH;
in R24,0xb
ori R24,128
out 0xb,R24
L15:
.dbline 340
; while (LCD_BF == 1); //RW=1,读PD7,为0表示空闲;
L16:
.dbline 340
in R24,0x9
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
cpi R24,1
breq L15
X2:
.dbline 341
; LCD_E = LOW;
in R24,0xb
andi R24,127
out 0xb,R24
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCDSetXY _LCDSetXY fV
; Address0 -> R20
; Y -> R10
; X -> R22
.even
_LCDSetXY::
rcall push_xgsetF00C
mov R10,R18
mov R22,R16
.dbline -1
.dbline 423
;
; #endif
; }
; #else
;
; /***********************************************************
; * 函数说明:向LCD发送指令函数 *
; * 输入: 需要发送的指令 *
; * 输出: 无 *
; * 调用函数:LCD_SEND_HALF_CHAR_HIGH() *
; * LCD_SEND_HALF_CHAR_LOW() *
; ***********************************************************/
; void LCDSendCommand(UINT8 Command)
; {
; SetCommand;
; {
; SetEnable;
;
; LCD_SEND_HALF_CHAR_HIGH(Command);
;
; SetDisable;
; }
; {
; SetEnable;
;
; LCD_SEND_HALF_CHAR_LOW(Command);
;
; SetDisable;
; }
; SetCommand;
; }
;
; /***********************************************************
; * 函数说明:向LCD发送数据函数 *
; * 输入: 需要发送的数据 *
; * 输出: 无 *
; * 调用函数:LCD_SEND_HALF_CHAR_HIGH() *
; * LCD_SEND_HALF_CHAR_LOW() *
; ***********************************************************/
; void LCDSendData(UINT8 Data)
; {
; SetData;
; {
; SetEnable;
;
; LCD_SEND_HALF_CHAR_HIGH(Data);
;
; SetDisable;
; }
;
; {
; SetEnable;
;
; LCD_SEND_HALF_CHAR_LOW(Data);
;
; SetDisable;
; }
; SetCommand;
; }
;
; /***********************************************************
; * 函数说明:等待LCD空闲状态函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:LCDDelayUs() *
; ***********************************************************/
; void LCDWaitForReady(void)
; {
; LCDDelayUs(30);
; }
;
; #endif
;
;
; /***********************************************************
; * 函数说明:设置显示坐标函数 *
; * 输入: x,y坐标值 *
; * 输出: 无 *
; * 调用函数:LCDWaitForReady() LCDSendCommand() *
; ***********************************************************/
; void LCDSetXY(UINT8 X,UINT8 Y)
; {
.dbline 425
; UINT8 Address;
; if (Y == 0)
tst R10
brne L19
X3:
.dbline 426
; {
.dbline 427
; Address = 0x80 + X;
mov R20,R22
subi R20,128 ; addi 128
.dbline 428
; }
rjmp L20
L19:
.dbline 430
; else
; {
.dbline 431
; Address = 0xc0 + X;
mov R20,R22
subi R20,64 ; addi 192
.dbline 432
; }
L20:
.dbline 434
;
; LCDWaitForReady();
rcall _LCDWaitForReady
.dbline 435
; LCDSendCommand(Address);
mov R16,R20
rcall _LCDSendCommand
.dbline -2
L18:
.dbline 0 ; func end
rjmp pop_xgsetF00C
.dbsym r Address0 20 c
.dbsym r Y 10 c
.dbsym r X 22 c
.dbend
.dbfunc e LCDDisplayString _LCDDisplayString fV
; String -> R20,R21
.even
_LCDDisplayString::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 445
; }
;
; /***********************************************************
; * 函数说明:LCD字符串显示函数 *
; * 输入: 要显示的字符串指针 *
; * 输出: 无 *
; * 调用函数:LCDWaitForReady() LCDSendData() *
; ***********************************************************/
; void LCDDisplayString(UINT8 *String)
; {
rjmp L23
L22:
.dbline 447
; while(*String)
; {
.dbline 448
; LCDWaitForReady();
rcall _LCDWaitForReady
.dbline 449
; LCDSendData(*String);
movw R30,R20
ldd R16,z+0
rcall _LCDSendData
.dbline 450
; String++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 451
; }
L23:
.dbline 446
movw R30,R20
ldd R2,z+0
tst R2
brne L22
X4:
.dbline -2
L21:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r String 20 pc
.dbend
.dbfunc e LCDDisplayNum _LCDDisplayNum fV
; a1 -> R20
; BitCount -> y+5
; Num -> y+1
.even
_LCDDisplayNum::
rcall push_arg4
st -y,R20
.dbline -1
.dbline 461
; }
;
; /***********************************************************
; * 函数说明:数值显示函数(HEX) *
; * 输入: 需要显示的数字(无符号长整形) *
; * 输出: 无 *
; * 调用函数:LCDSendData() *
; ***********************************************************/
; void LCDDisplayNum(unsigned long Num,UINT8 BitCount)
; {
.dbline 462
; UINT8 a = 0;
.dbline 463
; for (a = 8-BitCount ;a<8;a++)
ldi R20,8
ldd R0,y+5
sub R20,R0
rjmp L29
L26:
.dbline 464
; {
.dbline 465
; LCDSendData(CHR[(Num<<(a<<2))>>28]);
mov R2,R20
clr R3
lsl R2
rol R3
lsl R2
rol R3
ldd R16,y+1
ldd R17,y+2
ldd R18,y+3
ldd R19,y+4
st -y,R2
rcall lsl32
ldi R24,28
ldi R25,0
st -y,R24
rcall lsr32
movw R30,R16
ldi R24,<_CHR
ldi R25,>_CHR
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _LCDSendData
.dbline 466
; }
L27:
.dbline 463
inc R20
L29:
.dbline 463
cpi R20,8
brlo L26
X5:
.dbline -2
L25:
.dbline 0 ; func end
ld R20,y+
adiw R28,4
ret
.dbsym r a1 20 c
.dbsym l BitCount 5 c
.dbsym l Num 1 l
.dbend
.dbfunc e RunString _RunString fV
; EndX -> R3
; StartX -> R2
; Y -> R1
; String -> R0,R1
.even
_RunString::
.dbline -1
.dbline 477
; }
;
;
; /***********************************************************
; * 函数说明:滚屏字幕效果 *
; * 输入: 需要滚屏的字符串 长度 位置 *
; * 输出: 无 *
; * 调用函数:LOCATE() PRINT() *
; ***********************************************************/
; void RunString(UINT8 *String,UINT8 Y,UINT8 StartX,UINT8 EndX)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -