📄 lcd1602.src
字号:
;
; /*******************************************************************/
; /* */
; /*写显示数据到LCD */
; /*RS=H,RW=L,E=上升沿,D0-D7=数据。 */
; /* */
; /*******************************************************************/
;
; void lcd_wdat(uchar dat)
RSEG ?PR?_lcd_wdat?LCD1602
_lcd_wdat:
; SOURCE LINE # 125
;---- Variable 'dat?344' assigned to Register 'R7' ----
; {
; SOURCE LINE # 126
;
; lcd_busy();
; SOURCE LINE # 128
LCALL lcd_busy
; lck = 0;
; SOURCE LINE # 129
CLR lck
; P1 = 0xef;//LCD_EN = 0
; SOURCE LINE # 130
MOV P1,#0EFH
; lck = 1;
; SOURCE LINE # 131
SETB lck
; P2 = 0x40;//LCD_RW = P2^7,LCD_RW =1; LCD_RS = P2^6,LCD_RS = 1
; SOURCE LINE # 132
MOV P2,#040H
;
; P0 = dat;
; SOURCE LINE # 134
MOV P0,R7
; _nop_();
; SOURCE LINE # 135
NOP
; _nop_();
; SOURCE LINE # 136
NOP
; _nop_();
; SOURCE LINE # 137
NOP
; _nop_();
; SOURCE LINE # 138
NOP
;
; lck = 0;
; SOURCE LINE # 140
CLR lck
; P1 = 0xff;//LCD_EN = 1
; SOURCE LINE # 141
MOV P1,#0FFH
; lck = 1;
; SOURCE LINE # 142
SETB lck
;
; _nop_();
; SOURCE LINE # 144
NOP
; _nop_();
; SOURCE LINE # 145
NOP
; _nop_();
; SOURCE LINE # 146
NOP
; _nop_();
; SOURCE LINE # 147
NOP
;
; lck = 0;
; SOURCE LINE # 149
CLR lck
; P1 = 0xef;//LCD_EN = 0
; SOURCE LINE # 150
MOV P1,#0EFH
; lck = 1;
; SOURCE LINE # 151
SETB lck
; P2 = 0x00;
; SOURCE LINE # 152
CLR A
MOV P2,A
; }
; SOURCE LINE # 153
RET
; END OF _lcd_wdat
;
; /*******************************************************************/
; /* */
; /* 设定显示位置 */
; /* */
; /*******************************************************************/
;
; void lcd_pos(uchar pos)
RSEG ?PR?_lcd_pos?LCD1602
_lcd_pos:
USING 0
; SOURCE LINE # 161
;---- Variable 'pos?445' assigned to Register 'R7' ----
; {
; SOURCE LINE # 162
; lcd_wcmd(pos|0x80); //数据指针=80+地址变量
; SOURCE LINE # 163
MOV A,R7
ORL A,#080H
MOV R7,A
LJMP _lcd_wcmd
; END OF _lcd_pos
; }
;
; /*******************************************************************/
; /* */
; /* LCD初始化设定 */
; /* */
; /*******************************************************************/
;
; void lcd_init()
RSEG ?PR?lcd_init?LCD1602
lcd_init:
USING 0
; SOURCE LINE # 172
; {
; SOURCE LINE # 173
; delay(15); //等待LCD电源稳定
; SOURCE LINE # 174
MOV R7,#0FH
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
; SOURCE LINE # 175
MOV R7,#038H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 176
LCALL L?0029
; lcd_wcmd(0x38);
; SOURCE LINE # 177
MOV R7,#038H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 178
LCALL L?0029
; lcd_wcmd(0x38);
; SOURCE LINE # 179
MOV R7,#038H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 180
MOV R7,#05H
;
; lcd_wcmd(0x0c); //显示开,关光标
; SOURCE LINE # 182
LCALL L?0028
; delay(5);
; SOURCE LINE # 183
LCALL L?0030
; lcd_wcmd(0x06); //移动光标
; SOURCE LINE # 184
MOV R7,#06H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 185
DEC R7
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x01); //清除LCD的显示内容
; SOURCE LINE # 186
MOV R7,#01H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 187
MOV R7,#05H
MOV R6,#00H
LJMP _delay
; END OF lcd_init
; }
;
; /*******************************************************************/
; /* */
; /* 清屏子程序 */
; /* */
; /*******************************************************************/
;
; void lcd_clr()
RSEG ?PR?lcd_clr?LCD1602
lcd_clr:
USING 0
; SOURCE LINE # 196
; {
; SOURCE LINE # 197
; lcd_wcmd(0x01); //清除LCD的显示内容
; SOURCE LINE # 198
MOV R7,#01H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 199
MOV R7,#05H
MOV R6,#00H
LJMP _delay
; END OF lcd_clr
; }
;
; /*******************************************************************/
; /* */
; /* 闪动子程序 */
; /* */
; /*******************************************************************/
;
; void flash()
RSEG ?PR?flash?LCD1602
flash:
USING 0
; SOURCE LINE # 208
; {
; SOURCE LINE # 209
; delay(600); //控制停留时间
; SOURCE LINE # 210
MOV R7,#058H
MOV R6,#02H
LCALL _delay
; lcd_wcmd(0x08); //关闭显示
; SOURCE LINE # 211
MOV R7,#08H
LCALL _lcd_wcmd
; delay(100); //延时
; SOURCE LINE # 212
; lcd_wcmd(0x0c); //开显示
; SOURCE LINE # 213
LCALL L?0026
; delay(100);
; SOURCE LINE # 214
MOV R7,#064H
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x08); //关闭显示
; SOURCE LINE # 215
MOV R7,#08H
LCALL _lcd_wcmd
; delay(100); //延时
; SOURCE LINE # 216
; lcd_wcmd(0x0c); //开显示
; SOURCE LINE # 217
LCALL L?0026
; delay(100);
; SOURCE LINE # 218
MOV R7,#064H
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x08); //关闭显示
; SOURCE LINE # 219
MOV R7,#08H
LCALL _lcd_wcmd
; delay(100); //延时
; SOURCE LINE # 220
; lcd_wcmd(0x0c); //开显示
; SOURCE LINE # 221
LCALL L?0027
; delay(100);
; SOURCE LINE # 222
MOV R7,#064H
MOV R6,#00H
LJMP _delay
; END OF flash
; }
;
; /*******************************************************************/
; /* */
; /* 主程序 */
; /* */
; /*******************************************************************/
;
; main()
RSEG ?PR?main?LCD1602
main:
USING 0
; SOURCE LINE # 231
; {
; SOURCE LINE # 232
; uchar i,j;
; delay(10);
; SOURCE LINE # 234
MOV R7,#0AH
MOV R6,#00H
LCALL _delay
; P1 = 0x20;//"液晶"指示灯亮
; SOURCE LINE # 235
MOV P1,#020H
; lcd_init(); //初始化LCD
; SOURCE LINE # 236
LCALL lcd_init
?C0014:
; while(1)
; SOURCE LINE # 237
; {
; SOURCE LINE # 238
; lcd_clr();
; SOURCE LINE # 239
LCALL lcd_clr
;
; lcd_pos(0x10); //设置显示位置为第一行第17列
; SOURCE LINE # 241
MOV R7,#010H
LCALL _lcd_pos
; i = 0;
; SOURCE LINE # 242
;---- Variable 'i?846' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0016:
;
; while(dis1[i] != '\0')
; SOURCE LINE # 244
MOV A,R6
MOV DPTR,#dis1
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0017
; { //显示字符" Happy "
; SOURCE LINE # 245
; lcd_wdat(dis1[i]);
; SOURCE LINE # 246
LCALL _lcd_wdat
; i++;
; SOURCE LINE # 247
INC R6
; }
; SOURCE LINE # 248
SJMP ?C0016
?C0017:
;
; lcd_pos(0x50); //设置显示位置为第二行第17列
; SOURCE LINE # 250
MOV R7,#050H
LCALL _lcd_pos
; i = 0;
; SOURCE LINE # 251
CLR A
MOV R6,A
?C0018:
;
; while(dis2[i] != '\0')
; SOURCE LINE # 253
MOV A,R6
MOV DPTR,#dis2
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0019
; {
; SOURCE LINE # 254
; lcd_wdat(dis2[i]); //显示字符" 51kaifa.com "
; SOURCE LINE # 255
LCALL _lcd_wdat
; i++;
; SOURCE LINE # 256
INC R6
; }
; SOURCE LINE # 257
SJMP ?C0018
?C0019:
;
; for(j=0;j<16;j++) //向左移动16格
; SOURCE LINE # 259
;---- Variable 'j?847' assigned to Register 'R3' ----
CLR A
MOV R3,A
?C0020:
; {
; SOURCE LINE # 260
; lcd_wcmd(0x18); //字符同时左移一格
; SOURCE LINE # 261
MOV R7,#018H
LCALL _lcd_wcmd
; delay(100); //控制移动时间
; SOURCE LINE # 262
MOV R7,#064H
MOV R6,#00H
LCALL _delay
; }
; SOURCE LINE # 263
INC R3
CJNE R3,#010H,?C0020
?C0021:
;
; flash(); //闪动三次
; SOURCE LINE # 265
LCALL flash
;
; }
; SOURCE LINE # 267
SJMP ?C0014
; END OF main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -