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

📄 ssd1283a_16tft.c

📁 STM8-触摸例程
💻 C
字号:
/*
  CPU:stm8
  designed by cache lee
  2009-06-25
*/

#include "ssd1283a_16tft.h"
#include "font8x16.h"
#include "stm8s_lib.h"

unsigned int TextColor = 0x0000, BackColor = 0xFFFF;

#define LcdCS1  GPIO_WriteHigh(GPIOC,GPIO_PIN_6)
#define LcdCS0  GPIO_WriteLow(GPIOC,GPIO_PIN_6)

#define sdata1  GPIO_WriteHigh(GPIOE,GPIO_PIN_6)
#define sdata0  GPIO_WriteLow(GPIOE,GPIO_PIN_6)

#define sclk1  GPIO_WriteHigh(GPIOE,GPIO_PIN_5)
#define sclk0  GPIO_WriteLow(GPIOE,GPIO_PIN_5)

#define c_d1  GPIO_WriteHigh(GPIOC,GPIO_PIN_5)
#define c_d0  GPIO_WriteLow(GPIOC,GPIO_PIN_5)


/*
sbit LcdCS   //MOSI --PC6
sbit sdata   //SDA  --PE6
sbit sclk    //SCL  --Pe5
sbit c_d     //MISO --PC5
*/


void delayms(unsigned int ms);
void write_data(unsigned char dat);
void write_data16(unsigned char datH,unsigned char datL);
void write_cmd(unsigned char dat);


void  tft_16lcd_init();
void LCD_Clear();
void LCD_SetTextColor(unsigned int Color);
void LCD_SetBackColor(unsigned int Color);
void  color_V(void);
void  color_H(void);
void LCD_ShowChar(uchar x,uint y,char ch);
void LCD_ShowString(uchar x,uint y,char *p);
void ShowBMP(uchar x,uchar y,uchar width,uchar height,char *c);
//void ChineseChar(uint x,uint y,int size,uint color,char c);

//char  reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节

/**********************************************************

 ms延时子程序

**********************************************************/
void delayms(unsigned int ms)
{
  unsigned char k;

  while (ms--)
  {
    for (k = 0; k < 114; k++)
      ;
  }
}

/**********************************************************

 LCD写数据子函数(8位)

**********************************************************/ 
void write_data(unsigned char dat)
{
   unsigned char i;
   c_d1;
   LcdCS0;
   for(i=0;i<8;i++)
   {
     sclk0;
		 
		 if(dat>=0x80)
		 sdata1;
		 else 
		 sdata0;
     dat=dat<<1;
     //sdata = CY;
     sclk1;
   }
   LcdCS1;
}

/**********************************************************

 LCD写数据子函数(16位)

**********************************************************/ 
void write_data16(unsigned char datH,unsigned char datL)
{
   unsigned char i;
   c_d1;
   LcdCS0;
   for(i=0;i<8;i++)
   {
     sclk0;
     //datH=datH<<1;
     //sdata = CY;
		 if(datH>=0x80)
		    sdata1;
		 else 
		    sdata0;
     datH=datH<<1;
		 
     sclk1;
   }
   for(i=0;i<8;i++)
   {
      sclk0;
     // datL=datL<<1;
     // sdata = CY;
		if(datL>=0x80)
		    sdata1;
		 else 
		    sdata0;
     datL=datL<<1;
      sclk1;
   }
   LcdCS1;
}

/**********************************************************

 LCD写命令子函数

**********************************************************/ 
void write_cmd(unsigned char dat)
{
   unsigned char i;
   c_d0;
   LcdCS0;

   for(i=0;i<8;i++)
   {
      sclk0;
      //dat=dat<<1;
      //sdata = CY;
		if(dat>=0x80)
		    sdata1;
		 else 
		    sdata0;
     dat=dat<<1;
      sclk1;
   }
   LcdCS1;  
 }

/**********************************************************

 LCD初始化子函数

**********************************************************/ 
void  tft_16lcd_init()
{
   LcdCS1;
   sclk0;

/*   LcdRST1;                  //LCD复位
   delayms(100);
   LcdRST0;
   delayms(5);
   LcdRST1;*/
   delayms(100);
   
   write_cmd(0x10);           //Power control 1
   write_data16(0x2f,0xce);	  //2f8e

   write_cmd(0x11);           //Power control 2
   write_data16(0x00,0x0c);

   write_cmd(0x07);
   write_data16(0x00,0x21);
 
   write_cmd(0x28);
   write_data16(0x00,0x06);

   write_cmd(0x28);
   write_data16(0x00,0x05);

   write_cmd(0x27);
   write_data16(0x05,0x7f);
 		
   write_cmd(0x29);
   write_data16(0x89,0xa1);				
 		
   write_cmd(0x00);           //write index, 16bits, high 8 bits is 0x00
   write_data16(0x00,0x01);   //write instruction, 16bits
   delayms(100);			//Oscillator on	
 		
   write_cmd(0x29);
   write_data16(0x80,0xb0);
   delayms(30);		
   write_cmd(0x29);
   write_data16(0xff,0xfe);
         
   write_cmd(0x07);           //Display Control
   write_data16(0x00,0x23);     
   delayms(30);		
   write_cmd(0x07);
   write_data16(0x00,0x33);		
		
   write_cmd(0x01);
   write_data16(0x21,0x83);		//23 TB=1 G0 T0 G131 //2183
 		
   write_cmd(0x2f);
   write_data16(0xff,0xff);
 		
   write_cmd(0x2c);            //Oscillator frequency
   write_data16(0x80,0x00);
 	
   write_cmd(0x03);	           //Entry Mode
   write_data16(0x68,0x30);	   //6830
 		
   write_cmd(0x27);
   write_data16(0x05,0x70);		
 			
   write_cmd(0x02);
   write_data16(0x03,0x00);

   write_cmd(0x0b);
   write_data16(0x58,0x0c);

   write_cmd(0x12);             //Power control 3
   write_data16(0x06,0x09);

   write_cmd(0x13);             //Power control 4
   write_data16(0x31,0x00);	

   write_cmd(0x2a);
   write_data16(0x1d,0xd0);

   write_cmd(0x2b);
   write_data16(0x0a,0x90);
 
   write_cmd(0x2d);
   write_data16(0x31,0x0f);
   delayms(100);

   write_cmd(0x1e);             //Power control 5
   write_data16(0x00,0xbf);

   delayms(1);
   write_cmd(0x1e);
   write_data16(0x00,0x00);
   delayms(100);

   write_cmd(0x45);             //V
   write_data16(0x83,0x00);
   write_cmd(0x44);             //H
   write_data16(0x83,0x00);
		 
   write_cmd(0x21);			   //RAM Address Set
   write_data16(0x00,0x00);

   write_cmd(0x22);            //write data to GRAM
   LCD_Clear();
} 


/*******************************************************************************
* Function Name  : LCD_Clear
* Description    : Clears the hole LCD.
* Input          : Color: the color of the background.
* Output         : None
* Return         : None
*******************************************************************************/
void LCD_Clear()
{
   unsigned int i;
   write_cmd(0x45);             //V
   write_data16(0x83,0x00);
   write_cmd(0x44);             //H
   write_data16(0x83,0x00);
		 
   write_cmd(0x21);			   //RAM Address Set
   write_data16(0x00,0x00);

   write_cmd(0x22);            //write data to GRAM

   
    for (i=0;i<17424;i++)       //132*132=17424
    {
     write_data(BackColor>>8);           //全屏白色
     write_data(BackColor);
    }
}

/*******************************************************************************
* Function Name  : LCD_SetTextColor
* Description    : Sets the Text color.
* Input          : - Color: specifies the Text color code RGB(5-6-5).
* Output         : - TextColor: Text color global variable used by LCD_DrawChar
*                  and LCD_DrawPicture functions.
* Return         : None
*******************************************************************************/
void LCD_SetTextColor(unsigned int Color)
{
  TextColor = Color;
}

/*******************************************************************************
* Function Name  : LCD_SetBackColor
* Description    : Sets the Background color.
* Input          : - Color: specifies the Background color code RGB(5-6-5).
* Output         : - BackColor: Background color global variable used by 
*                  LCD_DrawChar and LCD_DrawPicture functions.
* Return         : None
*******************************************************************************/
void LCD_SetBackColor(unsigned int Color)
{
  BackColor = Color;

}


/**********************************************************

 彩条输出子函数(V)

**********************************************************/ 
void  color_V(void)
{
   unsigned int i;

   write_cmd(0x21);            //RAM Address Set
   write_data16(0x00,0x00);         

   write_cmd(0x45);	           //V
   write_data16(131,0x00);		
   write_cmd(0x44);            //H
   write_data16(131,0x00);	         
   write_cmd(0x22);            //write data to GRAM

   for (i=0;i<2904;i++)		   //132*22=2904
   {
     write_data(0xf8);         //红色
     write_data(0x00);
   }

   for (i=0;i<2904;i++)
   {
     write_data(0x07);         //绿色
     write_data(0xc0);
   }
   for (i=0;i<2904;i++)
   {
     write_data(0x00);         //蓝色
     write_data(0x3f);
   }
   for (i=0;i<2904;i++)
   {
     write_data(0xff);         //黄色
     write_data(0xe0);
   }
   for (i=0;i<2904;i++)
   {
     write_data(0x00);         //黑色
     write_data(0x00);
   }
   for (i=0;i<2904;i++)
   {
     write_data(0xff);         //白色
     write_data(0xff);
   }

}

/**********************************************************

 彩条输出子函数(H)

**********************************************************/ 
void  color_H(void)
{
   unsigned int i;    

   write_cmd(0x45);	           //V
   write_data16(131,0);		
   write_cmd(0x44);            //H
   write_data16(23,2);	 
   
   write_cmd(0x21);            //RAM Address Set
   write_data16(0,0);         
           
   write_cmd(0x22);            //write data to GRAM  

   for (i=0;i<3036;i++)		   
   {
     write_data(0xf8);         //红色
     write_data(0x00);
   }

   write_cmd(0x45);	           //V
   write_data16(131,0);		
   write_cmd(0x44);            //H
   write_data16(44,23);	 
   write_cmd(0x21);            //RAM Address Set
   write_data16(0,0); 
   write_cmd(0x22);            //write data to GRAM
   for (i=0;i<3036;i++)
   {
     write_data(0x07);         //绿色
     write_data(0xc0);
   }


   write_cmd(0x21);            //RAM Address Set
   write_data16(0,0); 

   write_cmd(0x45);	           //V
   write_data16(131,0);		
   write_cmd(0x44);            //H
   write_data16(66,45);	 
        
   write_cmd(0x22);            //write data to GRAM
   for (i=0;i<3036;i++)
   {
     write_data(0x00);         //蓝色
     write_data(0x3f);
   }

   write_cmd(0x45);	           //V
   write_data16(131,0);		
   write_cmd(0x44);            //H
   write_data16(88,67);	 
   write_cmd(0x21);            //RAM Address Set
   write_data16(0,0);         
   write_cmd(0x22);            //write data to GRAM
   for (i=0;i<3036;i++)
   {
     write_data(0xff);         //黄色
     write_data(0xe0);
   }
   

   write_cmd(0x45);	           //V
   write_data16(131,0);		
   write_cmd(0x44);            //H
   write_data16(110,89);	 
   write_cmd(0x21);            //RAM Address Set
   write_data16(0,0);         
   write_cmd(0x22);            //write data to GRAM
   for (i=0;i<3036;i++)
   {
     write_data(0x00);         //黑色
     write_data(0x00);
   }
}

/**********************************************************

  字符显示子函数

**********************************************************/
void LCD_ShowChar(uchar x,uint y,char ch)
{       
   uchar temp;
   uchar pos,t;    
   uchar  CHAR_W,CHAR_H;

   CHAR_W = 8;         //8*16
   CHAR_H = 16;

   x = x+4;
   y = y+3;
   	    
   if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)
   return;

  // window_set(0x04,0x83,0x00,0x7f);        //先设置主窗口
						//后设置从窗口
   write_cmd(0x21);			  //设定一个字符所占的大小 
   write_data16(y,x);
   write_cmd(0x44);           //h
   write_data16(x+CHAR_W-1,x);
   write_cmd(0x45);           //v
   write_data16(y+CHAR_H-1,y);  //15
   write_cmd(0x22);       
	
   ch = ch-32;                       //得到偏移后的值

   for(pos=0;pos<CHAR_H;pos++)  
   {
      temp= Font8x16[ch][pos];
      
      for(t=0;t<CHAR_W;t++)
      {                 
	    if(temp&0x80)//BackColor>>8
	    write_data16(TextColor>>8,TextColor);  //textcolor
	    else 
	    write_data16(BackColor>>8,BackColor);  //backcolor        
        temp<<=1; 
      }
   }
}  

/**********************************************************
 
 显示字符串子函数

 x,y:起点坐标  
 *p:字符串起始地址

**********************************************************/
void LCD_ShowString(uchar x,uint y,char *p)
{         
   while(*p!='\0')
   {       
      LCD_ShowChar(x,y, *p);
      x+=8;
      p++;
   }  
}

//x,y:起始坐标,WIDTH,HEIGHT,图象的宽度和高度,以像素为单位,横向取模,字节倒序(低位在前)
//显示汉字
void ShowBMP(uchar x,uchar y,uchar width,uchar height,char *c)
{
   unsigned int i,j,k,count=0,temp;
   write_cmd(0x45);             //V
   write_data16(y+height,y);
   write_cmd(0x44);             //H
   write_data16(x+width,x);
		
   for(k=0;k<height;k++)
   {
    write_cmd(0x21);			   //RAM Address Set
    write_data16(y+k,x);

    write_cmd(0x22);            //write data to GRAM

    for (i=0;i<width;i=i+8)       //132*132=17424
    {
	  temp=1;
	  for(j=0;j<8;j++)
	  {	    
	    if((c[count]&temp)==temp)
         {write_data(TextColor>>8);           //全屏白色
          write_data(TextColor);
		  }
	    else 
	     {
	      write_data(BackColor>>8);           //全屏白色
          write_data(BackColor);
	     }
		 temp=(temp<<1)&0xfe;
	   }
	  count++;
    }
   }
}



/*******************************************************************************
显示图象
*******************************************************************************/
void LCD_WriteBMP(uchar x,uchar y,uchar width,uchar height,char *c)
{
   unsigned int i,j,k,count=0,temp;
   write_cmd(0x45);             //V
   write_data16(y+height,y);
   write_cmd(0x44);             //H
   write_data16(x+width,x);
		
   for(k=0;k<height-3;k++)
   {
    write_cmd(0x21);			   //RAM Address Set
    write_data16(y+k,x);  //写X位置

    write_cmd(0x22);            //write data to GRAM

    for (i=0;i<width;i++)       //132*132=17424
    {
				write_data(c[k*(2*width)+2*i]);           //全屏白色
        write_data(c[k*(2*width)+2*i+1]);	
	   }
    }
}

⌨️ 快捷键说明

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