⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.h

📁 12864 的驱动程序 这是一个头文件在主程序重调用其中的函数就可以使用
💻 H
字号:
#include<reg52.h>
#include <absacc.h>
  
#define LEDcom1 XBYTE[0X4FF0]
#define LEDcom2 XBYTE[0X4FF1]
#define LEDcom3 XBYTE[0X4FF2]
#define LEDcom4 XBYTE[0X4FF3]
#define LEDcom5 XBYTE[0X4FF4]
#define LEDcom6 XBYTE[0X4FF5]
#define LEDcom7 XBYTE[0X4FF6]
#define LEDcom8 XBYTE[0X4FF7]
								
#define Lcd_Bus P0    //MCU P0<--信号-->LCM
#define uchar unsigned char
sbit  RS=P2^0;      //并行的指令/数据选择信号;串行的片选信号
sbit  RW=P2^1;      //并行的读/写选择信号;串行的数据口
sbit  E=P2^2;      //并行的使能信号;串行同步时钟

unsigned char Command;//状态
unsigned char LCDData;//数据
unsigned char COUNT3,COUNT2,COUNT1,COUNT,LCD_X,LCD_Y; 
void qingpin()
{ 
 LEDcom1=0;LEDcom2=0;LEDcom3=0;LEDcom4=0;
 LEDcom5=0;LEDcom6=0;LEDcom7=0;LEDcom8=0;

}

//延时子程序
void delay(unsigned int t)
{
    unsigned int i,j;
    for(i=0;i<t;i++)
      for(j=0;j<10;j++); //t*10 us
}


void busy()
{  unsigned char temp;
   do{
 Lcd_Bus=0xff;      //
 E=1;
 delay(20);
 temp=Lcd_Bus;
 E=0;
 }while(temp&0x80);


}
//写指令代码
void WriteCommand(){

 RS=0;
 RW=1;
 busy();
 RW=0;
 Lcd_Bus=Command;
 E=1;
 E=0;
 }

//写显示数据
void WriteData(){
 
 RS=0;
 RW=1;
 busy();
 RS=1;      		 
 RW=0;
 Lcd_Bus=LCDData;
 E=1;
 E=0;
 }
 

//初始化程序
void LCDInit(){
 delay(20);
 Command=0x30;//选择基本指令集
 WriteCommand();
 delay(10);
 Command=0x30;//选择8bit数据流
 WriteCommand();
 delay(5);
 Command=0x0c;//开显示(无游标.不反白)
 WriteCommand();
 delay(10);
 Command=0x01;//清DDRAM,清显示并设地址指针为00H 
 WriteCommand();
 delay(10);
 Command=0x06;//设定游标方向及显示移位
 WriteCommand();
 delay(10);
 }

//显示字符串
void HZdisp(unsigned char  *s)
{
    while(*s!='\0')
    { 
 	 	LCDData=*s;
  		WriteData();
        s++;
        delay(50);
    }
}

/*void dis_1_line(unsigned char *disdata1,unsigned char x1)
{   Command=0x06;
	WriteCommand();
    delay(5);
    Command=x1;
    WriteCommand();
    HZdisp(disdata1);
} */


//LCD清屏
void clearLCD()
{
 Command=0x01;
   WriteCommand();    //清除显示
 Command=0x06;
   WriteCommand();
    delay(5);

}

//显示汉字或字符
void Test(unsigned char *disdata,unsigned char coordinate,unsigned char rid) //数据和坐标,清屏与否
{
 if(rid==1) clearLCD();
 Command=coordinate;
  WriteCommand();    //写指令
  HZdisp(disdata); 
}


//设定图片显示地址
void address_set(uchar LCD_x,uchar LCD_y) //图片的横向和纵向地址
{
  Command=0x36;	 //扩充指令集动作,绘图ON;注意基本指令集动作中不能开绘图
   WriteCommand();
  Command=LCD_y;
   WriteCommand();
  Command=LCD_x;
   WriteCommand();
  Command=0x30;	 //关绘图
   WriteCommand();



}

 void Photoclear(const uchar *picture,uchar LCD_X,uchar LCD_Y) 
{  uchar a,Line,Row,Byte;//共16(2位)大块,每大块共32(0-31)行,每次写16字节的数据
   Line=2;  /*写数据的格式如下:从左上角(0x80,0x80)开始,分为两大块,先写第一大块(0-8)的第0行的128(8×16,*/
   Row=32;	/*1次写1个字(8位),共写16次)个数据,行号加1,列号不变,再写0-8块的第1行的128个数据,依此类推*/
   Byte=16; /*写第二大块时,列号加8,但行仍从第0行开始写,即行地址要复原为原地址重复写第一块的过程写第二大块液晶*/ 
   a=LCD_Y;
   for (;Line!=0;Line--) 
   {   LCD_Y=a;	//注意写第二大块时,列号加8,但行仍从第0行开始写
       Row=32;              
       for (;Row!=0;Row--) 
       {  Byte=16;         //Byte=8,只写左边;Byte=16,写整块
		  address_set(LCD_X,LCD_Y);  
          for (;Byte!=0;Byte--) 
           { LCDData=*picture++;
             WriteData(); 
           } 
         LCD_Y++;//列加1 
       } 
       LCD_X=0X88;      //行以 
   } 	
   Command=0x36;              //开绘图
   WriteCommand();
   Command=0x30; 
   WriteCommand();           //关绘图
} 


/*  图片显示  */
/*写数据的格式如下:从左上角(0x80,0x80)开始,分为两大块,先写第一大块(0-8)的第0行的128(8×16,
  1次写1个字(8位),共写16次)个数据,行号加1,列号不变,再写0-8块的第1行的128个数据,依此类推。写第
  二大块时,列号加8,但仍从第0行开始写,即行地址要复原为原地址重复写第一块的过程写第二大块液晶。
*/
 void Photo(const uchar *picture,uchar LCD_X,uchar LCD_Y) 
{  uchar a,Line,Row,Byte;//共16(2位)大块,每大块共32(0-31)行,每次写16字节的数据
   Line=2;  /*写数据的格式如下:从左上角(0x80,0x80)开始,分为两大块,先写第一大块(0-8)的第0行的128(8×16,*/
   Row=32;	/*1次写1个字(8位),共写16次)个数据,行号加1,列号不变,再写0-8块的第1行的128个数据,依此类推*/
   Byte=8; /*写第二大块时,列号加8,但行仍从第0行开始写,即行地址要复原为原地址重复写第一块的过程写第二大块液晶*/ 
   a=LCD_Y;
   for (;Line!=0;Line--) 
   {   LCD_Y=a;	//注意写第二大块时,列号加8,但行仍从第0行开始写
       Row=32;              
       for (;Row!=0;Row--) 
       {  Byte=8;         //Byte=8,只写左边;Byte=16,写整块
		  address_set(LCD_X,LCD_Y);  
          for (;Byte!=0;Byte--) 
           { LCDData=*picture++;
             WriteData(); 
           } 
         LCD_Y++;//列加1 
       } 
       LCD_X=0X88;      //行以 
   } 	
   Command=0x36;              //开绘图
   WriteCommand();
   Command=0x30; 
   WriteCommand();           //关绘图
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -