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

📄 main.c

📁 12864的液晶屏驱动程序使用51单片机编写
💻 C
📖 第 1 页 / 共 2 页
字号:
    LCD_write_string(0,2,str1);
  
    LCD_write_string(0,3,str2);
    
    Disp_H_Line();
    
    Disp_Img(BMP);
    write_command(0x01);
    drawrectangular(0,40,64,48);
    }
    
} 

void initLCD()
{ write_command(0x01);
   delay_us(20);
  write_command(0x0c);
   delay_us(20);
  write_command(0x80);
   delay_us(20);
}

void write_command(unsigned char COMMAND)
{

  RS=0;
  RW=0;
  E=1;
  delay_us(20);

  *P_IOA_Data = COMMAND;
  delay_us(20);
  E=0;
}

void write_data(unsigned char DATA)
{
 
   E=1;
   RS=1;
   RW=0;
   delay_us(20);
   *P_IOA_Data = DATA;
   delay_us(20);
   E=0;
}

void delay_us(int time)
{int i =0;
  do
  {
    time--;
    *P_Watchdog_Clear=0x0001;
  }
  while(time>1);
  
}

void delay_ms(unsigned int time)
{
  while(time != 0)
  {
    delay_us(100);
    time--;
  }
}

void LCD_busy( )
{  RS=0;
   RW=1;
   E=1;
  *P_IOB_Dir = 0xff00;
  *P_IOB_Attrib=0xffff;
   while((*P_IOB_Data&0x80)==0x80);
   E=0;
}



void LCD_set_xy( unsigned char x, unsigned char y )
  {
    unsigned char address;
	switch(y){
	case 0: 
	   address = 0x8 + x;
	    break; 
        case 1: 
	    address = 0x90 + x;
	    break; 
	case 2: 
	    address = 0x88 + x;
	    break; 
        case 3: 
	    address = 0x98 + x;
        
	    break; 
	default:address = 0x80 + x;}
    write_command( address);
    
  }


void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
  {
  LCD_set_xy( X, Y );
     
    while (*s) 
      {
        write_data( *s );
	    s ++;
		delay_us(1);
       }
  }
  
void CGRAM()
{ int i=0,j;
  
  for(j=0;j<32;j++)    
     {
      write_command(0x36); 
      write_command(j+0x80);     //行地址
      write_command(0x80);       //列地址
      write_command(0x30);	
      write_data(zk[i++]);
      write_data(zk[i++]);
      write_data(zk[i++]);
      write_data(zk[i++]);
      }
}  

void Disp_Img(unsigned char  *img)
{ unsigned int j=0;
   unsigned char x,y,i;
       for(i=0;i<9;i+=8)
       for(y=0;y<32;y++)        //原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙
         for(x=0;x<8;x++)
         {  write_command(0x36);         //功能设置---8BIT控制界面,扩充指令集
            write_command(y+0x80);       //行地址
            write_command(x+0x80+i);     //列地址
            write_command(0x30);
            write_data(img[j++]);
            write_data(img[j++]);
         }   
           
}

void Disp_H_Line()
{ unsigned char x,y;
   unsigned char k=0x00; 
       for(y=0;y<32;y++)
         { k=~k;
           for(x=0;x<16;x++)
         {  write_command(0x36);
            write_command(y+0x80);     //行地址
            write_command(x+0x80);     //列地址
            write_command(0x30);
            write_data(k);
            write_data(k);
           }
         }
     write_command(0x34);                          
     write_command(0x36);
}


void drawrectangular(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
   	int i,j;
   	unsigned char x=x2-x1;
   	unsigned char y=y2-y1;
   	for(j=0;j<y;j++)
  //  for(i=0;i<x;i++) 
   	{	
   		write_command(0x36);
   	    write_command(0x80+y1+j); //行地址
   	    write_command(0x80+x1);   //列地址
   	    write_command(0x30);
   	    for(i=0;i<x;i+=8)
   	//    write_data(0xff);
   	    write_data(0xff);		
   	}
}   	
	
	
	
	
	
	
	
	
	
	
	    

⌨️ 快捷键说明

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