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

📄 3510.c

📁 (41)3510手机彩屏,提供详细的驱动的
💻 C
字号:
/*================================================

			3510i符液晶屏驱动演示程序
==================================================
	RST		    BIT	P1.0  ;复位
	CS		    BIT	P1.1  ;片选
	SDATA		BIT P1.2  ;串行数据
	SCLK      	BIT	P1.3  ;串行时钟

[注]:AT89C51的晶振频率为12MHz
============================================================================*/
						// 产生汇编文件
#include <reg51.h>
#include <math.h>



//========= 变量类型标识的宏定义,大家都喜欢这么做 ==============
#define	Uchar unsigned char
#define Uint unsigned int
#define CMD    0 
#define DATA   1 


sbit RST  =P2^3;
sbit CS   =P2^2;
sbit SDATA=P2^1;
sbit SCLK =P2^0;
  

sbit    ACC0=ACC^0;
sbit    ACC1=ACC^1;
sbit    ACC2=ACC^2;
sbit    ACC3=ACC^3;
sbit    ACC4=ACC^4;
sbit    ACC5=ACC^5;
sbit    ACC6=ACC^6;
sbit    ACC7=ACC^7;


Uchar code asci[];
Uchar code bmp[];

void LCD_Clear(bit color);
void test(void);
void test2(void);
void Delay400Ms(void);
void COLORSET(bit color);
void SENDLCM(Uchar Sdata, Uchar cd);
void Delay5Ms(void);
void DATAOVER(void);
void LCD_Initialize(void);
void test3(unsigned long kk);
void LCD_Drawbmp(bit color);
void LCD_Drawasc(Uchar x, Uchar y,Uchar n,Uchar color,Uchar pen);
void LCD_Drawhz(Uchar x, Uchar y,Uchar n,Uchar color,Uchar pen);
void LCD_DrawLine(Uchar x1, Uchar y1, Uchar x2, Uchar y2,Uchar color);
void LCD_DrawRectangle(Uchar x1, Uchar y1, Uchar x2, Uchar y2,Uchar color);
void LCD_Drawtime(Uchar x, Uchar y,Uchar n,Uchar color,Uchar pen);
void LCD_Drawdd(Uchar x, Uchar y,Uchar n,Uchar pen);
void LCD_DrawPoint(Uchar x, Uchar y,Uchar color);



/*
void LCD_Drawbmp(bit color)
{
Uchar x,y,*pic;
pic =bmp;

    SENDLCM(0x2C,CMD );//memory write
	if (color==1)	
	{
	}
	else
	{
	for(y = 0; y < 67; y ++)
		for(x = 0; x < 98; x ++)
		{
			SENDLCM(*pic,DATA );
			pic++;
			}
	}
	DATAOVER(); 
}
	 */

 /*

//画点
void LCD_DrawPoint(Uchar x, Uchar y,Uchar color)
{
    SENDLCM(0x2a,CMD );//column address set
    SENDLCM(x,DATA );
	SENDLCM(x,DATA );
 	DATAOVER(); 

    SENDLCM(0x2B,CMD );//page address set
    SENDLCM(y,DATA );
	SENDLCM(y,DATA );
 	DATAOVER(); 	
	
	SENDLCM(0x2C,CMD );		//memory write
	SENDLCM(color,DATA );
	DATAOVER(); 	
}


//画线
void LCD_DrawLine(Uchar x1, Uchar y1, Uchar x2, Uchar y2,Uchar color)
{
	Uint x, y, t;
	if((x1 == x2) && (y1 == y2))
		LCD_DrawPoint(x1, y1,color);
	else if(abs(y2 - y1) > abs(x2 - x1))
	{
		if(y1 > y2)
		{
			t = y1;
			y1 = y2;
			y2 = t;
			t = x1;
			x1 = x2;
			x2 = t;
		}
		for(y = y1; y <= y2; y ++)
		{
			x = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
			LCD_DrawPoint(x, y,color);
		}
	}
	else
	{
		if(x1 > x2)
		{
			t = y1;
			y1 = y2;
			y2 = t;
			t = x1;
			x1 = x2;
			x2 = t;
		}
		for(x = x1; x <= x2; x ++)
		{
			y =(x - x1) * (y2 - y1) / (x2 - x1) + y1;
			LCD_DrawPoint(x, y,color);
		}
	}
}

//画距形
void LCD_DrawRectangle(Uchar x1, Uchar y1, Uchar x2, Uchar y2,Uchar color)
{
	LCD_DrawLine(x1, y1, x2, y1,color);
	LCD_DrawLine(x2, y1, x2, y2,color);
	LCD_DrawLine(x2, y2, x1, y2,color);
	LCD_DrawLine(x1, y2, x1, y1,color);
}
*/

//************************
//清屏:color=1为4096色模式清屏
//    :color=0为256色模式清屏
//************************
void LCD_Clear(bit color)
{
	Uchar x, y;

    SENDLCM(0x2a,CMD );//column address set
    SENDLCM(0,DATA );
	SENDLCM(97,DATA );
 	DATAOVER(); 


    SENDLCM(0x2B,CMD );//page address set
    SENDLCM(0,DATA );
	SENDLCM(66,DATA );
 	DATAOVER(); 
	

    SENDLCM(0x2C,CMD );//memory write
	if (color==1)	
	{
	for(y = 0; y < 67; y ++)
		for(x = 0; x < 147; x ++)
			SENDLCM(0,DATA );
	}
	else
	{
	for(y = 0; y < 67; y ++)
		for(x = 0; x < 98; x ++)
			SENDLCM(0,DATA );
	}
	DATAOVER(); 	

}

//************************
//颜色模式设置:color=1为4096色模式
//            :color=0为256色模式
//************************
void COLORSET(bit color)
{

if (color==1) {
	SENDLCM(0x3a, CMD);		//interface pixel format
	SENDLCM(0x03, DATA);    //0x03 为4096色,0x02为256色
	DATAOVER(); 
	}
	else
	{
	SENDLCM(0x3a, CMD);		//interface pixel format
	SENDLCM(0x02, DATA);    //0x03 为4096色,0x02为256色
	DATAOVER(); 


	SENDLCM(0x2d, CMD);		//colour set
//red
SENDLCM(0x00, DATA);
SENDLCM(0x02, DATA);
SENDLCM(0x03, DATA);
SENDLCM(0x04, DATA);
SENDLCM(0x05, DATA);
SENDLCM(0x06, DATA);
SENDLCM(0x08, DATA);
SENDLCM(0x0f, DATA);

//green
SENDLCM(0x00, DATA);
SENDLCM(0x02, DATA);
SENDLCM(0x03, DATA);
SENDLCM(0x04, DATA);
SENDLCM(0x05, DATA);
SENDLCM(0x06, DATA);
SENDLCM(0x08, DATA);
SENDLCM(0x0f, DATA);
//blue
SENDLCM(0x00, DATA);
SENDLCM(0x03, DATA);
SENDLCM(0x06, DATA);
SENDLCM(0x0f, DATA);
   DATAOVER(); 
   }
}
//***********************
//3510i液晶初始化
//***********************
void LCD_Initialize(void)
{
	Uint i;

    P1=0xFF;

	RST=0;
	Delay5Ms();
	RST=1;

	CS=0;
	SCLK=0;
	SDATA=0;

   SENDLCM(0x01, CMD);      // LCD Software Reset 
   DATAOVER(); 
   Delay5Ms(); 
    
   SENDLCM(0xC6, CMD);      // Initial Escape 
   DATAOVER(); 
    
   SENDLCM(0xB9, CMD);      // Refresh set 
   SENDLCM(0x00, DATA); 
   DATAOVER(); 
    
   SENDLCM(0xB6, CMD);      // Display Control 
   SENDLCM(128, DATA); 
   SENDLCM(128, DATA); 
   SENDLCM(129, DATA); 
   SENDLCM(84, DATA); 
   SENDLCM(69, DATA); 
   SENDLCM(82, DATA); 
   SENDLCM(67, DATA); 
   DATAOVER(); 
    
   SENDLCM(0xB3, CMD);      // Gray Scale Position 
   SENDLCM(1, DATA); 
   SENDLCM(2, DATA); 
   SENDLCM(4, DATA); 
   SENDLCM(8, DATA); 
   SENDLCM(16, DATA); 
   SENDLCM(30, DATA); 
   SENDLCM(40, DATA); 
   SENDLCM(50, DATA); 
   SENDLCM(60, DATA); 
   SENDLCM(70, DATA); 
   SENDLCM(80, DATA); 
   SENDLCM(90, DATA); 
   SENDLCM(100, DATA); 
   SENDLCM(110, DATA); 
   SENDLCM(127, DATA); 
   DATAOVER(); 
    
   SENDLCM(0xB5, CMD);      // Gamma Curve Set 
   SENDLCM(1, DATA); 
   DATAOVER(); 

   SENDLCM(0xBD, CMD);      // Power Control 
   SENDLCM(0x00, DATA); 
   DATAOVER(); 
    
   SENDLCM(0xBE, CMD);      // Power Control 
   SENDLCM(4, DATA); 
   DATAOVER(); 
    
   SENDLCM(0x11, CMD);      // Sleep out 
   DATAOVER(); 

   SENDLCM(0xBA, CMD);      // Power Control 
   SENDLCM(0x7F, DATA); 
   SENDLCM(0x03, DATA);
   DATAOVER(); 

   SENDLCM(0x36, CMD);      // 扫描方式
   SENDLCM(0xc0, DATA); 
   DATAOVER(); 
    
   SENDLCM(0xB7, CMD);      // Temperature gradient set 
   for(i=0; i<14; i++) { 
      SENDLCM(0, DATA); 
   } 
   DATAOVER(); 

   SENDLCM(0x29, CMD);      // Power Control 
   DATAOVER(); 
    
   SENDLCM(0x03, CMD);      // Booster Voltage ON 
   DATAOVER(); 
    
   for(i=0; i<8; i++) {   // Booster Voltage stabilisieren lassen 
      Delay5Ms(); 
   } 
    
   SENDLCM(0x20, CMD);      // Inversion control 
   DATAOVER(); 
    
   SENDLCM(0x25, CMD);      // Write contrast 
   SENDLCM(63, DATA); 
   DATAOVER(); 
}


//************************
//发送命令/数据到液晶
//************************
void SENDLCM(Uchar Sdata, Uchar cd)
{ 

   CS=0;

   SCLK=0;
   if (cd==CMD)
     SDATA=0;
	 else
	 SDATA=1;
	SCLK=1;

	ACC=Sdata;

     SCLK=0;
     SDATA=ACC7;
	 SCLK=1;	

	 SCLK=0;
     SDATA=ACC6;
	 SCLK=1;

	 SCLK=0;
     SDATA=ACC5;
	 SCLK=1;

	 SCLK=0;
     SDATA=ACC4;
	 SCLK=1;

	 SCLK=0;
     SDATA=ACC3;
	 SCLK=1;

	 SCLK=0;
     SDATA=ACC2;
	 SCLK=1;

	 SCLK=0;
     SDATA=ACC1;
	 SCLK=1;

	 SCLK=0;
     SDATA=ACC0;
	 SCLK=1;

}


//************************
//发送数据帧结束
//************************
void DATAOVER(void) { 
   CS=1;   // CS wieder auf 1 
} 

// 短延时
void Delay5Ms(void)
{
	Uint i = 5552;
	while(i--);
}

//长延时
void Delay400Ms(void)
{
	Uchar i = 5;
	Uint j;
	while(i--)
	{
		j=7269;
		while(j--);
	};
}



⌨️ 快捷键说明

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