📄 at89c52+12232lcd.lst
字号:
C51 COMPILER V8.08 AT89C52_12232LCD 08/05/2008 11:48:34 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE AT89C52_12232LCD
OBJECT MODULE PLACED IN AT89C52+12232LCD.OBJ
COMPILER INVOKED BY: E:\keil\C51\BIN\C51.EXE AT89C52+12232LCD.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 ---------------------------------------------------------------
3 |DB0-----P0.0 | DB4-----P0.4 | RW-------P1.1 | A0--------P1.0 |
4 |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | V0接1K电阻到GND |
5 |DB2-----P0.2 | DB6-----P0.6 | E1-------P1.3 |
6 |DB3-----P0.3 | DB7-----P0.7 | E2-------P1.2 |
7 ---------------------------------------------------------------
8
9
10 [注:AT89x52使用22.1184M或11.0592M晶振,实测使用22.1184M或11.0592都可以]
11 编译平台:Keil uV2 7.08
12 */
13
14 #include "reg52.h"
15 #include "INTRINS.H"
16
17
18
19 #define uchar unsigned char
20 #define uint unsigned int
21
22 //#define E1 P1_2 //块1 左边
23 //#define E2 P1_3 //块2 右边
24 //#define RW P1_1
25 //#define A0 P1_0 //A0为1时是数据,0时为指令数据
26 //#define DATA P0 //数据
27
28
29 sbit A0=P1^0;
30 sbit RW=P1^1;
31 sbit E1=P1^2;
32 sbit E2=P1^3;
33
34
35
36 sbit RS=P2^1;
37 #define DATA P0
38
39
40
41 extern uchar code Bmpt1[];
42 extern uchar code Bmpt2[];
43 extern uchar code Bmpt3[];
44 extern uchar code Bmpt4[];
45 extern uchar code Bmpt5[];
46 extern uchar code Bmpt6[];
47 extern uchar code Bmpt7[];
48 extern uchar code Bmptc[];
49 extern uchar code bmp001[];
50 extern uchar code bmp002[];
51 extern uchar code Bmp08[];
52 extern uchar code Bmp07[];
53 extern uchar code Bmp06[];
54 extern uchar code Bmp05[];
55 extern uchar code Bmp04[];
C51 COMPILER V8.08 AT89C52_12232LCD 08/05/2008 11:48:34 PAGE 2
56 extern uchar code Bmp03[];
57 extern uchar code Bmp02[];
58 extern uchar code Bmp01[];
59 extern uchar code Bmp012[];
60 extern uchar code Bmp003[];
61 extern uchar code Bmp002[];
62
63
64 //延时
65 void delay(uint i)
66 {
67 1 uint k=200;
68 1 while(i>0)
69 1 { i--; }
70 1 while(k>0)
71 1 { k--; }
72 1 }
73
74 void waitenl(void)
75 {
76 1 uchar i=0x00;
77 1 E1=0;
78 1 E2=0;
79 1 A0=0;
80 1 RW=1;
81 1 P0=0xff;
82 1 _nop_();
83 1 E1=1;
84 1 _nop_();
85 1 i=P0;
86 1 E1=0;
87 1 i&=0x80;
88 1 while(i)
89 1 {
90 2 E1=1;
91 2 _nop_();
92 2 i=P0;
93 2 _nop_();
94 2 E1=0;
95 2 i&=0x80;
96 2
97 2 }
98 1 E1=0;
99 1 E2=0;
100 1 A0=0;
101 1 RW=1;
102 1 _nop_();
103 1
104 1 }
105 void waitenr(void)
106 {
107 1 uchar i=0x00;
108 1 E1=0;
109 1 E2=0;
110 1 _nop_();
111 1 A0=0;
112 1 RW=1;
113 1 P0=0xff;
114 1 _nop_();
115 1 E2=1;
116 1 _nop_();
117 1 i=P0;
C51 COMPILER V8.08 AT89C52_12232LCD 08/05/2008 11:48:34 PAGE 3
118 1 E2=0;
119 1 i&=0x80;
120 1 while(i)
121 1 {
122 2 E2=1;
123 2 _nop_();
124 2 i=P0;
125 2 _nop_();
126 2 E2=0;
127 2 i&=0x80;
128 2 }
129 1 E1=0;
130 1 E2=0;
131 1 A0=0;
132 1 RW=1;
133 1 _nop_();
134 1 }
135
136 //左页
137 //发送数据
138 void OUTLD(uchar i)
139 {
140 1 waitenl();
141 1 E1=0;
142 1 _nop_();
143 1 A0=1; //写数据
144 1 RW=0;
145 1 _nop_();
146 1 E1=1;
147 1 _nop_();
148 1 DATA=i;
149 1 _nop_();
150 1 E1=0;
151 1 _nop_();
152 1 A0=0;
153 1 RW=1;
154 1 _nop_();
155 1 DATA=0xff;
156 1 }
157 //左页
158 //发送命令
159 void OUTLI(uchar i)
160 {
161 1 waitenl();
162 1 E1=0;
163 1 _nop_();
164 1 A0=0; //写指令
165 1 RW=0;
166 1 _nop_();
167 1 E1=1;
168 1 _nop_();
169 1 DATA=i;
170 1 _nop_();
171 1 E1=0;
172 1 _nop_();
173 1 A0=0;
174 1 RW=1;
175 1 _nop_();
176 1 DATA=0xff;
177 1 }
178 //右页
179 //发送数据
C51 COMPILER V8.08 AT89C52_12232LCD 08/05/2008 11:48:34 PAGE 4
180 void OUTRD(uchar i)
181 {
182 1 waitenr();
183 1 E2=0;
184 1 _nop_();
185 1 A0=1; //写数据
186 1 RW=0;
187 1 _nop_();
188 1 E2=1;
189 1 _nop_();
190 1 DATA=i;
191 1 _nop_();
192 1 E2=0;
193 1 _nop_();
194 1 A0=0;
195 1 RW=1;
196 1 _nop_();
197 1 DATA=0xff;
198 1 }
199 //右页
200 //发送命令
201 void OUTRI(uchar i)
202 {
203 1 waitenr();
204 1 E2=0;
205 1 _nop_();
206 1 A0=0; //写指令
207 1 RW=0;
208 1 _nop_();
209 1 E2=1;
210 1 _nop_();
211 1 DATA=i;
212 1 _nop_();
213 1 E2=0;
214 1 _nop_();
215 1 A0=0;
216 1 RW=1;
217 1 _nop_();
218 1 DATA=0xff;
219 1 }
220
221
222 //初始化
223 void LCDINI(void)
224 {
225 1 OUTLI(0xE2);
226 1 OUTRI(0xE2);//复位
227 1 OUTLI(0xAE);
228 1 OUTRI(0xAE);//display off
229 1 OUTLI(0xA4);
230 1 OUTRI(0xA4);//static drive off
231 1 OUTLI(0xA9);
232 1 OUTRI(0xA9);//1/32占空比
233 1 OUTLI(0xA1);
234 1 OUTRI(0xA1);//时钟线输出,select ADC=CW
235 1 OUTLI(0xEE);
236 1 OUTRI(0xEE);//写模式,read-modify-write off
237 1
238 1 OUTLI(0x00); //column address
239 1 OUTLI(0xC0); //display start line
240 1 OUTRI(0x00);
241 1 OUTRI(0xC0);
C51 COMPILER V8.08 AT89C52_12232LCD 08/05/2008 11:48:34 PAGE 5
242 1
243 1 OUTLI(0xAF);//display on
244 1 OUTRI(0xAF);
245 1
246 1 }
247 /*
248 函数说明:同时设置主从显示页为0-3页。(内函数,私有,用户不直接调用)
249 ------------------------------------------------------------------------
250 */
251 void SetPage(uchar page0,uchar page1)
252 {
253 1 OUTLI(0xB8|page0);
254 1 OUTRI(0xB8|page1);
255 1 }
256
257 /*
258 --------------------------------------------------------------------------------
259 函数说明:同时设置主从列地址为0-121。(内函数,私有,用户不直接调用)
260 --------------------------------------------------------------------------------
261 */
262 void SetAddress(uchar address0,uchar address1)
263 {
264 1 OUTLI(address0);
265 1 OUTRI(address1);
266 1 }
267
268 /*
269 --------------------------------------------------------------------------------
270
271 调用方式:void PutChar0(uchar ch)
272 函数说明:在右页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
273 --------------------------------------------------------------------------------
274 -*/
275 void PutCharR(uchar ch)
276 {
277 1 OUTRD(ch);
278 1 }
279
280 /*
281 --------------------------------------------------------------------------------
282
283 调用方式:void PutChar1(uchar ch)
284 函数说明:在左页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
285 --------------------------------------------------------------------------------
286 -*/
287 void PutCharL(uchar ch)
288 {
289 1 OUTLD(ch);
290 1 }
291
292 /*
293 --------------------------------------------------------------------------------
294
295 调用方式:void DrawBmp(bit layer,uchar width,uchar *bmp)
296 函数说明:画一个图,layer表示上下层,width是图形的宽,高都是16,bmp是
297 图形指针
298 使用zimo3软件,纵向取模,字节倒序/240字节
299 --------------------------------------------------------------------------------
300 -*/
301 void DrawBmp(bit layer,uchar width,uchar *bmp)
302 {
303 1 uchar x,address,i=0; //address表示显存的物理地址
C51 COMPILER V8.08 AT89C52_12232LCD 08/05/2008 11:48:34 PAGE 6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -