📄 lcd12864.lst
字号:
C51 COMPILER V6.12 LCD12864 04/05/2008 19:37:21 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN Lcd12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Lcd12864.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*------------------------------------------
2 lcd12864液晶显示驱动实
3 ----------------------------------------------
4 /CS1----选择IC1,低有效 即 (左)64列
5 /CS2----选择IC2,低有效 即 (右)64列
6 -----------------------------------------------
7 RS: D/I=H,表示DB7~DB0为显示数据
8 D/I=L,表示DB7~DB0为显示指令数据
9 -----------------------------------------------
10 R/W: R/W=H,E=H数据被读到DB7~DB0
11 R/W=L,E信号下降沿,DDRAM数据被写到IR或DR
12 ----------------------------------------------------
13 E: R/W=L,E信号下降沿锁存DB7~DB0
14 R/W=H,E=H DDRAM数据读到DB7~DB0
15 ----------------------------------------------------
16
17 |9. DB0-----P1.0 |13. DB4-----P1.4 |1. CS1-------P3.2 |
18 |10. DB1-----P1.1 |14. DB5-----P1.5 |2. CS2-------P3.3 |
19 |11. DB2-----P1.2 |15. DB6-----P1.6 |6. RS--------P3.4 |
20 |12. DB3-----P1.3 |16. DB7-----P1.7 |7. RW--------P3.5 |
21 |17 脚---A正电源 |18 脚------K地 |8. E---------P3.6 |
22 |5. VO--------0V | 3. 脚------ 地 |4. 脚-------正电源|
23 -----------------------------------------------------------*/
24
25 #include <AT89X52.H>
26 #include<stdio.h>
27 #include<intrins.h>
28 #include"zimo.h"
29
30 #define CS1 P2_2
31 #define CS2 P2_3
32 #define RS P2_0
33 #define RW P2_1
34 #define E P1_0
35 #define Data P0
36
37 #define key P3_1
38
39 void delay(void ); //延时程序
40 void lcdinitial(void); //初始化子程序
41 void clrram(void); //复位子程序
42 void writeMI(unsigned char i); //主驱动器发指
43 void writeSI(unsigned char i); //从驱动器发指
44 void writeMD(unsigned char i); //主驱动器发数
45 void writeSD(unsigned char i); //从驱动器发数
46 void SetPage(unsigned char page1,page2); //设置页地址
47 void display(unsigned char word,unsigned char layer, unsigned char width,unsigned char code *array);
48
49 unsigned char code arrayadress0[];
50
51 void main(void)
52 {
53 1
54 1
55 1 while (1)
C51 COMPILER V6.12 LCD12864 04/05/2008 19:37:21 PAGE 2
56 1 {
57 2 lcdinitial();
58 2 clrram();
59 2 delay();
60 2 display(1,0,8,arrayadress0+8);
61 2 display(1,1,8,arrayadress0);
62 2 delay();
63 2 }
64 1
65 1
66 1 }
67
68
69
70 /*-----------------------
71 主控制器 发指令
72 函数 writMI(unsigned char i) 是内部函数
73 从i发指令
74 --------------------------*/
75
76 void writeMI(unsigned char i)
77 {
78 1 do{
79 2 CS1=1;
80 2 CS2=1;
81 2 E=0;
82 2 RS=0; RW=1;CS1=0;E=1; //判断主控制器忙?//
83 2 }while(P0&0x80); //
84 1
85 1 CS1=1;
86 1 E=0;
87 1 RS=0;RW=0; Data=i;CS1=0; E=1;
88 1 _nop_();_nop_();E=0; //低电平时发指令
89 1 }
90
91 /*-------------------------------------
92 从控制器发指令--
93 ?函数 writSI(unsigned char i) 是内部函数
94 从i发指令
95 -----------------------------------------*/
96
97 void writeSI(unsigned char i)
98 {
99 1 do{
100 2 CS1=1;
101 2 CS2=1;
102 2 E=0;
103 2 RS=0; RW=1;CS2=0;E=1; //判断从控制器忙?
104 2 }while(P0&0x80); //
105 1
106 1 CS2=1;
107 1 E=0;
108 1 RS=0;RW=0;Data=i;CS2=0; E=1;
109 1 _nop_();_nop_();E=0; //低电平时发指令
110 1 }
111
112 /*-------------------------------------
113 函数 writMD (unsigned char i) 是内部函数
114 从i发数据
115 -----------------------------------------*/
116 void writeMD(unsigned char i)
117 {
C51 COMPILER V6.12 LCD12864 04/05/2008 19:37:21 PAGE 3
118 1 do{
119 2 CS1=1;
120 2 CS2=1;
121 2 E=0;
122 2 RS=0; RW=1;CS1=0;E=1; //判断主控制器忙?//
123 2 }while(P0&0x80); //
124 1
125 1 CS1=1;
126 1 E=0;
127 1 RS=1;RW=0; Data=i;CS1=0; E=1;
128 1 _nop_();_nop_();E=0;
129 1
130 1 }
131
132 /*-------------------------------------
133 函数 writiSD(unsigned char i) 是内部函数
134 从i发数据
135 -----------------------------------------*/
136 void writeSD(unsigned char i)
137 {
138 1 do{
139 2 CS1=1;
140 2 CS2=1;
141 2 E=0;
142 2 RS=0; RW=1;CS2=0;E=1; //判断主控制器忙?//
143 2 }while(P0&0x80); //
144 1
145 1 CS2=1;
146 1 E=0;
147 1 RS=1;RW=0; Data=i;CS2=0; E=1;
148 1 _nop_();_nop_();E=0;
149 1 }
150
151 void SetPage(unsigned char page1,page2)
152
153 { writeMI(0xB8|page1); //设置主窗口页面地址//
154 1 writeSI(0xB8|page2); //设置从窗口页面地址//
155 1 }
156 /*-------------------------------
157 清屏函数、
158 设置页面地址、设置主窗口显示地址
159 -----------------------------------*/
160
161 void clrram(void)
162 {
163 1 unsigned char line;
164 1 unsigned char page;
165 1
166 1 for (page=0;page<8;page++)
167 1 {
168 2 SetPage(page,page);//设置页面地址
169 2 writeMI(0x40); //、设置主窗口显示地址//
170 2 writeSI(0x40); //设置从窗口显示地址//
171 2 for(line=0;line<64;line++)
172 2 { writeMD(0x00);
173 3 writeSD(0x00);
174 3 }
175 2 }
176 1 }
177
178 void display(unsigned char word,unsigned char layer, unsigned char width,unsigned char code *array)
179 {
C51 COMPILER V6.12 LCD12864 04/05/2008 19:37:21 PAGE 4
180 1 unsigned char x;
181 1 unsigned char k=16 ;
182 1 unsigned char address; //address表示显存的物理地址
183 1 unsigned char p=0;
184 1 unsigned char page;
185 1 page=layer;
186 1
187 1 address=64-(word*8)/2;
188 1
189 1 writeMI(0xB8|page); //主控制器发页地址//
190 1 writeMI(0x04); //主控制器发窗口地址//
191 1 for(x=0;x<=width/2;x++)
192 1
193 1 { if(k--)
194 2 { writeMD(array[p]); // (左-- 上)层数据输出
195 3 p++;}
196 2 else {k=16;
197 3 p=p+16;
198 3 }
199 2 }
200 1 writeSI(0xB8|page); //从控制器发页地址//
201 1 writeSI(0x04); //从控制器发窗口地址//
202 1 for(x=0;x<=width/2;x++)
203 1 { if(k--)
204 2 { writeSD(array[p]); //(右--上)层数据输//
205 3 p++;}
206 2 else {k=16;
207 3 p=p+16;
208 3 }
209 2 }
210 1
211 1 }
212 void display(unsigned char word,unsigned char layer, unsigned char width,unsigned char code *array)
213 {
214 1 unsigned char x;
215 1 unsigned char k=16 ;
216 1 unsigned char address; //address表示显存的物理地址
217 1 unsigned char p=0;
218 1 unsigned char page;
219 1
220 1 if (layer==0) //页地址
221 1 page=0;
222 1 if (layer==1)
223 1 page=1;
224 1 if (layer==2)
225 1 page=2;
226 1 if (layer==3)
227 1 page=3;
228 1
229 1 address=61-(word*16)/2;
230 1
231 1 writeMI(0xB8|page); //主控制器发页地址//
232 1 writeMI(address); //主控制器发窗口地址//
233 1 for(x=0;x<=width/2;x++)
234 1 { if(k--)
235 2 { writeMD(array[p]); // (左-- 上)层数据输出
236 3 p++;}
237 2 else {k=16;
238 3 p=p+16;
239 3 }
240 2
241 2 }
C51 COMPILER V6.12 LCD12864 04/05/2008 19:37:21 PAGE 5
242 1
243 1 writeSI(0xB8|page); //从控制器发页地址//
244 1 writeSI(0x00); //从控制器发窗口地址//
245 1 for(x=0;x<=width/2;x++)
246 1 { if(k--)
247 2 { writeSD(array[p]); //(右--下)层数据输//
248 3 p++;}
249 2 else {k=16;
250 3 p=p+16;
251 3 }
252 2 }
253 1
254 1 }
*** ERROR C237 IN LINE 254 OF LCD12864.C: '_display': function already has a body
255
256
257 /*--------------------------------
258 yan shi cheng xu
259 ------------------------------*/ //延时程序
260 void delay(void )
261 {
262 1 unsigned int i;
263 1 unsigned int j;
264 1 for(i=0;i<=1000;i++)
265 1 for(j=0;j<=250;j++);
266 1 }
267 /*---------------------
268 初始化程序
269 ----------------------*/
270 void lcdinitial(void)
271 {
272 1 writeMI(0x3f);writeSI(0x3f); //显示器开
273 1 //writeMI(0x3e);writeSI(0x3e); //显示器关
274 1 writeMI(0xc0);writeSI(0xc0); //设置显示起始行
275 1 writeMI(0xB8);writeSI(0xB8); //设置DDRAM中的页地址(X地址)
276 1 writeMI(0x40);writeSI(0x40); //设置DDRAM中的地址(Y地址)
277 1
278 1 }
279 unsigned char code arrayadress0[]={
280
281
282 0x00,0x00,0x00,0x18,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00//"1",0
283
284
285
286
287
288
289
290 /*0x00,0x02,0x42,0x42,0x42,0x42,0x42,0x7F,0x7F,0x43,0x42,0x42,0x42,0x42,0x42,0x02,
291 0x02,0x02,0x06,0x0C,0x18,0x30,0xE0,0xC0,0xFC,0xFE,0x02,0x02,0x02,0x02,0x0E,0x0E,//"无",0
292
293 0x02,0x06,0x1E,0xFB,0xE7,0x46,0x09,0x09,0x09,0xFF,0xFF,0x49,0x79,0x39,0x29,0x01,
294 0x04,0x44,0xC4,0xCC,0x48,0x48,0x4C,0x04,0x0C,0xC8,0xF8,0x38,0x6C,0x46,0x1F,0x1F,//"线",1
295
296 0x00,0x00,0x1F,0x1F,0x12,0x12,0x12,0xFF,0xFF,0x12,0x12,0x12,0x1F,0x1F,0x00,0x00,
297 0x00,0x00,0xF0,0xF0,0x20,0x20,0x20,0xFC,0xFE,0x22,0x22,0x22,0xF2,0xF2,0x0E,0x0E,//"电",2
298
299 0x08,0x08,0xFF,0xFF,0x08,0x08,0x1B,0x13,0x10,0xFF,0xFF,0x10,0x1F,0x1F,0x01,0x00,
300 0x00,0x00,0xFE,0xFE,0x00,0xC2,0xC6,0x1C,0xF8,0xE0,0x04,0x06,0xFE,0xFC,0xC0,0xC0,//"协",3
301
302 0x01,0x03,0x02,0x06,0x0E,0x1A,0x32,0xE2,0xE2,0x32,0x1A,0x0E,0x06,0x07,0x03,0x02,
C51 COMPILER V6.12 LCD12864 04/05/2008 19:37:21 PAGE 6
303 0x00,0x00,0x42,0x47,0x4F,0x5A,0x72,0x66,0x46,0x44,0x54,0x5F,0x4F,0x46,0x00,0x00 //"会",4
304 */
305 } ;
306
307
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -