📄 lcd.lst
字号:
509 1 {
510 2 for(i=0;i<250;i++);
511 2 }
512 1 }
513 //////////////////LCD写命令字函数 ///////////////////////////////////////
514 void LCD_Write_Com(uchar CMD)
515 {
516 1 // Check_Busy();///检测忙信号////
517 1 PORTB=CMD; /// 将命令字符送往数据口 ///
518 1 CS=0;
519 1 RAD=1;
520 1 RS=0;
521 1 WRT=0;
522 1 LCD_NOP();
523 1 WRT=1;
524 1 RS=1;
525 1 CS=1;
526 1 }
527 //////////////LCD写数据函数 /////////////////////////////////////////////////
528 void LCD_Write_Dat(uchar x_data)
529 {
530 1 // Check_Busy();///检测忙信号////
531 1 PORTB=x_data; /// 将数据字符送往数据口 ///
532 1 CS=0;
533 1 RAD=1;
534 1 RS=1;
535 1 WRT=0;
536 1 LCD_NOP();
537 1 WRT=1;
538 1 RS=1;
539 1 CS=1;
540 1 }
541 //////////////LCD读取数据函数 /////////////////////////////////////////////////
542 uchar LCD_Read_Dat(void)
543 {
544 1 uchar x_data;
545 1 // Check_Busy();///检测忙信号////
546 1 PORTB=0xff; /// 将数据0xff送往数据口 ///
547 1 CS=0;
548 1 WRT=1;
549 1 RS=0;
550 1 RAD=0;
C51 COMPILER V7.50 LCD 05/13/2008 18:45:43 PAGE 10
551 1 LCD_NOP();
552 1 x_data=PORTB;
553 1 RS=1;
554 1 RAD=1;
555 1 CS=1;
556 1 return(x_data);
557 1 }
558 //////////////LCD设定功能函数 /////////////////////////////////////////////////
559 void LCD_Write_Funtion(uchar CMD,uchar x_data)
560 {
561 1 LCD_Write_Com(CMD);
562 1 LCD_Write_Com(x_data);
563 1 }
564
565 //////////////LCD读取缓冲器函数 /////////////////////////////////////////////////
566 uchar LCD_Read_Funtion(uchar CMD)
567 {
568 1 LCD_Write_Com(CMD);
569 1 return(LCD_Read_Dat());
570 1 }
571
572 //////////////LCD参数初始化函数 /////////////////////////////////////////////////
573 void LCD_Init(void)
574 {
575 1 //初始化参数表:前面的是寄存器地址,后面的是参数
576 1 //LCD_Write_Funtion(0x00,0xCD);//LCD基本显示功能设定 文本模式
577 1 LCD_Write_Funtion(0x00,0xCC);//LCD基本显示功能设定 文本模式
578 1 LCD_Write_Funtion(0x01,0xF0);//中断准位(高电平) / 设定系统频率8MHz
579 1 LCD_Write_Funtion(0x02,0x10);//LCD内存读写速度与功能设定(读字形ROM)
580 1 LCD_Write_Funtion(0x03,0x80);//LCD特殊显示功能
581 1 // LCD_Write_Funtion(0x10,0x6B);//LCD基本显示功能设定 2
582 1 LCD_Write_Funtion(0x10,0x4B);//LCD基本显示功能设定 光标不自动移位
583 1 LCD_Write_Funtion(0x11,0x00);//光标高度和行距设定
584 1 LCD_Write_Funtion(0x12,0x91) ;//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
585 1 LCD_Write_Funtion(0x20,0x1E) ;//实际显示窗口垂直结束地址(LCD屏的分辨率30*8=240)
586 1 LCD_Write_Funtion(0x30,0x7F) ;//实际显示窗口水平结束地址(128)
587 1 LCD_Write_Funtion(0x40,0x00) ;//实际显示窗口垂直起始地址
588 1 LCD_Write_Funtion(0x50,0x00) ;//实际显示窗口水平起始地址
589 1 LCD_Write_Funtion(0x21,0x1E) ;//工作区窗口垂直结束地址(用户指定的显示窗口)
590 1 LCD_Write_Funtion(0x31,0x7F) ;//工作区窗口水平结束地址
591 1 LCD_Write_Funtion(0x41,0x00) ;//工作区窗口垂直起始地址
592 1 LCD_Write_Funtion(0x51,0x00) ;//工作区窗口水平起始地址
593 1 LCD_Write_Funtion(0x60,0x00) ;//地址定位
594 1 LCD_Write_Funtion(0x61,0x00) ;//
595 1 LCD_Write_Funtion(0x70,0x00) ;//
596 1 LCD_Write_Funtion(0x71,0x00) ;//
597 1 LCD_Write_Funtion(0x72,0x00) ;//
598 1 LCD_Write_Funtion(0x80,0xAA) ;//光标闪烁时间
599 1 LCD_Write_Funtion(0x81,0x04) ;//保留
600 1 LCD_Write_Funtion(0x91,0x00) ;//保留
601 1 LCD_Write_Funtion(0x90,0x10) ;//值太大屏幕会闪烁
602 1 LCD_Write_Funtion(0xA0,0x11) ;//键、触摸屏、光标行列状态
603 1 LCD_Write_Funtion(0xA1,0x00) ;
604 1 LCD_Write_Funtion(0xA2,0x00) ;
605 1 LCD_Write_Funtion(0xA3,0x00) ;
606 1 LCD_Write_Funtion(0xB0,0x27) ;
607 1 LCD_Write_Funtion(0xB1,0xEF) ;
608 1 LCD_Write_Funtion(0xC0,0x00) ;
609 1 LCD_Write_Funtion(0xC1,0x0A) ;
610 1 LCD_Write_Funtion(0xC8,0x80) ;
611 1 LCD_Write_Funtion(0xC9,0x80) ;
612 1 LCD_Write_Funtion(0xCA,0x00) ;
C51 COMPILER V7.50 LCD 05/13/2008 18:45:43 PAGE 11
613 1 LCD_Write_Funtion(0xD0,0x80) ;
614 1 LCD_Write_Funtion(0xE0,0x00) ;//自动写此寄存器的数据到DDRAM(图形模式有效)
615 1 LCD_Write_Funtion(0xF0,0xA0) ;//字符字体控制
616 1 LCD_Write_Funtion(0xF1,0x0F) ;//字符点阵大小控制
617 1 ///39//
618 1 }
619 //////////清除文本层显示数据函数 ///////////////////
620 void LCD_Clear_Text(void)
621 {
622 1 uchar i,j;
623 1 LCD_Write_Funtion(0x00,0xCD);//文本模式
624 1 LCD_Write_Funtion(0x10,0x61);//写光标bu自动移位//光标不显示//光标不闪烁//自适应宽度//
625 1 LCD_Write_Funtion(0xF0,0xA0);//ASII区块0//
626 1 for(i=0;i<8;i++)/////共8行文本//////
627 1 {
628 2 for(j=0;j<30;j++)////水平30个字节宽//
629 2 {
630 3 LCD_Write_Funtion(0x60,j);//地址定位
631 3 LCD_Write_Funtion(0x70,16*i);//地址定位
632 3 LCD_Write_Dat(0x20);////连续写入8X30个空格的ASII码//
633 3 }
634 2 }
635 1 }
636 //////////清除图形层显示数据函数 ///////////////////
637 void LCD_Clear_Graphics(void)
638 {
639 1 uchar i,j;
640 1 LCD_Write_Funtion(0x00,0xC5); //图形模式
641 1 LCD_Write_Funtion(0x10,0x61);//写光标bu自动移位//光标不显示//光标不闪烁//自适应宽度//
642 1 LCD_Write_Funtion(0x12,0x91);//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
643 1 for(i=0;i<128;i++)/////垂直共128行//////
644 1 {
645 2 for(j=0;j<30;j++)////水平30个字节宽//
646 2 {
647 3 LCD_Write_Funtion(0x60,j);//地址定位
648 3 LCD_Write_Funtion(0x70,i);//地址定位
649 3 LCD_Write_Dat(0x00); ////每页连续写入128X30个数据/////
650 3 }
651 2 }
652 1 }
653
654 //////////////////写汉字字符串函数 /////////////////////////////////
655 void LCD_Write_word(uchar LCM_X,uchar LCM_Y,uchar *ptr)//LCM_X的范围是0-29//写汉字时应该为偶数,写字符串时
-无限制/////////////////
656 { ////////LCM_Y的范围是0-127///////
657 1 uchar i=0;
658 1 LCD_Write_Funtion(0x00,0xCD);//文本模式
659 1 LCD_Write_Funtion(0x10,0x69);//写光标自动移位//光标不显示//光标不闪烁//自适应宽度//
660 1 LCD_Write_Funtion(0xF0,0xA0);//ASII区块0//
661 1 LCD_Write_Funtion(0x60,LCM_X);//地址定位
662 1 LCD_Write_Funtion(0x70,LCM_Y);//地址定位
663 1 while (*ptr != '%')////利用数组最后有空格作为信息结束的判断/////
664 1 {
665 2 if((LCM_X+i)>=30)
666 2 {
667 3 LCM_X=0;
668 3 LCM_Y=LCM_Y+16;
669 3 i=0;
670 3 LCD_Write_Funtion(0x60,LCM_X) ;//地址定位
671 3 LCD_Write_Funtion(0x70,LCM_Y) ;//地址定位
672 3 }
673 2 LCD_Write_Dat(*ptr++);
C51 COMPILER V7.50 LCD 05/13/2008 18:45:43 PAGE 12
674 2 i++;
675 2 }
676 1 }
677 //////////////////横向写不规则字符串函数 /////////////////////////////////
678 void H_Write_abnormity_string(uchar LCM_X,uchar LCM_Y,uchar x_data,uchar number)//LCM_X的范围是0-29//写汉
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -