📄 lcd.src
字号:
; RS = 1;
; SOURCE LINE # 190
MOV DPTR,#0F802H
MOV A,#01H
MOVX @DPTR,A
; for(ColumnCounter = 0; ColumnCounter < Width; ColumnCounter++)
; SOURCE LINE # 191
;---- Variable 'ColumnCounter?551' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0015:
MOV A,R7
CLR C
SUBB A,R1
JNC ?C0014
; {
; SOURCE LINE # 192
; if(!bReverseDisplay)
; SOURCE LINE # 193
JB bReverseDisplay?548,?C0018
; {
; SOURCE LINE # 194
; WLCD = *pGraphic++; /*r正常显示,白屏黑字*/
; SOURCE LINE # 195
INC R3
MOV A,R3
MOV R4,AR2
JNZ ?C0041
INC R2
?C0041:
DEC A
MOV DPL,A
MOV DPH,R4
CLR A
MOVC A,@A+DPTR
; }
; SOURCE LINE # 196
SJMP ?C0045
?C0018:
; else
; {
; SOURCE LINE # 198
; WLCD = ~(*pGraphic++); /*r反转显示,黑屏白字*/
; SOURCE LINE # 199
INC R3
MOV A,R3
MOV R4,AR2
JNZ ?C0042
INC R2
?C0042:
DEC A
MOV DPL,A
MOV DPH,R4
CLR A
MOVC A,@A+DPTR
CPL A
?C0045:
MOV DPTR,#0F800H
MOVX @DPTR,A
; }
; SOURCE LINE # 200
; }
; SOURCE LINE # 201
?C0017:
INC R7
SJMP ?C0015
; }
; SOURCE LINE # 202
?C0014:
INC R6
SJMP ?C0012
; }
; SOURCE LINE # 203
?C0020:
RET
; END OF _lcd_display_graphic
;
;
; /******************************************************************************************
; *函数名: lcd_display_char
; *参数: XStart 开始显示的X坐标像素值
; YStart 开始显示的Y坐标像素值
; bReverseDisplay 标识是否反显,1为反显,0为不反显
; character 显示字符的ASCII码表值
; *返回值: 无
; *描述: 字符显示程序
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; extern void lcd_display_char( /*为整个PAGE显示,不能任意位置*/
RSEG ?PR?_lcd_display_char?LCD
L?0048:
USING 0
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV C,bReverseDisplay?873
MOV ?_lcd_display_char?BIT,C
MOV DPTR,#Result?876
MOVX A,@DPTR
L?0049:
MOV DPTR,#g_Data2Char
MOVC A,@A+DPTR
L?0050:
MOV DPTR,#?_lcd_display_char?BYTE+02H
MOVX @DPTR,A
_lcd_display_char:
USING 0
; SOURCE LINE # 217
;---- Variable 'YStart?656' assigned to Register 'R5' ----
;---- Variable 'XStart?655' assigned to Register 'R1' ----
MOV R1,AR7
; byte XStart,
; byte YStart,
; bool bReverseDisplay,
; byte character)
; {
; SOURCE LINE # 222
; byte PageCounter; /*页标志*/
; byte ColumnCounter; /*X位置标志*/
; byte PageStart; /*起始页码*/
; byte PageEnd; /*终止页码*/
; byte code *pChar; /*指向字符存放数据(按page划分存储)区的指针*/
;
; pChar = g_ASCII[character-0x20]; /*r根据ASCI码表,*/
; SOURCE LINE # 229
MOV DPTR,#character?658
MOVX A,@DPTR
MOV B,#010H
MUL AB
ADD A,#LOW (g_ASCII+0FE00H)
MOV DPL,A
MOV A,B
ADDC A,#HIGH (g_ASCII+0FE00H)
;---- Variable 'pChar?663' assigned to Register 'R2/R3' ----
MOV R3,DPL
MOV R2,A
; PageStart = YStart >> 3; /*r由于是整页显示,不能随意位置,所以指定除8*/
; SOURCE LINE # 230
MOV R7,AR5
MOV A,R7
RRC A
RRC A
RRC A
ANL A,#01FH
MOV R7,A
;---- Variable 'PageStart?661' assigned to Register 'R7' ----
; PageEnd = PageStart + 2; /*r一个字符在纵向占两个page*/
; SOURCE LINE # 231
ADD A,#02H
MOV DPTR,#PageEnd?662
MOVX @DPTR,A
;
; for(PageCounter = PageStart; PageCounter < PageEnd; PageCounter++)
; SOURCE LINE # 233
;---- Variable 'PageCounter?659' assigned to Register 'R6' ----
MOV R6,AR7
?C0021:
MOV DPTR,#PageEnd?662
MOVX A,@DPTR
MOV R7,A
MOV A,R6
CLR C
SUBB A,R7
JNC ?C0029
; {
; SOURCE LINE # 234
; SetColumn(XStart);
; SOURCE LINE # 235
MOV R7,AR1
LCALL _SetColumn
; SetPage(PageCounter);
; SOURCE LINE # 236
MOV R7,AR6
LCALL _SetPage
;
; RS = 1;
; SOURCE LINE # 238
MOV DPTR,#0F802H
MOV A,#01H
MOVX @DPTR,A
; for(ColumnCounter = 0; ColumnCounter < 8; ColumnCounter++) /*r一个字符在横向占8列*/
; SOURCE LINE # 239
;---- Variable 'ColumnCounter?660' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0024:
; {
; SOURCE LINE # 240
; if(!bReverseDisplay)
; SOURCE LINE # 241
JB bReverseDisplay?657,?C0027
; {
; SOURCE LINE # 242
; WLCD = *pChar++;
; SOURCE LINE # 243
INC R3
MOV A,R3
MOV R4,AR2
JNZ ?C0043
INC R2
?C0043:
DEC A
MOV DPL,A
MOV DPH,R4
CLR A
MOVC A,@A+DPTR
; }
; SOURCE LINE # 244
SJMP ?C0046
?C0027:
; else
; {
; SOURCE LINE # 246
; WLCD = ~(*pChar++);
; SOURCE LINE # 247
INC R3
MOV A,R3
MOV R4,AR2
JNZ ?C0044
INC R2
?C0044:
DEC A
MOV DPL,A
MOV DPH,R4
CLR A
MOVC A,@A+DPTR
CPL A
?C0046:
MOV DPTR,#0F800H
MOVX @DPTR,A
; }
; SOURCE LINE # 248
; }
; SOURCE LINE # 249
?C0026:
INC R7
MOV A,R7
CJNE A,#08H,?C0024
; }
; SOURCE LINE # 250
?C0023:
INC R6
SJMP ?C0021
; }
; SOURCE LINE # 251
?C0029:
RET
; END OF _lcd_display_char
;
;
; /******************************************************************************************
; *函数名: lcd_display_text
; *参数: XStart 字符串开始X坐标像素值
; YStart 字符串开始Y坐标像素值,实际得按照page显示
; bReverseDisplay 标识是否反显
; pText 指向字符串ASCII码存放首址的指针
; *返回值: 无
; *描述: 显示小于8个字符的字符串文本
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; extern void lcd_display_text( byte XStart,
RSEG ?PR?_lcd_display_text?LCD
_lcd_display_text:
USING 0
; SOURCE LINE # 265
MOV DPTR,#XStart?764
MOV A,R7
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; byte YStart,
; bool bReverseDisplay,
; byte* pText)
; {
; SOURCE LINE # 269
; byte i;
; byte len;
; len = strlen(pText);
; SOURCE LINE # 272
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL _strlen
MOV DPTR,#len?769
MOV A,R7
MOVX @DPTR,A
; if(len > 8)
; SOURCE LINE # 273
SETB C
SUBB A,#08H
JC ?C0030
; {
; SOURCE LINE # 274
; len = 8;
; SOURCE LINE # 275
MOV A,#08H
MOVX @DPTR,A
; }
; SOURCE LINE # 276
?C0030:
; for(i = 0; i < len; i++)
; SOURCE LINE # 277
CLR A
MOV DPTR,#i?768
MOVX @DPTR,A
?C0031:
MOV DPTR,#len?769
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#i?768
MOVX A,@DPTR
MOV R6,A
CLR C
SUBB A,R7
JNC ?C0034
; {
; SOURCE LINE # 278
; lcd_display_char(XStart + i * 8, YStart, bReverseDisplay, *pText++);
; SOURCE LINE # 279
MOV A,R6
MOV B,#08H
MUL AB
MOV R7,A
MOV DPTR,#XStart?764
MOVX A,@DPTR
ADD A,R7
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV C,bReverseDisplay?766
MOV ?_lcd_display_char?BIT,C
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
CLR A
MOV B,#01H
LCALL ?C?ILDIX
MOV R1,B
MOV R2,A
LCALL ?C?CLDPTR
LCALL L?0050
; }
; SOURCE LINE # 280
MOV DPTR,#i?768
MOVX A,@DPTR
INC A
MOVX @DPTR,A
SJMP ?C0031
; }
; SOURCE LINE # 281
?C0034:
RET
; END OF _lcd_display_text
;
;
; /******************************************************************************************
; *函数名: lcd_display_byte
; *参数: XStart
; YStart
; bHex 标识是否为十六进制数据
; bReverseDisplay 标识是否反显
; value
; *返回值: 无
; *描述: 在LCD液晶屏上显示一个字节的内容,若此字节中数标识用
; 十六进制显示,则其中字节的高四位为 一个字符的ASCII码
; 值,低四位又是另外一个字符的ASCII码字
; *编写:王绍伟
; *版本信息:V1.0 2003年8月15日
; ******************************************************************************************/
; extern void lcd_display_byte(byte XStart,
RSEG ?PR?_lcd_display_byte?LCD
_lcd_display_byte:
USING 0
; SOURCE LINE # 298
MOV DPTR,#XStart?870
MOV A,R7
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; byte YStart,
; bool bHex,
; bool bReverseDisplay,
; byte value)
; {
; SOURCE LINE # 303
; byte Shift; /*暂存余数*/
; byte Result; /*暂存除得结果值*/
;
; if(bHex)
; SOURCE LINE # 307
JNB bHex?872,?C0035
; {
; SOURCE LINE # 308
; lcd_display_char(XStart + 8, YStart, bReverseDisplay, g_Data2Char[value&0x0F]);
; SOURCE LINE # 309
MOV DPTR,#XStart?870
MOVX A,@DPTR
ADD A,#08H
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV C,bReverseDisplay?873
MOV ?_lcd_display_char?BIT,C
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
LCALL L?0049
; lcd_display_char(XStart, YStart, bReverseDisplay, g_Data2Char[value>>4]);
; SOURCE LINE # 310
MOV DPTR,#XStart?870
MOVX A,@DPTR
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV C,bReverseDisplay?873
MOV ?_lcd_display_char?BIT,C
INC DPTR
MOVX A,@DPTR
MOV R6,A
SWAP A
ANL A,#0FH
; }
; SOURCE LINE # 311
SJMP ?C0047
?C0035:
; else
; {
; SOURCE LINE # 313
; Shift = value % 100;
; SOURCE LINE # 314
MOV DPTR,#value?874
MOVX A,@DPTR
MOV R7,A
MOV B,#064H
DIV AB
INC DPTR
MOV A,B
MOVX @DPTR,A
; Result = value / 100;
; SOURCE LINE # 315
MOV A,R7
MOV B,#064H
DIV AB
INC DPTR
MOVX @DPTR,A
; if(Result)
; SOURCE LINE # 316
JZ ?C0037
; {
; SOURCE LINE # 317
; lcd_display_char(XStart, YStart, bReverseDisplay, g_Data2Char[Result]);
; SOURCE LINE # 318
MOV DPTR,#XStart?870
MOVX A,@DPTR
LCALL L?0048
; }
; SOURCE LINE # 319
?C0037:
; Result = Shift / 10;
; SOURCE LINE # 320
MOV DPTR,#Shift?875
MOVX A,@DPTR
MOV R7,A
MOV B,#0AH
DIV AB
MOV R6,A
INC DPTR
MOVX @DPTR,A
; Shift = Shift % 10;
; SOURCE LINE # 321
MOV A,R7
MOV B,#0AH
DIV AB
MOV DPTR,#Shift?875
MOV A,B
MOVX @DPTR,A
; if(Result)
; SOURCE LINE # 322
MOV A,R6
JZ ?C0038
; {
; SOURCE LINE # 323
; lcd_display_char(XStart + 8, YStart, bReverseDisplay, g_Data2Char[Result]);
; SOURCE LINE # 324
MOV DPTR,#XStart?870
MOVX A,@DPTR
ADD A,#08H
LCALL L?0048
; }
; SOURCE LINE # 325
?C0038:
; lcd_display_char(XStart + 16, YStart, bReverseDisplay, g_Data2Char[Shift]);
; SOURCE LINE # 326
MOV DPTR,#XStart?870
MOVX A,@DPTR
ADD A,#010H
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV C,bReverseDisplay?873
MOV ?_lcd_display_char?BIT,C
MOV DPTR,#Shift?875
MOVX A,@DPTR
?C0047:
LCALL L?0049
; }
; SOURCE LINE # 327
; }
; SOURCE LINE # 328
?C0039:
RET
; END OF _lcd_display_byte
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -