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

📄 lcd3300.c

📁 NOKIA3300 液晶驱动
💻 C
字号:
#include <reg51.h>
#include <string.h>
#include <ascii.h>
#include <image.h>

#define uchar unsigned char 
#define uint unsigned int 

//#define LCD_RET_H PORTD|=0x80   //RESET ---- PD7 
//#define LCD_RET_L PORTD&=0x7f 
sbit RET=P1^4;

//#define LCD_CS_H PORTD|=0x40    //CS ---- PD6 
//#define LCD_CS_L PORTD&=0xbf 
sbit CS=P1^5;

//#define LCD_CLK_H PORTB|=0x20   //CLK ---- PB5 
//#define LCD_CLK_L PORTB&=0xdf 
sbit CLK=P1^2;

//#define LCD_DIN_H PORTB|=0x08   //DIN ---- PB3 
//#define LCD_DIN_L PORTB&=0xf7 
sbit DIN=P1^3;

// Epson S1D15G10 Command Set 
#define DISON       0xaf    
#define DISOFF      0xae    
#define DISNOR      0xa6   
#define DISINV      0xa7   
#define COMSCN      0xbb    
#define DISCTL      0xca    
#define SLPIN       0x95    
#define SLPOUT      0x94    
#define PASET       0x75    
#define CASET       0x15    
#define DATCTL      0xbc    
#define RGBSET8     0xce    
#define RAMWR       0x5c    
#define RAMRD       0x5d    
#define PTLIN       0xa8    
#define PTLOUT      0xa9    
#define RMWIN       0xe0    
#define RMWOUT      0xee    
#define ASCSET      0xaa    
#define SCSTART     0xab    
#define OSCON       0xd1    
#define OSCOFF      0xd2    
#define PWRCTR      0x20    
#define VOLCTR      0x81    
#define VOLUP       0xd6    
#define VOLDOWN     0xd7    
#define TMPGRD      0x82    
#define EPCTIN      0xcd    
#define EPCOUT      0xcc    
#define EPMWR       0xfc    
#define EPMRD       0xfd    
#define EPSRRD1     0x7c    
#define EPSRRD2     0x7d    
#define NOP         0x25    

//void init_lcd (); 
//void init_mcu (); 
//void lcd_data (uchar data); 
//void lcd_command (uchar command); 

void delay(unsigned int time)
{
 while(time--);
}
  
void lcd_data (uchar data11) 
{ 
 uchar i;
 uchar idata data1;
 data1=data11;
 CS=0; 
    
 CLK=0; 
 DIN=1;       //数据 
 CLK=1; 
  
 //for(i=0;i<8;i++)
 //{
  CLK=0;
  DIN=(data1)&0x80;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x40;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x20;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x10;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x08;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x04;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x02;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x01;
  CLK=1;
// }
    
 CS=1;  
} 

void lcd_data1 (uchar data11) 
{ 
 uchar i;
 uchar idata data1;
 data1=data11;
 CS=0; 
    
 CLK=0; 
 DIN=1;       //数据 
 CLK=1; 
  
 //for(i=0;i<8;i++)
 //{
  CLK=0;
  DIN=(data1)&0x01;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x02;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x04;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x08;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x10;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x20;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x40;
  CLK=1;

  CLK=0;
  DIN=(data1)&0x80;
  CLK=1;
// }
    
 CS=1;  
}
    
void lcd_command (uchar command1) 
{ 
 uchar i;
 uchar idata command;
 command=command1;
 CS=0; 
    
 CLK=0; 
 DIN=0;       //命令 
 CLK=1; 
  
 //for(i=0;i<8;i++)
 //{
  CLK=0;
  DIN=(command)&0x80;
  CLK=1;

  CLK=0;
  DIN=(command)&0x40;
  CLK=1;

  CLK=0;
  DIN=(command)&0x20;
  CLK=1;

  CLK=0;
  DIN=(command)&0x10;
  CLK=1;

  CLK=0;
  DIN=(command)&0x08;
  CLK=1;

  CLK=0;
  DIN=(command)&0x04;
  CLK=1;

  CLK=0;
  DIN=(command)&0x02;
  CLK=1;

  CLK=0;
  DIN=(command)&0x01;
  CLK=1;
// }
    
 CS=1;   
}

void ClrScr(unsigned char bcolor)
{
   unsigned int num;
   unsigned char n,x;
   x=0;
   for (n=0;n<5;n++) 
    { 
          lcd_command (PASET); 
          lcd_data (x); 
          x+=25; 
          lcd_data (x++); 
          lcd_command (CASET); 
          lcd_data (2); 
          lcd_data (131); 
         
          lcd_command (RAMWR); 
         
          num=130*26; 
          while (num--) 
            lcd_data (bcolor);  
    } 
} 
  
void init_lcd () 
{ 
 RET=0; 
 delay(10);
 RET=1; 
         
 lcd_command (DISCTL); 
 lcd_data (0x0f); 
 lcd_data (0x20); 
 lcd_data (0x0f); 
 lcd_data (0x01); 
         
 lcd_command (COMSCN);   //上下半图象扫描顺序 
 lcd_data (0x01); 
         
 lcd_command (OSCON); 
 lcd_command (SLPOUT); 
      
 lcd_command (VOLCTR); 
 lcd_data (0x0E);         //调整对比度,越大越亮 
 lcd_data (5);         //色彩调整,5最合适 
         
 lcd_command (PWRCTR); 
 lcd_data (0x0f); 
         
 lcd_command (DISINV);    //颜色顺序 
 lcd_command (SLPOUT); 
         
 lcd_command (DATCTL); 
 lcd_data (0x01);         //改变增量方向 
 lcd_data (0x00); 
 lcd_data (0x01); 
         
 lcd_command (RGBSET8);   //调色板设置 
 lcd_data (0x00); 
 lcd_data (0x02); 
 lcd_data (0x04); 
 lcd_data (0x06); 
 lcd_data (0x08); 
 lcd_data (0x0a); 
 lcd_data (0x0c); 
 lcd_data (0x0f); 
         
 lcd_data (0x00); 
 lcd_data (0x02); 
 lcd_data (0x04); 
 lcd_data (0x06); 
 lcd_data (0x08); 
 lcd_data (0x0a); 
 lcd_data (0x0c); 
 lcd_data (0x0f); 
         
 lcd_data (0x00); 
 lcd_data (0x06); 
 lcd_data (0x09); 
 lcd_data (0x0f); 
           
 lcd_command (DISON);
}

void PutChar(unsigned char x,unsigned char y,unsigned char bcolor,unsigned char fcolor,char c)
{
 unsigned char i,j,temp;
 lcd_command (PASET); 
 lcd_data(0+y);  
 lcd_data(0+y+16); 
 lcd_command(CASET); 
 lcd_data(1+x); 
 lcd_data(x+8);
 lcd_command(RAMWR);
 for(i=0;i<16;i++)
 {
  temp=asc[c-32][i];
  for(j=0;j<8;j++)
  {
   lcd_data(((temp>>j)&0x01)?fcolor:bcolor);
  }
 }
}

void PutStr(unsigned char x,unsigned char y,unsigned char bcolor,unsigned char fcolor,char *s)
{
 unsigned char len;
 unsigned char i;
 len=strlen(s);
 for(i=0;i<len;i++)
 {
  PutChar(x,y,bcolor,fcolor,s[i]);
  x+=8;
  if(x>125) 
  {
   x=0;
   y+=16;
  }
 }
}

void PutImg(unsigned char x,unsigned char y,unsigned char width,unsigned char height,unsigned char *img)
{
 unsigned long i,num;
 num=width*height;
 lcd_command (PASET); 
 lcd_data(0+y);  
 lcd_data(0+y+height); 
 lcd_command(CASET); 
 lcd_data(1+x); 
 lcd_data(x+width);
 //lcd_command(DISINV);
 lcd_command(RAMWR);
 for(i=0;i<num;i++)
 {
  lcd_data(img[i]);
 } 
}



void main () 
 { 
   unsigned char i,j;
   uchar x=0,n=0; 
     
    
/*   
   for (n=0;n<5;n++) 
    { 
          lcd_command (PASET); 
          lcd_data (x); 
          x+=25; 
          lcd_data (x++); 
          lcd_command (CASET); 
          lcd_data (2); 
          lcd_data (131); 
         
          lcd_command (RAMWR); 
         
          num=130*26; 
          while (num--) 
            lcd_data (color[n]);  
    }        
      */
	  /*
    lcd_command (PASET); 
    lcd_data (60); 
    //x+=25; 
    lcd_data (130); 
    lcd_command (CASET); 
    lcd_data (2); 
    lcd_data (131); 
         
    lcd_command (RAMWR);
   for(num=60*130;num<16900;num++)
   {
     
     lcd_data(gImage_1[num]);
   }		*/
   //PutChar(10,10,0x00,0xff,'A');
   //for(i=0;i<255;i++)
   init_lcd ();
   //while(1)
   ClrScr(0x07);
   delay(1000);
   ClrScr(0x38);
   delay(1000);
   ClrScr(0xC0);
   delay(1000);
   ClrScr(0x19);
   delay(10000);
   ClrScr(0x34);
   delay(10000);
   //for(i=0;i<256;i++)
   //{
    
    //PutStr(10,10,0,i,"I love this LCD!!!yahoo,yahoo,yahoo,yahoo.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1");
   //}
   //for(i=0;i<7;i++)
   //for(j=0;j<37;j++)

   while(1)
   {  
    
    /*
    PutImg(0,0,123,94,gImage_1),ClrScr(0);
	PutImg(0,0,72,65,gImage_2),ClrScr(0);
	PutImg(0,0,130,43,gImage_3),ClrScr(0);
	PutImg(0,0,100,100,gImage_4),ClrScr(0);
	PutImg(0,0,50,50,gImage_5),ClrScr(0);
	PutImg(0,0,123,93,gImage_6),ClrScr(0);*/
    PutImg(0,0,100,100,gImage_14),ClrScr(10);
	delay(30000);
	//PutImg(0,0,50,50,gImage_8);
	//PutImg(0,0,128,128,gImage_9);
	PutImg(0,0,102,130,gImage_16),ClrScr(44);
	delay(30000);
	PutImg(0,0,93,140,gImage_12),ClrScr(100);
	delay(30000);
	PutImg(0,0,140,103,gImage_13),ClrScr(200);
	delay(30000);
   }
   while (1); 

     
 }  

 

⌨️ 快捷键说明

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