📄 lce128642.lst
字号:
285 2 if (col==LCMLIMIT){col=0;row++;row++;}; /*下一列,如果列越界换行*/
286 2 if (row>7) row=0; /*如果行越界,返回首行 */
287 2 } /*上半个字符输出结束 */
288 1
289 1 col = bakerx; /*列对齐 */
290 1 row = bakery+1; /*指向下半个字符行 */
291 1 /*下半个字符输出,8列 */
292 1 for(i=0;i<8;i++)
293 1 {
294 2 cbyte = Ezk[x]; /*取点阵码 */
295 2 Wrdata(cbyte); /*写输出一字节 */
296 2 x++;
297 2 col++;
298 2 if (col==LCMLIMIT){col=0;row=row+2;}; /*下一列,如果列越界换行*/
299 2 if (row>7) row=1; /*如果行越界,返回首行 */
300 2 } /*下半个字符输出结束 */
301 1 row=bakery;
302 1 } /*整个字符输出结束 */
303
C51 COMPILER V6.12 LCE128642 04/27/2007 18:12:05 PAGE 6
304
305 /****************************************/
306 /* 全角字符点阵码数据输出 */
307 /****************************************/
308 void Putcdot(Uchar Order)
309 {
310 1 Uchar i,bakerx,bakery; /*共定义3个局部变量 */
311 1 int x; /*偏移量,字符量少的可以定义为UCHAR */
312 1 bakerx = col; /*暂存x,y坐标,已备下半个字符使用 */
313 1 bakery = row;
314 1 x=Order * 0x20; /*每个字符32字节 */
315 1
316 1 /*上半个字符输出,16列 */
317 1 for(i=0;i<16;i++)
318 1 {
319 2 Wrdata(Hzk[x]); /*写输出一字节 */
320 2 x++;
321 2 col++;
322 2 if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
323 2 if (row>6) row=0; /*如果行越界,返回首行 */
324 2 } /*上半个字符输出结束 */
325 1
326 1 /*下半个字符输出,16列 */
327 1 col = bakerx;
328 1 row = bakery+1;
329 1 for(i=0;i<16;i++) /*下半部分*/
330 1 {
331 2 Wrdata(Hzk[x]);
332 2 x++;
333 2 col++;
334 2 if (col==LCMLIMIT){col=0;row++;row++;} /*下一列,如果列越界换行*/
335 2 if (row>7) row=1; /*如果行越界,返回首行 */
336 2 } /*下半个字符输出结束 */
337 1 row = bakery;
338 1 } /*整个字符输出结束 */
339
340 /****************************************/
341 /* 清屏,全屏幕清零 */
342 /****************************************/
343 void Lcmcls( void )
344 {
345 1 for(row=0;row<8;row++)
346 1 for(col=0;col<LCMLIMIT;col++) Wrdata(0);
347 1 }
348
349 /****************************************/
350 /* 从液晶片上读数据,保留在全局变量中 */
351 /****************************************/
352
353 void Rddata(void)
354 {
355 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
356 1 Datalcm=0xFF;
357 1 Dilcm = 1;
358 1 Rwlcm=1; /*读数据*/
359 1 Elcm = 1; /*读入到LCM*/
360 1 _nop_();
361 1 cbyte = Datalcm; /*虚读一次 */
362 1 Elcm = 0;
363 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
364 1 Datalcm=0xFF;
365 1 _nop_();
C51 COMPILER V6.12 LCE128642 04/27/2007 18:12:05 PAGE 7
366 1 Dilcm = 1; /*数据*/
367 1 Rwlcm = 1; /*读数据*/
368 1 Elcm = 1; /*读入到LCM*/
369 1 _nop_();
370 1 cbyte = Datalcm; /*从数据口读数据,真读 */
371 1 Elcm = 0;
372 1 }
373
374 /****************************************/
375 /* 数据写输出 */
376 /****************************************/
377
378 void Wrdata(Uchar X)
379 {
380 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
381 1 // wtcom();
382 1 Dilcm = 1; /*数据输出*/
383 1 Rwlcm = 0;
384 1 Datalcm = X; /*数据输出到数据口 */
385 1 Elcm = 1; /*读入到LCM*/
386 1 _nop_();
387 1 Elcm = 0;
388 1 }
389
390
391 /********************************/
392 /* 命令输出到左区控制口 */
393 /********************************/
394
395 void WrcmdL(Uchar X)
396 {
397 1 lcdbusyL(); /*确定分区,返回时保留分区状态不变*/
398 1 Dilcm = 0; /*命令操作 */
399 1 Rwlcm = 0; /*写输出 */
400 1 Datalcm = X; /*数据输出到数据口 */
401 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
402 1 }
403
404 /********************************/
405 /* 命令输出到中区控制口 */
406 /********************************/
407
408 void WrcmdM(Uchar X)
409 {
410 1 //lcdbusyM(); /*确定分区,返回时保留分区状态不变*/
411 1 Dilcm = 0; /*命令操作 */
412 1 Rwlcm = 0; /*写输出 */
413 1 Datalcm = X; /*命令输出到数据口 */
414 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
415 1 }
416
417 /********************************/
418 /* 命令输出到右区控制口 */
419 /********************************/
420
421 void WrcmdR(Uchar X)
422 {
423 1 lcdbusyR(); /*确定分区,返回时保留分区状态不变 */
424 1 Dilcm = 0; /*命令操作 */
425 1 Rwlcm = 0; /*写输出 */
426 1 Datalcm = X; /*命令输出到数据口 */
427 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
C51 COMPILER V6.12 LCE128642 04/27/2007 18:12:05 PAGE 8
428 1 }
429
430 /********************************************************/
431 /* 分区操作允许等待,返回时保留分区选择状态 */
432 /********************************************************/
433 void lcdbusyL(void)
434 {
435 1 CS1LCM = 0; /*CLR CS1 */
436 1 CS2LCM = 1; /*SETB CS2 */
437 1 // CS3LCM = 1; /*SETB CS3 */
438 1 wtcom(); /* waitting for enable */
439 1 }
440
441
442 void lcdbusyR(void)
443 {
444 1 CS1LCM = 1; /*SETB CS1 */
445 1 CS2LCM = 0; /*SETB CS2 */
446 1 // CS3LCM = 0; /*CLR CS3 */
447 1 wtcom(); /* waitting for enable */
448 1 }
449
450 void wtcom(void)
451 {
452 1 Dilcm = 0; /*CLR DI */
453 1 Rwlcm = 1; /*SETB RW */
454 1 Datalcm = 0xFF; /*MOV DATA_LCM,#0FFH */
455 1 Elcm = 1;_nop_();
456 1 //while(Datalcm & Lcdbusy);
457 1 Delay(1);
458 1 Elcm = 0;
459 1 }
460
461 /********************************************************/
462 /*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
463 /********************************************************/
464 void Locatexy(void)
465 {
466 1 unsigned char x,y;
467 1 switch (col&0xc0) /* col.and.0xC0 */
468 1 { /*条件分支执行 */
469 2 case 0: {lcdbusyL();break;} /*左区 */
470 2 //case 0x40: {lcdbusyM();break;} /*中区 */
471 2 case 0x40: {lcdbusyR();break;} /*右区 */
472 2 }
473 1 x = col&0x3F|SETX; /* col.and.0x3f.or.setx */
474 1 y = row&0x07|SETY; /* row.and.0x07.or.sety */
475 1 wtcom(); /* waitting for enable */
476 1 Dilcm = 0; /*CLR DI */
477 1 Rwlcm = 0; /*CLR RW */
478 1 Datalcm = y; /*MOV P0,Y */
479 1 Elcm = 1;_nop_();Elcm = 0;
480 1 wtcom(); /* waitting for enable */
481 1 Dilcm = 0; /*CLR DI */
482 1 Rwlcm = 0; /*CLR RW */
483 1 Datalcm = x; /*MOV P0,X */
484 1 Elcm = 1;_nop_();Elcm = 0;
485 1 }
486
487 /********************************/
488 /*液晶屏初始化 */
489 /********************************/
C51 COMPILER V6.12 LCE128642 04/27/2007 18:12:05 PAGE 9
490
491 void Lcminit(void)
492 {
493 1 cbyte = DISPOFF; /*关闭显示屏 */
494 1 WrcmdL(cbyte);
495 1 WrcmdM(cbyte);
496 1 WrcmdR(cbyte);
497 1 cbyte = DISPON; /*打开显示屏 */
498 1 WrcmdL(cbyte);
499 1 WrcmdM(cbyte);
500 1 WrcmdR(cbyte);
501 1 cbyte = DISPFIRST; /*定义显示起始行为零 */
502 1 WrcmdL(cbyte);
503 1 WrcmdM(cbyte);
504 1 WrcmdR(cbyte);
505 1 Lcmcls();
506 1 col=0; /*清屏 */
507 1 row=0;
508 1 Locatexy();
509 1 }
510 /********************************/
511 /* 延时 */
512 /********************************/
513 void Delay(Uchar MS)
514 {
515 1 Uchar us,usn;
516 1 while(MS!=0)
517 1 { usn = 4;
518 2 while(usn!=0)
519 2 {
520 3 us=0xf0;
521 3 while (us!=0){us--;};
522 3 usn--;
523 3 }
524 2 MS--;
525 2 }
526 1 }
527
528 /********************************/
529 //定义字符串数组 */
530 /********************************/
531
532
533 Uchar const STRh1[]={0x80,0x81};
534 Uchar const STRh2[]={0x82,0x85};
535 Uchar const STRh3[]={0x83,0x85};
536 Uchar const STRh4[]={0x84,0x85};
537
538
539 /********************************/
540 /* 定义中文字库 */
541 /********************************/
542
543
544
545 void display(void)
546 {col=0x40;
547 1 row=0;
548 1 Putstr(STRh1,2);
549 1 /*第一行字符输出,24字节 */
550 1
551 1 col=0;
C51 COMPILER V6.12 LCE128642 04/27/2007 18:12:05 PAGE 10
552 1 row=2;
553 1 Putstr(STRh2,2); /*第二行字符输出,12字节 */
554 1 Putstr(dot2,1);
555 1
556 1 compute(disdatahou,datahou);
557 1 Putstr(disdatahou,4);
558 1
559 1 col=0;
560 1 row=4;
561 1 Putstr(STRh3,2); /*第三行字符输出,24字节 */
562 1 Putstr(dot2,1);
563 1 compute(disdatazuo,datazuo);
564 1 Putstr(disdatazuo,4);
565 1
566 1 col=0;
567 1 row=6;
568 1 Putstr(STRh4,2); /*第三行字符输出,24字节4 */
569 1 Putstr(dot2,1);
570 1 compute(disdatayou,datayou);
571 1 Putstr(disdatayou,4);
572 1 }
573
574 void compute(Uchar *disdata,Uchar shuju)
575 {Uchar temp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -