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

📄 lcd.c

📁 msp430的触摸屏驱动
💻 C
字号:
#include"lcd.h"
/*==================================================================
* Function	: LCD_CMD
* Description	: 送命令及选通CS=0;
* Input Para	: unsigned char LCDdata
* Output Para	: void
* Return Value: void
===================================================================*/
void LCD_CMD(U8 LCDdata)
{
//  P1DIR |= 0x35;//第0,2,4,5输出使能
  P1OUT &= 0xFA;//第0,2为零,及CS,RS=0
  P1OUT |= 0x20;//第5脚为1,及RD*为1
  LCD_data = LCDdata;//送数据
  P1OUT &= 0xEF;//第4脚置零,WR*=0
  P1OUT |= 0x10;//第4脚置1,WR*=1,
  P1OUT |= 0x01;//cs=1;
}
/*==================================================================

* Function	: LCD_DAT
* Description	: 送数据及禁止CS=1;
* Input Para	: unsigned char LCDdata
* Output Para	: void
* Return Value  : void
===================================================================*/
void LCD_DAT(U8 LCDdata)
{
//  P1DIR |= 0x35;//第0,2,4,5输出使能
  P1OUT &= 0xFE;//第0为零,及CS=0
  P1OUT |= 0x24;//第2,5脚为1,及RS,RD*为1
  LCD_data = LCDdata;//送数据
  P1OUT &= 0xEF;//第4脚置零,WR*=0
  P1OUT |= 0x10;//第4脚置1,WR*=1,
  P1OUT |= 0x01;//cs=1;
}

/*==================================================================
* Function	: delay_ms
* Description	: 延时子程序
* Input Para	: unsigned int
* Output Para	: void
* Return Value: void
==================================================================*/
void delay_ms(unsigned long int DelayConuter)
{
  for(unsigned long int i=0;i<DelayConuter;i++);
}
/*==================================================================
* Function	: lcd_init
* Description	: 初始化lcd,在使用lcd之前必须调用
* Input Para	: void
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_init(void)
{
	U8 X,Y;
//	U8 * pPoint;

	/*reset lcd, delay some tiem, like 10, 20 ms*/
	LCD_nRST_set;
	LCD_nRST_cle;

        delay_ms(300);
        
	LCD_nRST_set;

	/*关背光,初始化完后再开*/
	BL_EN_cle;
	/*初始化LCD,初始化命令由LCD原厂提供,
	有兴趣可以对照lcd driver ic看看每条命令的含义,
	调节lcd显示效果也通过这些命令。
	注: 这部分代码,本店不予技术支持*/
	LCD_CMD(0x11);     //slep out     
	LCD_CMD(0x20);     //Display Inversion Off    
	LCD_CMD(0X25);     //    
	LCD_DAT(0x01);     //
	LCD_CMD(0x38);     //Idle Mode Off
	LCD_CMD(0x13);     //Normal Display Mode On    
	LCD_CMD(0x36);	   //Memory Data Access Control 
	LCD_DAT(0xc8);     //

	LCD_CMD(0XC0);     //Power Control 1  
	LCD_DAT(0x06);     //
	LCD_DAT(0x05);     //

	LCD_CMD(0Xc5);	   //VCOM Control 1
	LCD_DAT(0xA2);     //
	LCD_CMD(0Xc6);	   //VCOM Control 2 
	LCD_DAT(0x09);     //

	LCD_CMD(0X3a);     //Interface Pixel Format
	LCD_DAT(0x65);     //

	LCD_CMD(0xf0) ;    //
	LCD_DAT(0x5a);     //

	LCD_CMD(0xf2) ;    //
	LCD_DAT(0x01); 
           
	//-----------gamma--------------
	LCD_CMD(0xe0);	   //Gamma (‘+’polarity for Red color) Correction Characteristics Setting
	LCD_DAT(0x00);     //
	LCD_DAT(0x01);     //
	LCD_DAT(0x06); 
	LCD_DAT(0x2A); 
	LCD_DAT(0x25);
	LCD_DAT(0x0b); 
	LCD_DAT(0x18); 
	LCD_DAT(0x05); 
	LCD_DAT(0x06); 
	LCD_DAT(0x05);
	LCD_DAT(0x0B); 
	LCD_DAT(0x0C); 
	LCD_DAT(0x01); 
	LCD_DAT(0x04); 
	LCD_DAT(0x03);
	LCD_DAT(0x06);

	LCD_CMD(0xe1);	    //Gamma (‘-’polarity for Red color) Correction Characteristics Setting
	LCD_DAT(0x06); 
	LCD_DAT(0x1D); 
	LCD_DAT(0x21); 
	LCD_DAT(0x0f); 
	LCD_DAT(0x0a);
	LCD_DAT(0x04); 
	LCD_DAT(0x05); 
	LCD_DAT(0x18); 
	LCD_DAT(0x06); 
	LCD_DAT(0x04);
	LCD_DAT(0x05); 
	LCD_DAT(0x02); 
	LCD_DAT(0x0B); 
	LCD_DAT(0x0A); 
	LCD_DAT(0x05);
	LCD_DAT(0x05);
	//初始化LCD -end

	LCD_CMD(LCD_R_DISPLAY_ON);  


	/*刷屏,全屏显示白屏或者中间创易电子logo*/

	/*设置刷屏区域*/
	lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCREEN_Y_END);

	/*送显示数据*/
	for(Y = 0; Y < 55; Y++)
	{
		for(X = 0; X < 176; X++)
		{
			LCD_DAT(0xFF);
			LCD_DAT(0xFF);
		}
	}
        /*
#ifdef LOGO
	pPoint = gImage_Logo;
	for(Y = 55; Y < 165; Y++)
	{
		for(X = 0; X < 176; X++)
		{
			LCD_DAT(*pPoint ++);
			LCD_DAT(*pPoint++);

		}
	}
#else   */
	for(Y = 55; Y < 165; Y++)
	{
		for(X = 0; X < 176; X++)
		{
			LCD_DAT(0xFF);
			LCD_DAT(0xFF);

		}
	}
//#endif
	for(Y = 165; Y < 220; Y++)
	{
		for(X = 0; X < 176; X++)
		{
			LCD_DAT(0xFF);
			LCD_DAT(0xFF);
		}
	}

	/*刷屏-end*/

	/*开背光*/
	BL_EN_set;

#ifdef _DESIGN_EASY_LCM_MCU_PLATFORM_
	/*在创易电子的demo程序中,便于后面刷屏,所以先设置了刷屏区域*/
	lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCREEN_Y_END);
#endif

	return;
}


/*==================================================================
* Function	: lcd_set_write_area
* Description	: 设置lcd memory write的区域
* Input Para	: U8 StartX, U8 StartY,U8 EndX, U8 EndY
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_set_write_area(U8 StartX, U8 StartY,U8 EndX, U8 EndY)
{
	LCD_CMD(LCD_R_SET_COLUMN_ADDR);
	LCD_DAT(0x00);
	LCD_DAT(StartX);
	LCD_DAT(0x00);
	LCD_DAT(EndX);
	
	LCD_CMD(LCD_R_SET_ROW_ADDR);
	LCD_DAT(0x00);
	LCD_DAT(StartY);
	LCD_DAT(0x00);
	LCD_DAT(EndY);
	
	LCD_CMD(LCD_R_MEMORY_WRITE);

	return;
}
	
/*==================================================================
* Function	: lcd_display_full_screen_color
* Description	: 将全屏刷为某一颜色
* Input Para	: U16 val
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_display_full_screen_color(U16 color)
{
	U8 X, Y;
	
	lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCREEN_Y_END);
	
	for(X = 0; X < LCD_WIDTH; X++)
	{
		for(Y = 0; Y < LCD_HEIGHT; Y++)
		{
			LCD_DAT(color >> 8);
			LCD_DAT(color & 0xFF);
		}
	}

	return;
}

/*==================================================================
* Function	: lcd_display_rectangle_color
* Description	: 将某一坐标矩形刷为某一颜色
* Input Para	: U8 StartX, U8 StartY,U8 EndX, U8 EndY, U16 color
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_display_rectangle_color(U8 StartX, U8 StartY,U8 EndX, U8 EndY, U16 color)
{
	U8 i, j;
	
	lcd_set_write_area(StartX, StartY, EndX, EndY);
	
	for(j = StartY; j <= EndY; j++)
	{
		for(i = StartX; i <= EndX; i++)
		{
			LCD_DAT(color >> 8);
			LCD_DAT(color & 0xFF);
		}
	}

	return;
}


/*==================================================================
* Function	: lcd_enter_sleep
* Description	: lcd进入睡眠模式
* Input Para	: void
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_enter_sleep(void)
{
	LCD_CMD(LCD_R_DISPLAY_OFF);//Display off
	LCD_CMD(LCD_R_SLEEP_IN);//Sleep in

	return;
}


/*==================================================================
* Function	: lcd_exit_sleep
* Description	: lcd退出睡眠模式
* Input Para	: void
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_exit_sleep(void)
{
	LCD_CMD(LCD_R_SLEEP_OUT);//Sleep out
	LCD_CMD(LCD_R_DISPLAY_ON);//Display on

	return;
}
/*==================================================================
* Function	: lcd_show_text
* Description	: 显示标准ASCII码字符,需要ASCII。h的支持,由指针给出字码
* Input Para	: X,Y,char *test,U16 Bacg_Color,U16 Font_Color
* Output Para	: void
* Return Value: void
==================================================================*/
void lcd_show_text(U8 X,U8 Y,U8 txt,U16 Bacg_Color,U16 Font_Color)
{
  #include "ASCII.h"
  U8 i,j,temp;
  U16 colors;
  U8 tPtr = 0;
  tPtr =(txt-' '); 
  colors = Bacg_Color>>8;
  lcd_set_write_area(X,Y,X+7,Y+15);
  
  for(i=0;i<16;i++)
  { 
    temp = ascii[tPtr][i];
    for(j=0;j<8;j++)
    {
      if(temp & 0x01)
      {
      LCD_DAT(Font_Color);
      LCD_DAT(Font_Color);
      }
      else
      {
       LCD_DAT(colors);
       LCD_DAT(Bacg_Color);      
      }
      temp = temp >> 1;
    }
  }
  return;
}
/*==================================================================
* Function	: lcd_display_dot
* Description	: 显示3x3的点
* Input Para	: U8 X, U8 Y  中心点的坐标
* Output Para	: void
* Return Value  : void
==================================================================*/
void lcd_display_dot(U8 X, U8 Y)
{
	U8 i;
	U8 StX, StY, EndX, EndY;
	if(X < 1)
	{
		X= 1;
	}
	if(X > 174)
	{
		X = 174;
	}
	if(Y < 1)
	{
		Y = 1;
	}
	if(Y > 218)
	{
		Y = 218;
	}
        
	StX = X - 1;
	StY = Y - 1;
	EndX = X + 0;	
	EndY = Y + 0;
        
	lcd_set_write_area(StX, StY, EndX, EndY);
	for(i = 0; i < 4; i++)
	{
		LCD_DAT(LedDotColor >> 8);
		LCD_DAT(LedDotColor & 0xFF);
	}
	return;	
}
/*==================================================================
* Function	: lcd_display_adjust
* Description	: 用于触摸屏校验的图形
* Input Para	: U8 X, U8 Y  中心点的坐标
* Output Para	: void
* Return Value  : void
==================================================================*/
void lcd_display_adjust(U8 X,U8 Y)
{
  //暂时先用一个点代替
  LedDotColor = RED;
  lcd_display_dot(X,Y);
  return;
}

⌨️ 快捷键说明

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