📄 12864j.lst
字号:
C51 COMPILER V7.50 12864J 05/09/2008 14:17:57 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 12864J
OBJECT MODULE PLACED IN 12864J.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864J.C COMPACT BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg51.h"
2 /********************************************************
3 * 12864J液晶显示器
4 *12864J:1.图形点阵液晶显示器,分辨率为128X64。可显示图形
5 * 和8×4个(16×16点阵)汉字。
6 * 2.采用8位数据总线并行输入输出和8条控制线。
7 * 3.指令简单,7种指令
8 ********************************************************/
9
10 //xdata unsigned char WR_COM_AD_L _at_ 0xF004; //写左半屏指令地址
11 //xdata unsigned char WR_COM_AD_R _at_ 0xF000; //写右半屏指令地址
12 //xdata unsigned char WR_DATA_AD_L _at_ 0xF006; //写左半屏数据地址
13 //xdata unsigned char WR_DATA_AD_R _at_ 0xF002; //写右半屏数据地址
14 //xdata unsigned char RD_BUSY_AD _at_ 0xF001; //查忙地址
15 //xdata unsigned char RD_DATA_AD _at_ 0xF003; //读数据地址
16 sbit DI=P1^0 ;
17 sbit WRR= P1^1;
18 sbit E= P1^2 ;
19 sbit CS1= P1^3 ;
20 sbit CS2= P1^4 ;
21 sbit RST=P1^5 ;
22
23 #define data P0
24
25 #define X 0xB8 //起始显示行基址
26 #define Y 0x40 //起始显示列基址
27 #define FirstLine 0xC0 //起始显示行
28
29 void delay()
30 {
31 1 unsigned char i;
32 1 for(i=0;i<50;i++) ;
33 1 }
34 //***************************************
35 //基本控制
36 //***************************************
37 //写左半屏控制指令
38 void WRComL(unsigned char _data)
39 {
40 1 CS1=1;
41 1 CS2=1;
42 1 DI=0;
43 1 WRR=0;
44 1 data = _data;
45 1 delay();
46 1 CS1=0;
47 1 CS1=1;
48 1 //while (RD_BUSY_AD & 0x80) //检查液晶显示是否处于忙状态
49 1 //{;}
50 1 }
51
52 //写右半屏控制指令
53 void WRComR(unsigned char _data)
54 {
55 1 //WR_COM_AD_R = _data;
C51 COMPILER V7.50 12864J 05/09/2008 14:17:57 PAGE 2
56 1 //while (RD_BUSY_AD & 0x80) //检查液晶显示是否处于忙状态
57 1 //{;}
58 1 CS1=1;
59 1 CS2=1;
60 1 DI=0;
61 1 WRR=0;
62 1 data = _data;
63 1 delay();
64 1 CS2=0;
65 1 CS2=1;
66 1 }
67
68 //写左半屏数据
69 void WRDataL(unsigned char _data)
70 {
71 1 CS1=1;
72 1 CS2=1;
73 1 DI=1;
74 1 WRR=0;
75 1 data = _data;
76 1 delay();
77 1 CS1=0;
78 1 CS1=1;
79 1 }
80
81 //写右半屏数据
82 void WRDataR(unsigned char _data)
83 {
84 1 //WR_DATA_AD_R = _data;
85 1 //while (RD_BUSY_AD & 0x80) //检查液晶显示是否处于忙状态
86 1 //{;};
87 1 CS1=1;
88 1 CS2=1;
89 1 DI=1;
90 1 WRR=0;
91 1 data = _data;
92 1 delay();
93 1 CS2=0;
94 1 CS2=1;
95 1 }
96
97 //显示左半屏数据,count-显示数据个数
98 void DisplayL(unsigned char *pt, char count)
99 {
100 1 while (count--)
101 1 {
102 2 WRDataL(*pt++); //写左半屏数据
103 2 }
104 1 }
105
106 //显示右半屏数据,count-显示数据个数
107 void DisplayR(unsigned char * pt, char count)
108 {
109 1 while (count--)
110 1 {
111 2 WRDataR(*pt++); //写右半屏数据
112 2 }
113 1 }
114
115 //设置左半屏起始显示行列地址,x-X起始行序数(0-7),y-Y起始列序数(0-63)
116 void SETXYL(unsigned char x, unsigned char y)
117 {
C51 COMPILER V7.50 12864J 05/09/2008 14:17:57 PAGE 3
118 1 WRComL(x+X); //行地址=行序数+行基址
119 1 WRComL(y+Y); //列地址=列序数+列基址
120 1 }
121
122 //设置右半屏起始显示行列地址,x:X起始行序数(0-7),y:Y起始列序数(0-63)
123 void SETXYR(unsigned char x, unsigned char y)
124 {
125 1 WRComR(x+X); //行地址=行序数+行基址
126 1 WRComR(y+Y); //列地址=列序数+列基址
127 1 }
128
129 //***************************************
130 //显示图形
131 //***************************************
132 //显示左半屏一行图形,A-X起始行序数(0-7),B-Y起始列地址序数(0-63)
133 void LineDisL(unsigned char x, unsigned char y, unsigned char * pt)
134 {
135 1 SETXYL(x,y); //设置起始显示行列
136 1 DisplayL(pt, 64); //显示数据
137 1 }
138
139 //显示右半屏一行图形,A-X起始行地址序数(0-7),B-Y起始列地址序数(0-63)
140 void LineDisR(unsigned char x, unsigned char y, unsigned char * pt)
141 {
142 1 SETXYR(x,y); //设置起始显示行列
143 1 DisplayR(pt, 64); //显示数据
144 1 }
145
146 //***************************************
147 //显示字体,显示一个数据要占用X行两行位置
148 //***************************************
149 //右半屏显示一个字节/字:x-起始显示行序数X(0-7);y-起始显示列序数Y(0-63);pt-显示字数据首地址
150 void ByteDisR(unsigned char x, unsigned char y,unsigned char * pt)
151 {
152 1 SETXYR(x,y); //设置起始显示行列地址
153 1 DisplayR(pt, 8); //显示上半行数据
154 1 SETXYR(x+1,y); //设置起始显示行列地址
155 1 DisplayR(pt+8, 8); //显示下半行数据
156 1 }
157
158 void WordDisR(unsigned char x, unsigned char y,unsigned char * pt)
159 {
160 1 SETXYR(x,y); //设置起始显示行列地址
161 1 DisplayR(pt, 16); //显示上半行数据
162 1 SETXYR(x+1,y); //设置起始显示行列地址
163 1 DisplayR(pt+16, 16); //显示下半行数据
164 1 }
165
166 //左半屏显示一个字节/字:x-起始显示行序数X(0-7);y-起始显示列序数Y(0-63);pt-显示字数据首地址
167 void ByteDisL(unsigned char x, unsigned char y,unsigned char * pt)
168 {
169 1 SETXYL(x,y); //设置起始显示行列地址
170 1 DisplayL(pt, 8); //显示上半行数据
171 1 SETXYL(x+1,y); //设置起始显示行列地址
172 1 DisplayL(pt+8, 8); //显示下半行数据
173 1 }
174
175 void WordDisL(unsigned char x, unsigned char y,unsigned char * pt)
176 {
177 1 SETXYL(x,y); //设置起始显示行列地址
178 1 DisplayL(pt, 16); //显示上半行数据
179 1 SETXYL(x+1,y); //设置起始显示行列地址
C51 COMPILER V7.50 12864J 05/09/2008 14:17:57 PAGE 4
180 1 DisplayL(pt+16, 16); //显示下半行数据
181 1 }
182 //清屏
183 void LCDClear()
184 {
185 1 //清左半屏
186 1 unsigned char x,y;
187 1 char j;
188 1 x = 0; //起始行,第0行
189 1 y = 0; //起始列,第0列
190 1 for (x = 0; x < 8; x++) //共8行
191 1 {
192 2 SETXYL(x,y); //设置起始显示行列地址
193 2 j = 64;
194 2 while (j--)
195 2 WRDataL(0);
196 2 }
197 1 //清右半屏
198 1 x = 0; //起始行,第0行
199 1 y = 0; //起始列,第0列
200 1 for (x = 0; x < 8; x++) //共8行
201 1 {
202 2 SETXYR(x,y); //设置起始显示行列地址
203 2 j = 64;
204 2 while (j--)
205 2 WRDataR(0);
206 2 }
207 1 }
208
209 //液晶初始化
210 void LCD_INIT()
211 {
212 1 WRComL(0x3e); //初始化左半屏,关显示
213 1 WRComL(FirstLine); //设置起始显示行,第0行
214 1 WRComR(0x3e); //初始化右半屏,关显示
215 1 WRComR(FirstLine); //设置起始显示行,第0行
216 1 LCDClear(); //清屏
217 1 WRComL(0x3f); //开显示
218 1 WRComR(0x3f); //开显示
219 1 }
220
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 486 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 18
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -