📄 lcd12864.src
字号:
; .\lcd12864.SRC generated from: lcd12864.c
; COMPILER INVOKED BY:
; E:\Program Files\C51\BIN\C51.EXE lcd12864.c LARGE BROWSE DEBUG OBJECTEXTEND SRC(.\lcd12864.SRC)
$NOMOD51
NAME LCD12864
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
T2 BIT 090H.0
EA BIT 0A8H.7
rdlcd BIT 0B0H.7
IE DATA 0A8H
EXF2 BIT 0C8H.6
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
RCAP2H DATA 0CBH
PS BIT 0B8H.4
SP DATA 081H
T2EX BIT 090H.1
OV BIT 0D0H.2
RCAP2L DATA 0CAH
C_T2 BIT 0C8H.1
WR BIT 0B0H.6
RCLK BIT 0C8H.5
TCLK BIT 0C8H.4
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
lck BIT 0B0H.5
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
CP_RL2 BIT 0C8H.0
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
TF1 BIT 088H.7
TF2 BIT 0C8H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
TH2 DATA 0CDH
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
TL2 DATA 0CCH
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
PT2 BIT 0B8H.5
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
TR2 BIT 0C8H.2
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
EXEN2 BIT 0C8H.3
REN BIT 098H.4
T2CON DATA 0C8H
USB BIT 090H.0
enable BIT 090H.5
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?main?LCD12864 SEGMENT CODE
?PR?MCUinitial?LCD12864 SEGMENT CODE
?PR?_delay?LCD12864 SEGMENT CODE
?PR?delay1s?LCD12864 SEGMENT CODE
?PR?Lcminit?LCD12864 SEGMENT CODE
?PR?Lcmcls?LCD12864 SEGMENT CODE
?PR?_WrL?LCD12864 SEGMENT CODE
?PR?_WrR?LCD12864 SEGMENT CODE
?PR?LcdbuzyL?LCD12864 SEGMENT CODE
?PR?LcdbuzyR?LCD12864 SEGMENT CODE
?PR?_Locatexy?LCD12864 SEGMENT CODE
?PR?_Wrdata?LCD12864 SEGMENT CODE
?BI?LCD12864 SEGMENT BIT
?DT?LCD12864 SEGMENT DATA
?DT?Lcminit?LCD12864 SEGMENT DATA OVERLAYABLE
?DT?Lcmcls?LCD12864 SEGMENT DATA OVERLAYABLE
?DT?_Locatexy?LCD12864 SEGMENT DATA OVERLAYABLE
EXTRN CODE (?C_STARTUP)
PUBLIC xy
PUBLIC statu
PUBLIC simple
PUBLIC _Wrdata
PUBLIC _Locatexy
PUBLIC LcdbuzyR
PUBLIC LcdbuzyL
PUBLIC _WrR
PUBLIC _WrL
PUBLIC Lcmcls
PUBLIC Lcminit
PUBLIC delay1s
PUBLIC _delay
PUBLIC MCUinitial
PUBLIC main
RSEG ?BI?LCD12864
simple: DBIT 1
xy: DBIT 1
RSEG ?DT?LCD12864
statu: DS 1
RSEG ?DT?Lcminit?LCD12864
cbyte?442: DS 1
RSEG ?DT?Lcmcls?LCD12864
i?543: DS 1
RSEG ?DT?Lcmcls?LCD12864
j?544: DS 1
RSEG ?DT?_Locatexy?LCD12864
x?1049: DS 1
RSEG ?DT?_Locatexy?LCD12864
y?1050: DS 1
RSEG ?DT?_Locatexy?LCD12864
right?1051: DS 1
; #include <reg52.h>
; #include <math.h>
; #include <string.h>
; #include <absacc.h>
; #include <INTRINS.H>
; #define uchar unsigned char
;
; /**********鹰脚定义*********/
;
; sbit lck = P3^5;//锁存信号
; sbit enable = P1^5;//HC245使能信号
; sbit USB = P1^0;//USBD12选中信号
; sbit rdlcd = P3^7;//读写控制
;
;
;
; /********常用命令及参数定义********/
; #define DISPON 0x3f
; #define DISPOFF 0x3e
; #define DISPFIRST 0xc0
; #define SETX 0x40
; #define SETY 0xb8
; #define LCDBUZY 0x80
; #define L 0x00
; #define R 0x40
; #define LIMIT 0x80
;
; #define ENABLED enable =0
; #define DISABLED enable =1
; #define READ rdlcd = 0
; #define WRITE rdlcd = 1
;
;
; /**********全局变量************/
;
; uchar data statu;
; bit xy,simple;
;
; /**************函数******************/
;
; void uDelay(uchar MS);
; void WrL(uchar x);
; void WrR(uchar x);
; void Lcmcls(void);
; void LcdbuzyR(void);
; void LcdbuzyL(void);
; void delay1s(void);
; void Lcminit (void);
; void Putpicture(void);
; void MCUinitial();
; void delay(unsigned int time);
; void VtoH8x16change(uchar *hzbuf);
; void Puthalf(uchar *strch,uchar row,uchar col);
; void Wrdata(uchar x,uchar row,uchar col);
; void Puthz(uchar *str,uchar row,uchar col);
; void VtoHchange(uchar *hzbuf);
; void Locatexy(uchar row,uchar col);
; void out16hz(uchar *p, uchar xdata ucXArray[]);
; void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
; void vWrite16x16Chinese(uchar *ch,uchar row,uchar col,bit flag);
; void vWrite8x16String(uchar *str,uchar col, uchar row, bit flag);
; void out16hz(uchar *p, uchar data ucXArray[]);
;
;
; extern uchar code char_Table[95][16];
; extern uchar code picture[];
;
;
; /***********主程序***************/
; void main(void)
RSEG ?PR?main?LCD12864
main:
USING 0
; SOURCE LINE # 70
; {
; SOURCE LINE # 71
; P1 = 0xff;
; SOURCE LINE # 72
MOV P1,#0FFH
; simple = 1;
; SOURCE LINE # 73
SETB simple
; MCUinitial();
; SOURCE LINE # 74
LCALL MCUinitial
; Lcminit();
; SOURCE LINE # 75
LCALL Lcminit
?C0001:
; while(1){
; SOURCE LINE # 76
;
; /* vWrite8x16String("ELITE-I", 0, 32,0);
; vWrite8x16String("实验开发系统" ,2, 16,0);
; vWrite8x16String("无忧电子开发网", 4, 8,0);
; vWrite8x16String("www.51kaifa.com", 6, 0,0);
; delay1s();
; Lcmcls();
; simple = 0;
; vWrite8x16String("ELITE-I", 0, 32,0);
; vWrite8x16String("实验开发系统" ,2, 16,0);
; vWrite8x16String("无忧电子开发网", 4, 8,0);
; vWrite8x16String("www.51kaifa.com", 6, 0,0);
; simple = 1;
; delay1s();
; Lcmcls();
; Putpicture();
; delay1s();
; Lcmcls();*/
; }
; SOURCE LINE # 95
SJMP ?C0001
; END OF main
;
; }
;
; /***************初始化单片机I/O口*****************/
; void MCUinitial()
RSEG ?PR?MCUinitial?LCD12864
MCUinitial:
; SOURCE LINE # 100
; {
; SOURCE LINE # 101
; P0 = 0x00;
; SOURCE LINE # 102
CLR A
MOV P0,A
; lck = 0;
; SOURCE LINE # 103
CLR lck
; P1 = 0x25;
; SOURCE LINE # 104
MOV P1,#025H
; P2 = 0x00;
; SOURCE LINE # 105
MOV P2,A
; lck = 1;
; SOURCE LINE # 106
SETB lck
; lck = 0;
; SOURCE LINE # 107
CLR lck
; P1 = 0x25;
; SOURCE LINE # 108
MOV P1,#025H
; P2 = 0x01;
; SOURCE LINE # 109
MOV P2,#01H
; lck = 1;
; SOURCE LINE # 110
SETB lck
; P0 = 0xff;
; SOURCE LINE # 111
MOV P0,#0FFH
; P1 = 0x21;
; SOURCE LINE # 112
MOV P1,#021H
; P2 = 0xff;
; SOURCE LINE # 113
MOV P2,#0FFH
; }
; SOURCE LINE # 114
RET
; END OF MCUinitial
;
; /***************微秒级延时*****************/
; void delay(unsigned int time)
RSEG ?PR?_delay?LCD12864
L?0054:
USING 0
LCALL _delay
LCALL _delay
LCALL _delay
_delay:
USING 0
; SOURCE LINE # 117
;---- Variable 'time?240' assigned to Register 'R6/R7' ----
; { unsigned int i;
; SOURCE LINE # 118
; for(i=0;i<time;i++);
; SOURCE LINE # 119
;---- Variable 'i?241' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0005:
CLR C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0008
INC R5
CJNE R5,#00H,?C0053
INC R4
?C0053:
SJMP ?C0005
; }
; SOURCE LINE # 120
?C0008:
RET
; END OF _delay
;
; /***************约5S延时********************/
; void delay1s(void)
RSEG ?PR?delay1s?LCD12864
delay1s:
USING 0
; SOURCE LINE # 123
; {
; SOURCE LINE # 124
; delay(50000);
; SOURCE LINE # 125
MOV R7,#050H
MOV R6,#0C3H
; delay(50000);
; SOURCE LINE # 126
; delay(50000);
; SOURCE LINE # 127
; delay(50000);
; SOURCE LINE # 128
LCALL L?0054
; delay(50000);
; SOURCE LINE # 129
LCALL _delay
; delay(50000);
; SOURCE LINE # 130
; delay(50000);
; SOURCE LINE # 131
; delay(50000);
; SOURCE LINE # 132
; delay(50000);
; SOURCE LINE # 133
LCALL L?0054
; delay(50000);
; SOURCE LINE # 134
LJMP _delay
; END OF delay1s
; }
;
; //***********初始化LCD*******************/
;
; void Lcminit (void)
RSEG ?PR?Lcminit?LCD12864
Lcminit:
USING 0
; SOURCE LINE # 139
; { uchar data cbyte;
; SOURCE LINE # 140
; cbyte=DISPOFF;
; SOURCE LINE # 141
MOV cbyte?442,#03EH
; WrL(cbyte);
; SOURCE LINE # 142
MOV R7,cbyte?442
LCALL _WrL
; WrR(cbyte);
; SOURCE LINE # 143
MOV R7,cbyte?442
LCALL _WrR
; cbyte=DISPON;
; SOURCE LINE # 144
MOV cbyte?442,#03FH
; WrL(cbyte);
; SOURCE LINE # 145
MOV R7,cbyte?442
LCALL _WrL
; WrR(cbyte);
; SOURCE LINE # 146
MOV R7,cbyte?442
LCALL _WrR
; cbyte=DISPFIRST;
; SOURCE LINE # 147
MOV cbyte?442,#0C0H
; WrL(cbyte);
; SOURCE LINE # 148
MOV R7,cbyte?442
LCALL _WrL
; WrR(cbyte);
; SOURCE LINE # 149
MOV R7,cbyte?442
LCALL _WrR
; Lcmcls();
; SOURCE LINE # 150
LCALL Lcmcls
; Locatexy(0,0);
; SOURCE LINE # 151
CLR A
MOV R5,A
MOV R7,A
LJMP _Locatexy
; END OF Lcminit
; }
;
;
; /***************LCD清屏********************/
; void Lcmcls(void)
RSEG ?PR?Lcmcls?LCD12864
Lcmcls:
USING 0
; SOURCE LINE # 156
; { uchar data i,j;
; SOURCE LINE # 157
; for(i=0;i<8;i++){
; SOURCE LINE # 158
CLR A
MOV i?543,A
?C0011:
; delay(6);
; SOURCE LINE # 159
MOV R7,#06H
MOV R6,#00H
LCALL _delay
; for(j=0;j<LIMIT;j++){
; SOURCE LINE # 160
CLR A
MOV j?544,A
?C0014:
; delay(6);
; SOURCE LINE # 161
MOV R7,#06H
MOV R6,#00H
LCALL _delay
; Wrdata(0x55,i,j);
; SOURCE LINE # 162
MOV R3,j?544
MOV R5,i?543
MOV R7,#055H
LCALL _Wrdata
; }
; SOURCE LINE # 163
INC j?544
MOV A,j?544
CLR C
SUBB A,#080H
JC ?C0014
; }
; SOURCE LINE # 164
?C0013:
INC i?543
MOV A,i?543
CLR C
SUBB A,#08H
JC ?C0011
; }
; SOURCE LINE # 165
?C0017:
RET
; END OF Lcmcls
;
;
;
; /**************写左区**************/
;
; void WrL(uchar x)
RSEG ?PR?_WrL?LCD12864
_WrL:
; SOURCE LINE # 171
;---- Variable 'x?645' assigned to Register 'R7' ----
; {
; SOURCE LINE # 172
; //LcdbuzyL();
; DISABLED;
; SOURCE LINE # 174
SETB enable
; WRITE;
; SOURCE LINE # 175
SETB rdlcd
;
; P0=0xFF;//P0口送FF,准备读
; SOURCE LINE # 177
MOV P0,#0FFH
;
; READ;
; SOURCE LINE # 179
CLR rdlcd
; lck = 0;
; SOURCE LINE # 180
CLR lck
; P1 = 0x96;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=1(读),CS138=1(无效),CSB=1,CSA=0
; SOURCE LINE # 181
MOV P1,#096H
; P2 = 0x01;
; SOURCE LINE # 182
MOV P2,#01H
; lck = 1;
; SOURCE LINE # 183
SETB lck
; P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
; SOURCE LINE # 184
MOV P1,#0A1H
; ENABLED;
; SOURCE LINE # 185
CLR enable
?C0018:
; while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
; SOURCE LINE # 186
MOV A,P0
JB ACC.7,?C0018
?C0019:
; DISABLED;
; SOURCE LINE # 187
SETB enable
; lck = 0;
; SOURCE LINE # 188
CLR lck
; P1 = 0x44;//ELCD=0,RSTLOW=1(低电平复位无效),R/W=0(读),CS138=1(无效),CSB=1,CSA=0
; SOURCE LINE # 189
MOV P1,#044H
; P2 = 0x01;//避免LCKMOTOR产生上升沿
; SOURCE LINE # 190
MOV P2,#01H
; lck = 1;
; SOURCE LINE # 191
SETB lck
; P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
; SOURCE LINE # 192
MOV P1,#0A1H
;
;
; ENABLED;
; SOURCE LINE # 195
CLR enable
; WRITE;
; SOURCE LINE # 196
SETB rdlcd
;
; P0 = x;
; SOURCE LINE # 198
MOV P0,R7
; lck = 0;
; SOURCE LINE # 199
CLR lck
; P1 = 0xc6;//ELCD=1,RSTLOW=1(低电平复位无效),RW = 0(写),CS138无效,CSB=1,CSA=0
; SOURCE LINE # 200
MOV P1,#0C6H
; P2 = 0x01;
; SOURCE LINE # 201
MOV P2,#01H
; lck = 1;
; SOURCE LINE # 202
SETB lck
; P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
; SOURCE LINE # 203
MOV P1,#0A1H
;
; lck = 0;
; SOURCE LINE # 205
CLR lck
; P1 = 0x44;//ELCD=0,RSTLOW=1(低电平复位无效),CS138无效,CSB=0,CSA=0
; SOURCE LINE # 206
MOV P1,#044H
; P2 = 0x01;
; SOURCE LINE # 207
MOV P2,#01H
; lck = 1;
; SOURCE LINE # 208
SETB lck
; P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
; SOURCE LINE # 209
MOV P1,#0A1H
; DISABLED;
; SOURCE LINE # 210
SETB enable
; }
; SOURCE LINE # 211
RET
; END OF _WrL
;
; /**************写右区**************/
; void WrR(uchar data x)
RSEG ?PR?_WrR?LCD12864
_WrR:
; SOURCE LINE # 214
;---- Variable 'x?746' assigned to Register 'R7' ----
; {
; SOURCE LINE # 215
; //LcdbuzyR();
;
; DISABLED;
; SOURCE LINE # 218
SETB enable
; WRITE;
; SOURCE LINE # 219
SETB rdlcd
;
; P0=0xFF;//P0口送FF,准备读
; SOURCE LINE # 221
MOV P0,#0FFH
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -