📄 lcd.lst
字号:
403 /***********************************************************************************
404 * 函数名称:LCDC_WrData;
405 *
406 * 函数功能描述:向LCD写数据;
407 *
408 * 输入参数:unsigned char类型坐标x,y, unsigned char类型写入数据dd;
409 *
410 * 返回数据:none;
411 *
412 * 注意: none;
413 ************************************************************************************/
414 void LCDC_WrData (unsigned char x, unsigned char y, unsigned char dd)
415 {
416 1 DISABLE_INTERRUPTS; //关中断
417 1 LCDC_SetXY (x,y); //设置屏上的写入位置
418 1 LCDC_CheckBusy (); //等待Lcd空闲
419 1 if (x<64) //块1使用
420 1 tp = Lcd_Cs |
421 1 Lcd_Cs1 |
422 1 Lcd_WrDat; //写入数据命令
423 1 else //块2使用
424 1 tp = Lcd_Cs |
C51 COMPILER V8.08 LCD 01/08/2009 16:11:58 PAGE 8
425 1 Lcd_Cs2 |
426 1 Lcd_WrDat; //写入数据命令
427 1 *tp = dd; //数据写入
428 1 ENABLE_INTERRUPTS; //关中断
429 1 }
430
431 /***********************************************************************************
432 * 函数名称:LCDC_RdData;
433 *
434 * 函数功能描述:从LCD中读数据;
435 *
436 * 输入参数:unsigned char类型坐标x,y,
437 *
438 * 返回数据:unsigned char类型读出数据;
439 *
440 * 注意: none;
441 ************************************************************************************/
442 unsigned char LCDC_RdData (unsigned char x, unsigned char y)
443 {
444 1 unsigned char xdata readdata;
445 1 LCDC_SetXY (x, y); //设置屏上的写入位置
446 1 LCDC_CheckBusy (); //等待Lcd空闲
447 1 if (x<64) //块1使用
448 1 {
449 2 addr = Lcd_Cs |
450 2 Lcd_Cs1 |
451 2 Lcd_RdDat; //读取数据命令
452 2 tp = Lcd_Cs |
453 2 Lcd_Cs1 |
454 2 Lcd_RdDat;
455 2 }
456 1 else //块2使用
457 1 {
458 2 addr = Lcd_Cs |
459 2 Lcd_Cs2 |
460 2 Lcd_RdDat; //读取数据命令
461 2 tp = Lcd_Cs |
462 2 Lcd_Cs2 |
463 2 Lcd_RdDat;
464 2 }
465 1 readdata = *tp; //数据读出
466 1 LCDC_CheckBusy (); //等待Lcd空闲
467 1 if (x<64) //块1使用
468 1 {
469 2 addr = Lcd_Cs |
470 2 Lcd_Cs1 |
471 2 Lcd_RdDat; //读取数据命令
472 2 tp = Lcd_Cs |
473 2 Lcd_Cs1 |
474 2 Lcd_RdDat;
475 2 }
476 1 else //块2使用
477 1 {
478 2 addr = Lcd_Cs |
479 2 Lcd_Cs2 |
480 2 Lcd_RdDat; //读取数据命令
481 2 tp = Lcd_Cs |
482 2 Lcd_Cs2 |
483 2 Lcd_RdDat;
484 2 }
485 1 readdata = *tp; //数据读出
486 1
C51 COMPILER V8.08 LCD 01/08/2009 16:11:58 PAGE 9
487 1 return readdata;
488 1 }
489
490 /***********************************************************************************
491 * 函数名称:LCDC_DrawByte;
492 *
493 * 函数功能描述:向LCD写一个字节数据;
494 *
495 * 输入参数:BYTE类型坐标x,y;BYTE类型字节数据value;
496 *
497 * 返回数据:none;
498 *
499 * 注意: 数据显示在液晶点(x,y)(x,y+1)(x,y+2)(x,y+3)(x,y+4)(x,y+5)(x,y+6)(x,y+7)上,
500 * 请参考DMC12864.pdf;
501 ***********************************************************************************/
502 void LCDC_DrawByte (unsigned char x, y, value)
503 {
504 1 unsigned char data temp,bit_x;
505 1
506 1 bit_x = y%8; //计算数据写入目标地址起点所在显示字节内的位置
507 1 y = y/8; //计算数据写入目标地址起点所在显示字节
508 1 if (bit_x==0) //如果起点在显示字节的"0"位则数据直接写入
509 1 LCDC_WrData (x, y, value);
510 1 else //如果起点不在显示字节的"0"位
511 1 {
512 2 temp = LCDC_RdData (x, y); //读出数据写入目标地址起点所在显示字节内的数据
513 2 temp &= (0xff>>(8-bit_x)); //保留新数据写如不占用位的数据
514 2 temp |= (value<<bit_x); //新数据与原数据组合
515 2 LCDC_WrData (x, y, temp); //更新LCD上此位置的数据显示
516 2 temp = LCDC_RdData(x, y+1); //读出数据写入目标地址末点所在显示字节内的数据
517 2 temp &= (0xff<<bit_x); //保留新数据写如不占用位的数据
518 2 temp |= (value>>(8-bit_x)); //新数据与原数据组合
519 2 LCDC_WrData (x, y+1, temp); //更新LCD上此位置的数据显示
520 2 }
521 1 }
522
523 /***********************************************************************************
524 * 函数名称:LCDC_DispWord;
525 *
526 * 函数功能描述:向LCD写一组数据,显示黑字符;
527 *
528 * 输入参数:unsiggned char类型写入起始坐标x,y,unsigned char类型写入数据code区指针p;
529 * unsigned char类型占用空间line*8行,length列,图形颜色取反标志位;
530 *
531 * 返回数据:none;
532 *
533 * 注意: none;
534 ************************************************************************************/
535 void LCDC_DispWord (unsigned char x, y, unsigned char code *p, unsigned char line, length, Flag)
536 {
537 1 unsigned char data i,j;
538 1
539 1 y += (4<<line);
540 1 if (y>64)
541 1 y = 64;
542 1 y = 64-y;
543 1 if (Flag)
544 1 {
545 2 for (i=0; i<line; i++)
546 2 for (j=0; j<length; j++)
547 2 LCDC_DrawByte (x+j, y+i*8, *p++);
548 2 }
C51 COMPILER V8.08 LCD 01/08/2009 16:11:58 PAGE 10
549 1 else
550 1 {
551 2 for (i=0; i<line; i++)
552 2 for (j=0; j<length; j++)
553 2 LCDC_DrawByte (x+j, y+i*8, ~*p++);
554 2 }
555 1 }
556
557 /***********************************************************************************
558 * 函数名称:LCDC_DispFWord;
559 *
560 * 函数功能描述:向LCD写一组数据,显示黑字符;
561 *
562 * 输入参数:BYTE类型写入起始坐标x,y; BYTE类型写入数据xdata区指针p;
563 * BYTE类型占用空间line*8行,length列;BYTE类型显示数据取反标志位
564 * (非零为正常显示,零为取反)
565 *
566 * 返回数据:none;
567 *
568 * 注意: none;
569 ************************************************************************************/
570 void LCDC_DispFWord (unsigned char x, y, unsigned char xdata *p, unsigned char line, length, Flag)
571 {
572 1 unsigned char data i,j;
573 1
574 1 y += (4<<line);
575 1 if (y>64)
576 1 y=64;
577 1 y = 64-y;
578 1 if (Flag)
579 1 {
580 2 for (i=0; i<line; i++)
581 2 for (j=0; j<length; j++)
582 2 LCDC_DrawByte(x+j, y+i*8, *p++);
583 2 }
584 1 else
585 1 {
586 2 for (i=0; i<line; i++)
587 2 for (j=0; j<length; j++)
588 2 LCDC_DrawByte (x+j, y+i*8, ~*p++);
589 2 }
590 1 }
591
592 /***********************************************************************************/
593 // 文件结束
594 /***********************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2375 ----
CONSTANT SIZE = 771 ----
XDATA SIZE = 4 27
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -