📄 lcd12864.lst
字号:
228 1 }
229
230
231
232 SendCommandToLCD(unsigned char command) //写命令到LCD中
233 {
234 1 CheckState();
235 1 RS=0; //向LCD发送命令
236 1 RW=0;
237 1 Dataport=command; //command :命令
238 1 EN=1;
239 1 EN=0;
240 1 }
241
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 5
242
243 void SetLine(unsigned char page) //设置页 0xb8是页的首地址
244 {
245 1 page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
246 1 SendCommandToLCD(page);
247 1 }
248
249
250 void SetStartLine(unsigned char startline) //设定显示开始行,0xc0是行的首地址
251 {
252 1 startline=0xc0|startline; //1100 0000
253 1 SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
254 1 }
255
256
257 void SetColumn(unsigned char column) //设定列地址--Y 0-63 ,0x40是列的首地址
258 {
259 1 column=column &0x3f; //column最大值为64,越出 0=<column<=63
260 1 column= 0x40|column; //01xx xxxx
261 1 SendCommandToLCD(column);
262 1 }
263
264
265 void SetOnOff(unsigned char onoff) //开关显示,0x3f是开显示,0x3e是关显示
266 {
267 1 onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
268 1 SendCommandToLCD(onoff);
269 1 }
270
271
272 void WriteByte(unsigned char dat) //写显示数据
273 {
274 1 CheckState();
275 1 RS=1;
276 1 RW=0;
277 1 Dataport=dat;//dat:显示数据
278 1 EN=1;
279 1 EN=0;
280 1 }
281
282
283
284
285 void SelectScreen(unsigned char screen) //选择屏幕screen: 0-全屏,1-左屏,2-右屏
286 {
287 1 switch(screen)
288 1 { case 0: cs1=0;//全屏
289 2 _nop_(); _nop_(); _nop_();
290 2 cs2=0;
291 2 _nop_(); _nop_(); _nop_();
292 2 break;
293 2 case 1: cs1=0;//左屏
294 2 _nop_(); _nop_(); _nop_();
295 2 cs2=1;
296 2 _nop_(); _nop_(); _nop_();
297 2 break;
298 2 case 2: cs1=1;//右屏
299 2 _nop_(); _nop_(); _nop_();
300 2 cs2=0;
301 2 _nop_(); _nop_(); _nop_();
302 2 break;
303 2 }
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 6
304 1 }
305
306
307 void ClearScreen(unsigned char screen) //清屏screen: 0-全屏,1-左屏,2-右
308 {
309 1 unsigned char i,j;
310 1 SelectScreen(screen);
311 1
312 1 for(i=0;i<8;i++) //控制页数0-7,共8页
313 1 {
314 2 SetLine(i);
315 2 SetColumn(0);
316 2 for(j=0;j<64;j++) //控制列数0-63,共64列
317 2 {
318 3 WriteByte(0x00); //写点内容,列地址自动加1
319 3 }
320 2 }
321 1
322 1 }
323
324 void delay(uint nms) //延时程序
325 {
326 1 uint i;
327 1 for(; nms > 0; nms--)
328 1 for(i = 0; i < 500; i++);
329 1 }
330
331 void lcd_rol() //向上滚屏
332 {
333 1 uint i;
334 1 for(i = 0; i < 64; i++)
335 1 {
336 2 cs1=0; // 片选1
337 2 SendCommandToLCD(0xc0+i);
338 2 cs1=1;
339 2
340 2 cs2=0;// 片选2
341 2 SendCommandToLCD(0xc0+62-i);
342 2 cs2=0; // 片选2
343 2
344 2 delay(6);
345 2 }
346 1 }
347 void InitLCD() //初始化LCD
348 {
349 1
350 1 CheckState();
351 1
352 1 SelectScreen(0);
353 1 SetOnOff(0); //关显示
354 1
355 1 SelectScreen(0);
356 1 SetOnOff(1); //开显示
357 1
358 1 SelectScreen(0);
359 1 ClearScreen(0);//清屏
360 1
361 1 SetStartLine(0); //开始行:0
362 1
363 1 }
364
365
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 7
366 //显示全角汉字
367 void Display(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
368 {
369 1 int i; //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
370 1
371 1 SelectScreen(ss);
372 1 column=column&0x3f;
373 1
374 1 SetLine(page); //写上半页
375 1 SetColumn(column); //控制列
376 1 for(i=0;i<16;i++) //控制16列的数据输出
377 1 {
378 2 WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
379 2
380 2 }
381 1
382 1 SetLine(page+1); //写下半页
383 1 SetColumn(column); //控制列
384 1 for(i=0;i<16;i++) //控制16列的数据输出
385 1 {
386 2 WriteByte(Hzk[i+32*number+16]); //i+32*number+16汉字的后16个数据输出
387 2 }
388 1
389 1 }
390
391
392 //显示半角汉字和数字和字母
393 void Displayen(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
394 {
395 1 int i; //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
396 1
397 1 SelectScreen(ss);
398 1 column=column&0x3f;
399 1
400 1 SetLine(page); //写上半页
401 1 SetColumn(column);
402 1 for(i=0;i<8;i++)
403 1 {
404 2 WriteByte(Ezk[i+16*number]);
405 2 }
406 1
407 1 SetLine(page+1); //写下半页
408 1 SetColumn(column);
409 1 for(i=0;i<8;i++)
410 1 {
411 2 WriteByte(Ezk[i+16*number+8]);
412 2 }
413 1 }
414
415 void main()
416 { int i;
417 1 InitLCD();
418 1
419 1 ClearScreen(0);//清屏
420 1
421 1 SetStartLine(0);
422 1
423 1 for(i=0;i<4;i++)
424 1 {
425 2 Display(2,0,i*16,i);
426 2 Display(1,0,i*16,i+4);
427 2
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 8
428 2 Display(2,0+2,i*16,i+8);
429 2 Display(1,0+2,i*16,i+12);
430 2
431 2 Display(2,0+2+2,i*16,i+16);
432 2 Display(1,0+2+2,i*16,i+20);
433 2 }
434 1
435 1 for(i=0;i<8;i++)
436 1 {
437 2 Displayen(2,0+2+2+2,i*8,i);
438 2 Displayen(1,0+2+2+2,i*8,i+8);
439 2 }
440 1
441 1 while(1)
442 1 {
443 2 lcd_rol();
444 2 delay(1000);
445 2 }
446 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 669 ----
CONSTANT SIZE = 1024 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -