📄 lcd_main.src
字号:
; SOURCE LINE # 329
; if (LCD_Two == 0)
; SOURCE LINE # 330
MOV A,LCD_Two
JNZ ?C0052
; LCD_Two = LCDDis[10];
; SOURCE LINE # 331
MOV DPTR,#LCDDis+0AH
SJMP ?C0112
?C0052:
; else
; LCD_Two = LCDDis[LCD_Two];
; SOURCE LINE # 333
?C0111:
MOV R7,LCD_Two
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LCDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LCDDis)
ADDC A,R6
MOV DPH,A
CLR A
?C0112:
MOVC A,@A+DPTR
MOV LCD_Two,A
; }
; SOURCE LINE # 334
?C0051:
; if (Sign)
; SOURCE LINE # 335
MOV A,Sign
JZ ?C0054
; LCD_One = LCDDis[11];
; SOURCE LINE # 336
MOV DPTR,#LCDDis+0BH
SJMP ?C0113
?C0054:
; else
; {
; SOURCE LINE # 338
; if (LCD_One == 0)
; SOURCE LINE # 339
MOV A,LCD_One
JNZ ?C0056
; LCD_One = LCDDis[10];
; SOURCE LINE # 340
MOV DPTR,#LCDDis+0AH
SJMP ?C0114
?C0056:
; else
; LCD_One = LCDDis[LCD_One];
; SOURCE LINE # 342
MOV R7,LCD_One
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LCDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LCDDis)
ADDC A,R6
MOV DPH,A
?C0113:
CLR A
?C0114:
MOVC A,@A+DPTR
MOV LCD_One,A
; }
; SOURCE LINE # 343
?C0055:
; LCD_Three = LCDDis[LCD_Three];
; SOURCE LINE # 344
MOV R7,LCD_Three
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LCDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LCDDis)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV LCD_Three,A
;
;
; cur_temper[13]=LCD_One; //把温度值的ASCII码放入cur_temper的13,14,15位
; SOURCE LINE # 347
MOV cur_temper+0DH,LCD_One
; cur_temper[14]=LCD_Two;
; SOURCE LINE # 348
MOV cur_temper+0EH,LCD_Two
; cur_temper[15]=LCD_Three;
; SOURCE LINE # 349
MOV cur_temper+0FH,A
;
;
; //转LCD字段 设置值
; if (LCD_One_set) //超过百时十位的处理
; SOURCE LINE # 353
MOV A,LCD_One_set
JZ ?C0058
; LCD_Two_set = LCDDis[LCD_Two_set];
; SOURCE LINE # 354
SJMP ?C0115
?C0058:
; else
; {
; SOURCE LINE # 356
; if (LCD_Two_set == 0)
; SOURCE LINE # 357
MOV A,LCD_Two_set
JNZ ?C0060
; LCD_Two_set = LCDDis[10];
; SOURCE LINE # 358
MOV DPTR,#LCDDis+0AH
SJMP ?C0116
?C0060:
; else
; LCD_Two_set = LCDDis[LCD_Two_set];
; SOURCE LINE # 360
?C0115:
MOV R7,LCD_Two_set
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LCDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LCDDis)
ADDC A,R6
MOV DPH,A
CLR A
?C0116:
MOVC A,@A+DPTR
MOV LCD_Two_set,A
; }
; SOURCE LINE # 361
?C0059:
; if (Sign_Set)
; SOURCE LINE # 362
MOV A,Sign_Set
JZ ?C0062
; LCD_One_set = LCDDis[11];
; SOURCE LINE # 363
MOV DPTR,#LCDDis+0BH
SJMP ?C0117
?C0062:
; else
; {
; SOURCE LINE # 365
; if (LCD_One_set == 0)
; SOURCE LINE # 366
MOV A,LCD_One_set
JNZ ?C0064
; LCD_One_set = LCDDis[10];
; SOURCE LINE # 367
MOV DPTR,#LCDDis+0AH
SJMP ?C0118
?C0064:
; else
; LCD_One_set = LCDDis[LCD_One_set];
; SOURCE LINE # 369
MOV R7,LCD_One_set
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LCDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LCDDis)
ADDC A,R6
MOV DPH,A
?C0117:
CLR A
?C0118:
MOVC A,@A+DPTR
MOV LCD_One_set,A
; }
; SOURCE LINE # 370
?C0063:
; LCD_Three_set = LCDDis[LCD_Three_set];
; SOURCE LINE # 371
MOV R7,LCD_Three_set
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,#LOW (LCDDis)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (LCDDis)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV LCD_Three_set,A
;
;
; cur_temper_set[6]=LCD_One_set; //把温度值的ASCII码放入cur_temper_set的6,7,8位
; SOURCE LINE # 374
MOV cur_temper_set+06H,LCD_One_set
; cur_temper_set[7]=LCD_Two_set;
; SOURCE LINE # 375
MOV cur_temper_set+07H,LCD_Two_set
; cur_temper_set[8]=LCD_Three_set;
; SOURCE LINE # 376
MOV cur_temper_set+08H,A
;
; }
; SOURCE LINE # 378
RET
; END OF V2ToV
;
; //写数据
; void WriteDataLCM(unsigned char WDLCM)
RSEG ?PR?_WriteDataLCM?LCD_MAIN
_WriteDataLCM:
USING 0
; SOURCE LINE # 381
MOV WDLCM?340,R7
; {
; SOURCE LINE # 382
; ReadStatusLCM(); //检测忙
; SOURCE LINE # 383
LCALL ReadStatusLCM
; LCM_Data = WDLCM;
; SOURCE LINE # 384
MOV P1,WDLCM?340
; LCM_RS = 1;
; SOURCE LINE # 385
SETB P2_1
; LCM_RW = 0;
; SOURCE LINE # 386
CLR P2_0
; LCM_E = 0; //若晶振速度太高可以在这后加小的延时
; SOURCE LINE # 387
CLR P2_2
; LCM_E = 0; //延时
; SOURCE LINE # 388
CLR P2_2
; LCM_E = 1;
; SOURCE LINE # 389
SETB P2_2
; }
; SOURCE LINE # 390
RET
; END OF _WriteDataLCM
;
; //写指令
; void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
RSEG ?PR?_WriteCommandLCM?LCD_MAIN
L?0119:
USING 0
MOV R5,#01H
MOV R4,#00H
_WriteCommandLCM:
USING 0
; SOURCE LINE # 393
MOV WCLCM?441,R7
;---- Variable 'BuysC?442' assigned to Register 'R4/R5' ----
; {
; SOURCE LINE # 394
; if (BuysC) ReadStatusLCM(); //根据需要检测忙
; SOURCE LINE # 395
MOV A,R5
ORL A,R4
JZ ?C0068
LCALL ReadStatusLCM
?C0068:
; LCM_Data = WCLCM;
; SOURCE LINE # 396
MOV P1,WCLCM?441
; LCM_RS = 0;
; SOURCE LINE # 397
CLR P2_1
; LCM_RW = 0;
; SOURCE LINE # 398
CLR P2_0
; LCM_E = 0;
; SOURCE LINE # 399
CLR P2_2
; LCM_E = 0;
; SOURCE LINE # 400
CLR P2_2
; LCM_E = 1;
; SOURCE LINE # 401
SETB P2_2
; }
; SOURCE LINE # 402
RET
; END OF _WriteCommandLCM
;
; //读数据
; unsigned char ReadDataLCM(void)
RSEG ?PR?ReadDataLCM?LCD_MAIN
ReadDataLCM:
USING 0
; SOURCE LINE # 405
; {
; SOURCE LINE # 406
; LCM_RS = 1;
; SOURCE LINE # 407
SETB P2_1
; LCM_RW = 1;
; SOURCE LINE # 408
SETB P2_0
; LCM_E = 0;
; SOURCE LINE # 409
CLR P2_2
; LCM_E = 0;
; SOURCE LINE # 410
CLR P2_2
; LCM_E = 1;
; SOURCE LINE # 411
SETB P2_2
; return(LCM_Data);
; SOURCE LINE # 412
MOV R7,P1
; }
; SOURCE LINE # 413
?C0070:
RET
; END OF ReadDataLCM
;
; //读状态
; unsigned char ReadStatusLCM(void)
RSEG ?PR?ReadStatusLCM?LCD_MAIN
ReadStatusLCM:
USING 0
; SOURCE LINE # 416
; {
; SOURCE LINE # 417
; LCM_Data = 0xFF;
; SOURCE LINE # 418
MOV P1,#0FFH
; LCM_RS = 0;
; SOURCE LINE # 419
CLR P2_1
; LCM_RW = 1;
; SOURCE LINE # 420
SETB P2_0
; LCM_E = 0;
; SOURCE LINE # 421
CLR P2_2
; LCM_E = 0;
; SOURCE LINE # 422
CLR P2_2
; LCM_E = 1;
; SOURCE LINE # 423
SETB P2_2
?C0071:
; while (LCM_Data & Busy); //检测忙信号
; SOURCE LINE # 424
MOV A,P1
JB ACC.7,?C0071
?C0072:
; return(LCM_Data);
; SOURCE LINE # 425
MOV R7,P1
; }
; SOURCE LINE # 426
?C0073:
RET
; END OF ReadStatusLCM
;
; void LCMInit(void) //LCM初始化
RSEG ?PR?LCMInit?LCD_MAIN
LCMInit:
USING 0
; SOURCE LINE # 428
; {
; SOURCE LINE # 429
; LCM_Data = 0;
; SOURCE LINE # 430
CLR A
MOV P1,A
; WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
; SOURCE LINE # 431
MOV R5,A
MOV R4,A
MOV R7,#038H
LCALL _WriteCommandLCM
; Delay5Ms();
; SOURCE LINE # 432
LCALL Delay5Ms
; WriteCommandLCM(0x38,0);
; SOURCE LINE # 433
CLR A
MOV R5,A
MOV R4,A
MOV R7,#038H
LCALL _WriteCommandLCM
; Delay5Ms();
; SOURCE LINE # 434
LCALL Delay5Ms
; WriteCommandLCM(0x38,0);
; SOURCE LINE # 435
CLR A
MOV R5,A
MOV R4,A
MOV R7,#038H
LCALL _WriteCommandLCM
; Delay5Ms();
; SOURCE LINE # 436
LCALL Delay5Ms
;
; WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
; SOURCE LINE # 438
MOV R7,#038H
LCALL L?0119
; WriteCommandLCM(0x08,1); //关闭显示
; SOURCE LINE # 439
MOV R7,#08H
LCALL L?0119
; WriteCommandLCM(0x01,1); //显示清屏
; SOURCE LINE # 440
MOV R5,#01H
MOV R4,#00H
MOV R7,#01H
LCALL _WriteCommandLCM
; WriteCommandLCM(0x06,1); // 显示光标移动设置
; SOURCE LINE # 441
MOV R5,#01H
MOV R4,#00H
MOV R7,#06H
LCALL _WriteCommandLCM
; WriteCommandLCM(0x0C,1); // 显示开及光标设置
; SOURCE LINE # 442
MOV R5,#01H
MOV R4,#00H
MOV R7,#0CH
LJMP _WriteCommandLCM
; END OF LCMInit
; }
;
; //按指定位置显示一个字符
; void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
RSEG ?PR?_DisplayOneChar?LCD_MAIN
_DisplayOneChar:
USING 0
; SOURCE LINE # 446
MOV DData?845,R3
;---- Variable 'X?843' assigned to Register 'R7' ----
;---- Variable 'Y?844' assigned to Register 'R5' ----
; {
; SOURCE LINE # 447
; Y &= 0x1;
; SOURCE LINE # 448
ANL AR5,#01H
; X &= 0xF; //限制X不能大于15,Y不能大于1
; SOURCE LINE # 449
ANL AR7,#0FH
; if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
; SOURCE LINE # 450
MOV A,R5
JZ ?C0075
ORL AR7,#040H
?C0075:
; X |= 0x80; //算出指令码
; SOURCE LINE # 451
ORL AR7,#080H
; WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
; SOURCE LINE # 452
CLR A
MOV R5,A
MOV R4,A
LCALL _WriteCommandLCM
; WriteDataLCM(DData);
; SOURCE LINE # 453
MOV R7,DData?845
LJMP _WriteDataLCM
; END OF _DisplayOneChar
; }
;
; //按指定位置显示一串字符 (***原来的遇到空格0x20就不显示***)
; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
RSEG ?PR?_DisplayListChar?LCD_MAIN
_DisplayListChar:
USING 0
; SOURCE LINE # 457
MOV X?946,R7
MOV Y?947,R5
MOV DData?948,R2
MOV DData?948+01H,R3
; {
; SOURCE LINE # 458
; unsigned char ListLength, j;
; ListLength = strlen(DData); //计算要显示的字符串长度
; SOURCE LINE # 460
MOV R1,DData?948+01H
MOV R3,#0FFH
LCALL _strlen
MOV ListLength?949,R7
; Y &= 0x1;
; SOURCE LINE # 461
ANL Y?947,#01H
; X &= 0xF; //限制X不能大于15,Y不能大于1
; SOURCE LINE # 462
ANL X?946,#0FH
; if (X <= 0xF) //X坐标应小于0xF
; SOURCE LINE # 463
MOV A,X?946
SETB C
SUBB A,#0FH
JNC ?C0081
; {
; SOURCE LINE # 464
; for (j=0;j<ListLength;j++)
; SOURCE LINE # 465
CLR A
MOV j?950,A
?C0078:
MOV A,j?950
CLR C
SUBB A,ListLength?949
JNC ?C0081
; {
; SOURCE LINE # 466
; DisplayOneChar(X, Y, DData[j]); //显示单个字符
; SOURCE LINE # 467
MOV A,DData?948+01H
ADD A,j?950
MOV DPL,A
CLR A
ADDC A,DData?948
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R3,A
MOV R5,Y?947
MOV R7,X?946
LCALL _DisplayOneChar
; X++;
; SOURCE LINE # 468
INC X?946
; }
; SOURCE LINE # 469
INC j?950
SJMP ?C0078
; }
; SOURCE LINE # 470
; }
; SOURCE LINE # 471
?C0081:
RET
; END OF _DisplayListChar
;
; //5ms延时
; void Delay5Ms(void)
RSEG ?PR?Delay5Ms?LCD_MAIN
Delay5Ms:
USING 0
; SOURCE LINE # 474
; {
; SOURCE LINE # 475
; unsigned int TempCyc = 5552;
; SOURCE LINE # 476
;---- Variable 'TempCyc?1051' assigned to Register 'R6/R7' ----
MOV R7,#0B0H
MOV R6,#015H
?C0082:
; while(TempCyc--);
; SOURCE LINE # 477
MOV A,R7
DEC R7
MOV R4,AR6
JNZ ?C0107
DEC R6
?C0107:
ORL A,R4
JNZ ?C0082
; }
; SOURCE LINE # 478
?C0084:
RET
; END OF Delay5Ms
;
; //400ms延时
; void Delay400Ms(void)
RSEG ?PR?Delay400Ms?LCD_MAIN
Delay400Ms:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -