📄 lcd.src
字号:
; .\Lcd.SRC generated from: ..\SourceFile\Lcd.c
; COMPILER INVOKED BY:
; C:\Program Files\Keil\C51\BIN\C51.EXE ..\SourceFile\Lcd.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\Lcd.lst) SRC(.\Lcd.SRC)
NAME LCD
?PR?_SetPage?LCD SEGMENT CODE
?PR?_SetColumn?LCD SEGMENT CODE
?PR?InitTg19264?LCD SEGMENT CODE
?PR?lcd_init?LCD SEGMENT CODE
?PR?lcd_clear?LCD SEGMENT CODE
?PR?_lcd_display_graphic?LCD SEGMENT CODE
?XD?_lcd_display_graphic?LCD SEGMENT XDATA OVERLAYABLE
?BI?_lcd_display_graphic?LCD SEGMENT BIT OVERLAYABLE
?PR?_lcd_display_char?LCD SEGMENT CODE
?XD?_lcd_display_char?LCD SEGMENT XDATA OVERLAYABLE
?BI?_lcd_display_char?LCD SEGMENT BIT OVERLAYABLE
?PR?_lcd_display_text?LCD SEGMENT CODE
?XD?_lcd_display_text?LCD SEGMENT XDATA OVERLAYABLE
?BI?_lcd_display_text?LCD SEGMENT BIT OVERLAYABLE
?PR?_lcd_display_byte?LCD SEGMENT CODE
?XD?_lcd_display_byte?LCD SEGMENT XDATA OVERLAYABLE
?BI?_lcd_display_byte?LCD SEGMENT BIT OVERLAYABLE
EXTRN XDATA (g_Graphic)
EXTRN CODE (g_ASCII)
EXTRN CODE (g_Data2Char)
EXTRN CODE (_strlen)
EXTRN CODE (?C?ILDIX)
EXTRN CODE (?C?CLDPTR)
PUBLIC ?_lcd_display_byte?BIT
PUBLIC ?_lcd_display_byte?BYTE
PUBLIC _lcd_display_byte
PUBLIC ?_lcd_display_text?BIT
PUBLIC ?_lcd_display_text?BYTE
PUBLIC _lcd_display_text
PUBLIC ?_lcd_display_char?BIT
PUBLIC ?_lcd_display_char?BYTE
PUBLIC _lcd_display_char
PUBLIC ?_lcd_display_graphic?BIT
PUBLIC ?_lcd_display_graphic?BYTE
PUBLIC _lcd_display_graphic
PUBLIC lcd_clear
PUBLIC lcd_init
RSEG ?XD?_lcd_display_byte?LCD
?_lcd_display_byte?BYTE:
XStart?870: DS 1
YStart?871: DS 1
value?874: DS 1
ORG 3
Shift?875: DS 1
Result?876: DS 1
RSEG ?BI?_lcd_display_byte?LCD
?_lcd_display_byte?BIT:
bHex?872: DBIT 1
bReverseDisplay?873: DBIT 1
RSEG ?XD?_lcd_display_text?LCD
?_lcd_display_text?BYTE:
XStart?764: DS 1
YStart?765: DS 1
pText?767: DS 3
ORG 5
i?768: DS 1
len?769: DS 1
RSEG ?BI?_lcd_display_text?LCD
?_lcd_display_text?BIT:
bReverseDisplay?766: DBIT 1
RSEG ?XD?_lcd_display_graphic?LCD
?_lcd_display_graphic?BYTE:
XStart?544: DS 1
YStart?545: DS 1
Width?546: DS 1
Height?547: DS 1
GraphicIndex?549: DS 1
ORG 5
PageStart?552: DS 1
PageEnd?553: DS 1
RSEG ?BI?_lcd_display_graphic?LCD
?_lcd_display_graphic?BIT:
bReverseDisplay?548: DBIT 1
RSEG ?XD?_lcd_display_char?LCD
?_lcd_display_char?BYTE:
XStart?655: DS 1
YStart?656: DS 1
character?658: DS 1
ORG 3
PageEnd?662: DS 1
RSEG ?BI?_lcd_display_char?LCD
?_lcd_display_char?BIT:
bReverseDisplay?657: DBIT 1
; /*************************************************/
;
; /**************液晶显示屏*******************/
;
; /***************2003年1月20日*******************/
;
; /************WROTE BY WANGSW********************/
;
;
;
;
;
; #include <absacc.h> /*XBYTE绝对外部内存空间头文件*/
; #include <string.h>
; #include <intrins.h>
; #include "define.h"
; #include "ascii.h"
; #include "lcd.h"
;
;
; #ifdef DP_51
; #define WLCD XBYTE[0xF800] /*r定义WLCD为写LCD的内容*/
; #define RLCD XBYTE[0xF801] /*r定义RLCD为读LCD的内容*/
; #define RS XBYTE[0xF802] /*对于TG19264A1,RS=0为命令,RS=1为数据*/
; #endif
;
; #ifdef TG19264
; #define MAX_COLUMN 64
; #define MAX_PAGE 8
; #endif
;
;
; #define SendCtr(value) RS = 0; RS = 0; WLCD = value;
; #define SendData(value) RS = 1; RS = 1; WLCD = value;
;
; /*******************************************************************/
; //static void SendCtr(byte value);
; //static void SendData(byte value);
; static void SetPage(byte value);
; static void SetColumn(byte value);
; static void InitTg19264(void);
;
;
;
;
; /******************************************************************************************
; *函数名: SetPage
; *参数: value 设置的页码值,从0~7有效
; *返回值: 无
; *描述: 对于TG19264液晶屏,设置当前操作的页码值
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; static void SetPage(byte value)
RSEG ?PR?_SetPage?LCD
_SetPage:
; SOURCE LINE # 54
;---- Variable 'value?040' assigned to Register 'R7' ----
; {
; SOURCE LINE # 55
; #ifdef TG19264
; SendCtr(0xB8 + value);
; SOURCE LINE # 57
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
MOVX @DPTR,A
MOV A,R7
ADD A,#0B8H
MOV DPTR,#0F800H
MOVX @DPTR,A
; #endif
; }
; SOURCE LINE # 59
RET
; END OF _SetPage
;
;
; /******************************************************************************************
; *函数名: SetColumn
; *参数: value 设置的X坐标位置,从0~63有效
; *返回值: 无
; *描述: 设置当前液晶屏操作的X坐标位置
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; static void SetColumn(byte value)
RSEG ?PR?_SetColumn?LCD
_SetColumn:
; SOURCE LINE # 70
;---- Variable 'value?141' assigned to Register 'R7' ----
; {
; SOURCE LINE # 71
; #ifdef TG19264
; SendCtr(0x40 + value);
; SOURCE LINE # 73
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
MOVX @DPTR,A
MOV A,R7
ADD A,#040H
MOV DPTR,#0F800H
MOVX @DPTR,A
; #endif
; }
; SOURCE LINE # 75
RET
; END OF _SetColumn
;
;
; /******************************************************************************************
; *函数名: InitTg19264
; *参数: 无
; *返回值: 无
; *描述: 初始化液晶屏Tg19264,对液晶屏从DDRAM中哪一行开始显示数
; 据以及设置初始的页码值和X坐标位置
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; static void InitTg19264(void)
RSEG ?PR?InitTg19264?LCD
InitTg19264:
; SOURCE LINE # 87
; {
; SOURCE LINE # 88
; SendCtr(0xC0); /*起始显示DDRAM行(D5-D0)为第0行*/
; SOURCE LINE # 89
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
MOVX @DPTR,A
MOV DPTR,#0F800H
MOV A,#0C0H
MOVX @DPTR,A
; SendCtr(0xB8); /*起始页位置(D2-D0)为第0页*/
; SOURCE LINE # 90
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
MOVX @DPTR,A
MOV DPTR,#0F800H
MOV A,#0B8H
MOVX @DPTR,A
; SendCtr(0x40); /*X方向起始位置(D5-D0)为0*/
; SOURCE LINE # 91
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
MOVX @DPTR,A
MOV DPTR,#0F800H
MOV A,#040H
MOVX @DPTR,A
; }
; SOURCE LINE # 92
RET
; END OF InitTg19264
;
;
; /******************************************************************************************
; *函数名: lcd_init
; *参数: 无
; *返回值: 无
; *描述: 液晶屏初始化程序,主要是清屏,开显示
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; extern void lcd_init(void)
RSEG ?PR?lcd_init?LCD
lcd_init:
USING 0
; SOURCE LINE # 103
; {
; SOURCE LINE # 104
; #ifdef TG19264
; InitTg19264();
; SOURCE LINE # 106
LCALL InitTg19264
; #endif
; lcd_clear();
; SOURCE LINE # 108
LCALL lcd_clear
; SendCtr(0x3F); /*显示ON/OFF D0*/
; SOURCE LINE # 109
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
MOVX @DPTR,A
MOV DPTR,#0F800H
MOV A,#03FH
MOVX @DPTR,A
; }
; SOURCE LINE # 110
RET
; END OF lcd_init
;
;
; /******************************************************************************************
; *函数名: lcd_clear
; *参数: 无
; *返回值: 无
; *描述: LCD清屏程序
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; extern void lcd_clear(void)
RSEG ?PR?lcd_clear?LCD
lcd_clear:
USING 0
; SOURCE LINE # 121
; {
; SOURCE LINE # 122
; byte page;
; byte column;
;
; for(page = 0; page < MAX_PAGE; page++)
; SOURCE LINE # 126
;---- Variable 'page?442' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0005:
; {
; SOURCE LINE # 127
; RS = 0; /*r发送命令*/
; SOURCE LINE # 128
MOV DPTR,#0F802H
CLR A
MOVX @DPTR,A
; WLCD = 0xB8 + page; /*r设置清空的页码*/
; SOURCE LINE # 129
MOV A,R7
ADD A,#0B8H
MOV DPTR,#0F800H
MOVX @DPTR,A
; _nop_();
; SOURCE LINE # 130
NOP
; WLCD = 0x40; /*r设置清空的X坐标起始位置为0*/
; SOURCE LINE # 131
MOV A,#040H
MOVX @DPTR,A
; _nop_();
; SOURCE LINE # 132
NOP
; RS = 1; /*r发送数据*/
; SOURCE LINE # 133
MOV DPTR,#0F802H
MOV A,#01H
MOVX @DPTR,A
; _nop_();
; SOURCE LINE # 134
NOP
; for(column = 0; column < MAX_COLUMN; column++)
; SOURCE LINE # 135
;---- Variable 'column?443' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0008:
; {
; SOURCE LINE # 136
; WLCD = 0x00; /*r相应显示寄存器清零*/
; SOURCE LINE # 137
MOV DPTR,#0F800H
CLR A
MOVX @DPTR,A
; _nop_();
; SOURCE LINE # 138
NOP
; _nop_();
; SOURCE LINE # 139
NOP
; _nop_();
; SOURCE LINE # 140
NOP
; _nop_();
; SOURCE LINE # 141
NOP
; _nop_();
; SOURCE LINE # 142
NOP
; _nop_();
; SOURCE LINE # 143
NOP
; _nop_();
; SOURCE LINE # 144
NOP
; _nop_();
; SOURCE LINE # 145
NOP
; _nop_();
; SOURCE LINE # 146
NOP
; _nop_();
; SOURCE LINE # 147
NOP
; _nop_();
; SOURCE LINE # 148
NOP
; }
; SOURCE LINE # 149
INC R6
MOV A,R6
CJNE A,#040H,?C0008
; }
; SOURCE LINE # 150
?C0007:
INC R7
MOV A,R7
CJNE A,#08H,?C0005
; }
; SOURCE LINE # 151
?C0011:
RET
; END OF lcd_clear
;
;
; /******************************************************************************************
; *函数名: lcd_display_graphic
; *参数: XStart X轴起始位置,为像素点位置
; YStart Y轴起始位置,为像素点位置
; Width 图像宽度像素值
; Height 图像高度像素值
; bReverseDisplay 标识是否反显
; GraphicIndex 图像显示索引
; *返回值: 无
; *描述: 显示一幅图像的程序
; *编写: 王绍伟
; *版本信息: V1.0 2003年8月15日
; ******************************************************************************************/
; extern void lcd_display_graphic( /*为整个PAGE显示,不能任意位置*/
RSEG ?PR?_lcd_display_graphic?LCD
_lcd_display_graphic:
USING 0
; SOURCE LINE # 167
MOV DPTR,#XStart?544
MOV A,R7
MOVX @DPTR,A
;---- Variable 'YStart?545' assigned to Register 'R5' ----
;---- Variable 'Width?546' assigned to Register 'R1' ----
MOV R1,AR3
; byte XStart,
; byte YStart,
; byte Width,
; byte Height,
; bool bReverseDisplay,
; byte GraphicIndex)
; {
; SOURCE LINE # 174
; byte PageCounter; /*页计数值*/
; byte ColumnCounter; /*X位置计数值*/
; byte PageStart; /*起始页码*/
; byte PageEnd; /*终止页码*/
; byte code *pGraphic; /*指向发送显示数据的指针*/
;
; pGraphic = g_Graphic[GraphicIndex]; /*r取出要显示的图像区头地址给指针pGraphic*/
; SOURCE LINE # 181
MOV DPTR,#GraphicIndex?549
MOVX A,@DPTR
ADD A,ACC
ADD A,#LOW (g_Graphic)
MOV DPL,A
CLR A
ADDC A,#HIGH (g_Graphic)
MOV DPH,A
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
;---- Variable 'pGraphic?554' assigned to Register 'R2/R3' ----
MOV R3,A
MOV R2,AR6
; PageStart = YStart >> 3; /*r由于是整页显示,不能随意位置,所以指定除8*/
; SOURCE LINE # 182
MOV A,R5
RRC A
RRC A
RRC A
ANL A,#01FH
MOV DPTR,#PageStart?552
MOVX @DPTR,A
; PageEnd = (YStart + Height) >> 3;
; SOURCE LINE # 183
MOV DPTR,#Height?547
MOVX A,@DPTR
ADD A,R5
MOV R7,A
CLR A
RLC A
MOV R6,A
MOV A,R7
MOV R0,#03H
?C0040:
XCH A,R6
MOV C,ACC.7
RRC A
XCH A,R6
RRC A
DJNZ R0,?C0040
MOV DPTR,#PageEnd?553
MOVX @DPTR,A
;
;
; for(PageCounter = PageStart; PageCounter < PageEnd; PageCounter++)
; SOURCE LINE # 186
MOV DPTR,#PageStart?552
MOVX A,@DPTR
;---- Variable 'PageCounter?550' assigned to Register 'R6' ----
MOV R6,A
?C0012:
MOV DPTR,#PageEnd?553
MOVX A,@DPTR
MOV R7,A
MOV A,R6
CLR C
SUBB A,R7
JNC ?C0020
; {
; SOURCE LINE # 187
; SetColumn(XStart);
; SOURCE LINE # 188
MOV DPTR,#XStart?544
MOVX A,@DPTR
MOV R7,A
LCALL _SetColumn
; SetPage(PageCounter);
; SOURCE LINE # 189
MOV R7,AR6
LCALL _SetPage
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -