📄 lcd1602pbpd.s
字号:
; write(0,0x06);
ldi R18,6
clr R16
xcall _write
; }
xjmp L174
L173:
; else if(!strcmp(str,"DIS_SHIFT")) //disable shift
ldi R18,<L180
ldi R19,>L180
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L178
X65:
; {
; shiftEn=0;
clr R2
sts L155,R2
; if(isACinc)
lds R2,L156
tst R2
breq L181
X66:
; write(0,0x05);
ldi R18,5
clr R16
xcall _write
xjmp L179
L181:
; else
; write(0,0x04);
ldi R18,4
clr R16
xcall _write
; }
xjmp L179
L178:
; /*--------------------------------------------------
; dispEn & cursorEn & blinkEn共用一个命令设置
; --------------------------------------------------*/
; else if(!strcmp(str,"OPEN_LCD")) //opern lcd
ldi R18,<L185
ldi R19,>L185
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L183
X67:
; {
; dispEn=1;
ldi R24,1
sts L152,R24
; if(cursorEn)
lds R2,L153
tst R2
breq L186
X68:
; if(blinkEn)
lds R2,L154
tst R2
breq L188
X69:
; write(0,0x0F);
ldi R18,15
clr R16
xcall _write
xjmp L184
L188:
; else
; write(0,0x0E);
ldi R18,14
clr R16
xcall _write
xjmp L184
L186:
; else
; if(blinkEn)
lds R2,L154
tst R2
breq L190
X70:
; write(0,0x0D);
ldi R18,13
clr R16
xcall _write
xjmp L184
L190:
; else
; write(0,0x0C);
ldi R18,12
clr R16
xcall _write
; }
xjmp L184
L183:
; else if(!strcmp(str,"CLOSE_LCD")) //close lcd
ldi R18,<L194
ldi R19,>L194
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L192
X71:
; {
; dispEn=0;
clr R2
sts L152,R2
; if(cursorEn)
lds R2,L153
tst R2
breq L195
X72:
; if(blinkEn)
lds R2,L154
tst R2
breq L197
X73:
; write(0,0x0B);
ldi R18,11
clr R16
xcall _write
xjmp L193
L197:
; else
; write(0,0x0A);
ldi R18,10
clr R16
xcall _write
xjmp L193
L195:
; else
; if(blinkEn)
lds R2,L154
tst R2
breq L199
X74:
; write(0,0x09);
ldi R18,9
clr R16
xcall _write
xjmp L193
L199:
; else
; write(0,0x08);
ldi R18,8
clr R16
xcall _write
; }
xjmp L193
L192:
; else if(!strcmp(str,"OPEN_CURS")) //open cursor
ldi R18,<L203
ldi R19,>L203
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L201
X75:
; {
; cursorEn=1;
ldi R24,1
sts L153,R24
; if(dispEn)
lds R2,L152
tst R2
breq L204
X76:
; if(blinkEn)
lds R2,L154
tst R2
breq L206
X77:
; write(0,0x0F);
ldi R18,15
clr R16
xcall _write
xjmp L202
L206:
; else
; write(0,0x0E);
ldi R18,14
clr R16
xcall _write
xjmp L202
L204:
; else
; if(blinkEn)
lds R2,L154
tst R2
breq L208
X78:
; write(0,0x0B);
ldi R18,11
clr R16
xcall _write
xjmp L202
L208:
; else
; write(0,0x0A);
ldi R18,10
clr R16
xcall _write
; }
xjmp L202
L201:
; else if(!strcmp(str,"CLOSE_CURS")) //close cursor
ldi R18,<L212
ldi R19,>L212
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L210
X79:
; {
; cursorEn=0;
clr R2
sts L153,R2
; if(dispEn)
lds R2,L152
tst R2
breq L213
X80:
; if(blinkEn)
lds R2,L154
tst R2
breq L215
X81:
; write(0,0x0D);
ldi R18,13
clr R16
xcall _write
xjmp L211
L215:
; else
; write(0,0x0C);
ldi R18,12
clr R16
xcall _write
xjmp L211
L213:
; else
; if(blinkEn)
lds R2,L154
tst R2
breq L217
X82:
; write(0,0x09);
ldi R18,9
clr R16
xcall _write
xjmp L211
L217:
; else
; write(0,0x08);
ldi R18,8
clr R16
xcall _write
; }
xjmp L211
L210:
; else if(!strcmp(str,"EN_BLINK")) //enable blink cursor
ldi R18,<L221
ldi R19,>L221
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L219
X83:
; {
; blinkEn=1;
ldi R24,1
sts L154,R24
; if(dispEn)
lds R2,L152
tst R2
breq L222
X84:
; if(cursorEn)
lds R2,L153
tst R2
breq L224
X85:
; write(0,0x0F);
ldi R18,15
clr R16
xcall _write
xjmp L220
L224:
; else
; write(0,0x0D);
ldi R18,13
clr R16
xcall _write
xjmp L220
L222:
; else
; if(cursorEn)
lds R2,L153
tst R2
breq L226
X86:
; write(0,0x0B);
ldi R18,11
clr R16
xcall _write
xjmp L220
L226:
; else
; write(0,0x09);
ldi R18,9
clr R16
xcall _write
; }
xjmp L220
L219:
; else if(!strcmp(str,"DIS_BLINK")) //disable blink cursor
ldi R18,<L230
ldi R19,>L230
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L228
X87:
; {
; blinkEn=0;
clr R2
sts L154,R2
; if(dispEn)
lds R2,L152
tst R2
breq L231
X88:
; if(cursorEn)
lds R2,L153
tst R2
breq L233
X89:
; write(0,0x0E);
ldi R18,14
clr R16
xcall _write
xjmp L229
L233:
; else
; write(0,0x0C);
ldi R18,12
clr R16
xcall _write
xjmp L229
L231:
; else
; if(cursorEn)
lds R2,L153
tst R2
breq L235
X90:
; write(0,0x0A);
ldi R18,10
clr R16
xcall _write
xjmp L229
L235:
; else
; write(0,0x08);
ldi R18,8
clr R16
xcall _write
; }
xjmp L229
L228:
; /*--------------------------------------------------
; dispEn & cursorEn & blinkEn共用一个命令设置
; --------------------------------------------------*/
; else if(!strcmp(str,"RIGHT_SCR")) //right shift screen
ldi R18,<L239
ldi R19,>L239
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L237
X91:
; write(0,0x1c);
ldi R18,28
clr R16
xcall _write
xjmp L238
L237:
; else if(!strcmp(str,"LEFT_SCR")) //left shift screen
ldi R18,<L242
ldi R19,>L242
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L240
X92:
; write(0,0x18);
ldi R18,24
clr R16
xcall _write
xjmp L241
L240:
; else if(!strcmp(str,"RIGHT_CURS")) //right shift cursor
ldi R18,<L245
ldi R19,>L245
movw R16,R10
xcall _strcmp
movw R12,R16
cpi R16,0
cpc R16,R17
brne L243
X93:
; write(0,0x14);
ldi R18,20
clr R16
xcall _write
xjmp L244
L243:
; else if(!strcmp(str,"LEFT_CURS")) //left shift cursor
ldi R18,<L248
ldi R19,>L248
movw R16,R10
xcall _strcmp
movw R10,R16
cpi R16,0
cpc R16,R17
brne L246
X94:
; write(0,0x10);
ldi R18,16
clr R16
xcall _write
L246:
L244:
L241:
L238:
L229:
L220:
L211:
L202:
L193:
L184:
L179:
L174:
L169:
L164:
L161:
L158:
L151:
.dbline 0 ; func end
xjmp pop_xgset003C
.even
_LCD1602_init::
; }
; /*--------------------------------------------------------------------
; 函数名称:LCD1602初始化
; 函数功能:
; 注意事项:
; 提示说明:无
; 输 入:
; 返 回:无
; --------------------------------------------------------------------*/
; void LCD1602_init(void)
; {
; OUT_RS;
sbi 0x17,5
; OUT_RW;
sbi 0x17,6
; OUT_E;
sbi 0x17,7
; OUT_D4;
sbi 0x11,4
; OUT_D5;
sbi 0x11,5
; OUT_D6;
sbi 0x11,6
; OUT_D7;
sbi 0x11,7
; delay50ms(1);
ldi R16,1
ldi R17,0
xcall _delay50ms
;
; CLR_D7;
cbi 0x12,7
; CLR_D6;
cbi 0x12,6
; SET_D5;
sbi 0x12,5
; SET_D4;
sbi 0x12,4
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; CLR_RS;
cbi 0x18,5
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; CLR_RW;
cbi 0x18,6
;
; SET_E;
sbi 0x18,7
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; CLR_E;
cbi 0x18,7
; delay50us(200);
ldi R16,200
ldi R17,0
xcall _delay50us
; SET_E;
sbi 0x18,7
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; CLR_E;
cbi 0x18,7
; delay50us(200);
ldi R16,200
ldi R17,0
xcall _delay50us
; SET_E;
sbi 0x18,7
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; CLR_E;
cbi 0x18,7
; delay50us(200);
ldi R16,200
ldi R17,0
xcall _delay50us
;
; CLR_D7;
cbi 0x12,7
; CLR_D6;
cbi 0x12,6
; SET_D5;
sbi 0x12,5
; CLR_D4;
cbi 0x12,4
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; SET_E;
sbi 0x18,7
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; CLR_E;
cbi 0x18,7
; DELAY();
nop
nop
nop
nop
nop
nop
nop
nop
; LCD1602_setCmd("OPEN_LCD");
ldi R16,<L185
ldi R17,>L185
xcall _LCD1602_setCmd
; LCD1602_setCmd("CLR_SCR");
ldi R16,<L159
ldi R17,>L159
xcall _LCD1602_setCmd
; LCD1602_setCmd("INC_AC");
ldi R16,<L165
ldi R17,>L165
xcall _LCD1602_setCmd
L249:
.dbline 0 ; func end
ret
; ch -> R10
; adr -> R12
.even
_LCD1602_putc::
st -y,R10
st -y,R12
mov R10,R18
mov R12,R16
; //LCD1602_setCmd("OPEN_CURS");
; //LCD1602_setCmd("GO_HOME");
; }
; /*--------------------------------------------------------------------
; 宏名称:设置AC值
; 宏功能:设置AC值啦
; 注意事项:
; 提示说明:
; 输 入:
; 返 回:无
; --------------------------------------------------------------------*/
; #define LCD1602_setAC(adr) write(0,adr)
; /*--------------------------------------------------------------------
; 函数名称:输出一个字符
; 函数功能:
; 注意事项:对于高速CPU,应加延时,好像是废话~
; 提示说明:调用LCD1602_putc(0x80,'A'),则在第一行第一个字符处输出'A'
; 输 入:
; 返 回:无
; --------------------------------------------------------------------*/
; void LCD1602_putc(uint8 adr,uint8 ch)
; {
; write(0,adr);
mov R18,R12
clr R16
xcall _write
; write(1,ch);
mov R18,R10
ldi R16,1
xcall _write
L250:
.dbline 0 ; func end
ld R12,y+
ld R10,y+
ret
; str -> R10,R11
; startAdr -> R12
.even
_LCD1602_puts::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -