📄 lcd1602.src
字号:
; /* */
; /*写显示数据到LCD */
; /*RS=H,RW=L,E=上升沿,D0-D7=数据。 */
; /* */
; /*******************************************************************/
;
; void lcd_wdat(uchar dat)
RSEG ?PR?_lcd_wdat?LCD1602
_lcd_wdat:
; SOURCE LINE # 121
;---- Variable 'dat?344' assigned to Register 'R7' ----
; {
; SOURCE LINE # 122
?C0011:
; while(lcd_busy());
; SOURCE LINE # 123
LCALL lcd_busy
JC ?C0011
?C0012:
;
; lck = 0;
; SOURCE LINE # 125
CLR lck
; P1 = 0x04; // LCD_RS = 1; LCD_RW = 0; LCD_EN = 0;
; SOURCE LINE # 126
MOV P1,#04H
; lck = 1;
; SOURCE LINE # 127
SETB lck
;
; P0 = dat;
; SOURCE LINE # 129
MOV P0,R7
; _nop_();
; SOURCE LINE # 130
NOP
; _nop_();
; SOURCE LINE # 131
NOP
; _nop_();
; SOURCE LINE # 132
NOP
; _nop_();
; SOURCE LINE # 133
NOP
;
; lck = 0;
; SOURCE LINE # 135
CLR lck
; P1 = 0x24;// LCD_EN = 1;
; SOURCE LINE # 136
MOV P1,#024H
; lck = 1;
; SOURCE LINE # 137
SETB lck
;
; _nop_();
; SOURCE LINE # 139
NOP
; _nop_();
; SOURCE LINE # 140
NOP
; _nop_();
; SOURCE LINE # 141
NOP
; _nop_();
; SOURCE LINE # 142
NOP
;
; lck = 0;
; SOURCE LINE # 144
CLR lck
; P1 = 0x00;//LCD_EN = 0;
; SOURCE LINE # 145
CLR A
MOV P1,A
; lck = 1;
; SOURCE LINE # 146
SETB lck
; }
; SOURCE LINE # 147
RET
; END OF _lcd_wdat
;
; /*******************************************************************/
; /* */
; /* 设定显示位置 */
; /* */
; /*******************************************************************/
;
; void lcd_pos(uchar pos)
RSEG ?PR?_lcd_pos?LCD1602
_lcd_pos:
USING 0
; SOURCE LINE # 155
;---- Variable 'pos?445' assigned to Register 'R7' ----
; {
; SOURCE LINE # 156
; lcd_wcmd(pos|0x80); //数据指针=80+地址变量
; SOURCE LINE # 157
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 # 166
; {
; SOURCE LINE # 167
; delay(15); //等待LCD电源稳定
; SOURCE LINE # 168
MOV R7,#0FH
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
; SOURCE LINE # 169
MOV R7,#038H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 170
LCALL L?0033
; lcd_wcmd(0x38);
; SOURCE LINE # 171
MOV R7,#038H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 172
LCALL L?0033
; lcd_wcmd(0x38);
; SOURCE LINE # 173
MOV R7,#038H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 174
MOV R7,#05H
;
; lcd_wcmd(0x0c); //显示开,关光标
; SOURCE LINE # 176
LCALL L?0032
; delay(5);
; SOURCE LINE # 177
LCALL L?0034
; lcd_wcmd(0x06); //移动光标
; SOURCE LINE # 178
MOV R7,#06H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 179
DEC R7
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x01); //清除LCD的显示内容
; SOURCE LINE # 180
MOV R7,#01H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 181
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 # 190
; {
; SOURCE LINE # 191
; lcd_wcmd(0x01); //清除LCD的显示内容
; SOURCE LINE # 192
MOV R7,#01H
LCALL _lcd_wcmd
; delay(5);
; SOURCE LINE # 193
MOV R7,#05H
MOV R6,#00H
LJMP _delay
; END OF lcd_clr
; }
;
; /*******************************************************************/
; /* */
; /* 闪动子程序 */
; /* */
; /*******************************************************************/
;
; void flash()
RSEG ?PR?flash?LCD1602
flash:
USING 0
; SOURCE LINE # 202
; {
; SOURCE LINE # 203
; delay(600); //控制停留时间
; SOURCE LINE # 204
MOV R7,#058H
MOV R6,#02H
LCALL _delay
; lcd_wcmd(0x08); //关闭显示
; SOURCE LINE # 205
MOV R7,#08H
LCALL _lcd_wcmd
; delay(100); //延时
; SOURCE LINE # 206
; lcd_wcmd(0x0c); //开显示
; SOURCE LINE # 207
LCALL L?0030
; delay(100);
; SOURCE LINE # 208
MOV R7,#064H
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x08); //关闭显示
; SOURCE LINE # 209
MOV R7,#08H
LCALL _lcd_wcmd
; delay(100); //延时
; SOURCE LINE # 210
; lcd_wcmd(0x0c); //开显示
; SOURCE LINE # 211
LCALL L?0030
; delay(100);
; SOURCE LINE # 212
MOV R7,#064H
MOV R6,#00H
LCALL _delay
; lcd_wcmd(0x08); //关闭显示
; SOURCE LINE # 213
MOV R7,#08H
LCALL _lcd_wcmd
; delay(100); //延时
; SOURCE LINE # 214
; lcd_wcmd(0x0c); //开显示
; SOURCE LINE # 215
LCALL L?0031
; delay(100);
; SOURCE LINE # 216
MOV R7,#064H
MOV R6,#00H
LJMP _delay
; END OF flash
; }
;
; /*******************************************************************/
; /* */
; /* 主程序 */
; /* */
; /*******************************************************************/
;
; main()
RSEG ?PR?main?LCD1602
main:
USING 0
; SOURCE LINE # 225
; {
; SOURCE LINE # 226
; uchar i,j;
; delay(10);
; SOURCE LINE # 228
MOV R7,#0AH
MOV R6,#00H
LCALL _delay
; lcd_init(); //初始化LCD
; SOURCE LINE # 229
LCALL lcd_init
?C0018:
;
; while(1)
; SOURCE LINE # 231
; {
; SOURCE LINE # 232
; lcd_clr();
; SOURCE LINE # 233
LCALL lcd_clr
;
; lcd_pos(0x10); //设置显示位置为第一行第17列
; SOURCE LINE # 235
MOV R7,#010H
LCALL _lcd_pos
; i = 0;
; SOURCE LINE # 236
;---- Variable 'i?846' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0020:
;
; while(dis1[i] != '\0')
; SOURCE LINE # 238
MOV A,R6
MOV DPTR,#dis1
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0021
; { //显示字符" Happy "
; SOURCE LINE # 239
; lcd_wdat(dis1[i]);
; SOURCE LINE # 240
LCALL _lcd_wdat
; i++;
; SOURCE LINE # 241
INC R6
; }
; SOURCE LINE # 242
SJMP ?C0020
?C0021:
;
; lcd_pos(0x50); //设置显示位置为第二行第17列
; SOURCE LINE # 244
MOV R7,#050H
LCALL _lcd_pos
; i = 0;
; SOURCE LINE # 245
CLR A
MOV R6,A
?C0022:
;
; while(dis2[i] != '\0')
; SOURCE LINE # 247
MOV A,R6
MOV DPTR,#dis2
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0023
; {
; SOURCE LINE # 248
; lcd_wdat(dis2[i]); //显示字符" NEW YEAR "
; SOURCE LINE # 249
LCALL _lcd_wdat
; i++;
; SOURCE LINE # 250
INC R6
; }
; SOURCE LINE # 251
SJMP ?C0022
?C0023:
;
; for(j=0;j<16;j++) //向左移动16格
; SOURCE LINE # 253
;---- Variable 'j?847' assigned to Register 'R3' ----
CLR A
MOV R3,A
?C0024:
; {
; SOURCE LINE # 254
; lcd_wcmd(0x18); //字符同时左移一格
; SOURCE LINE # 255
MOV R7,#018H
LCALL _lcd_wcmd
; delay(100); //控制移动时间
; SOURCE LINE # 256
MOV R7,#064H
MOV R6,#00H
LCALL _delay
; }
; SOURCE LINE # 257
INC R3
CJNE R3,#010H,?C0024
?C0025:
;
; flash(); //闪动三次
; SOURCE LINE # 259
LCALL flash
;
; }
; SOURCE LINE # 261
SJMP ?C0018
; END OF main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -