stc8g1k08a软件SPI点亮屏幕MD144-QQVGA14P-01-V01(ILI9163C)测试

三线SPI的屏
P32 接CLK
P54 接SDA
P55 接CS
VCC接3.3V,GND接地, RES我是直接串4.7K电阻接VCC
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


#include "stc8g.h"
void Timer0_Init(void)		//1微秒@11.0592MHz
{
	AUXR |= 0x80;			//定时器时钟1T模式
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xF5;				//设置定时初始值
	TH0 = 0xFF;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
		 // 等待定时器溢出
  while (!TF0); // 等待TF0置位
// 停止定时器并清除溢出标志
  TR0 = 0;      // 停止定时器0
  TF0 = 0;      // 清除TF0标志
}


void delay_us(int us){//延迟微秒
	int t =0;
	while(t<us){
	Timer0_Init();	
	t++;
	}
}


#define LCD_CS P55;
#define LCD_SDA P54;
#define LCD_SCL P32;
#define LCD_CS_CLR P55=0;
#define LCD_CS_SET P55=1;
#define LCD_SPI_SDA_CLR P54=0;
#define LCD_SPI_SDA_SET P54=1;
#define	LCD_SPI_SCL_CLR P32=0;
#define	LCD_SPI_SCL_SET P32=1;
#define LCD_RD_SET 0;
#define	LCD_RS_SET	1;

// 初始化端口为输出
void LCD_InitPins(void) {
    P5M0 = 0xFF; // 设置P5为推挽输出
    P5M1 = 0x00;
    P3M0 = 0x0F; // 设置P3相关位为推挽输出
    P3M1 = 0x00;
    LCD_CS_SET;  // 初始时CS为高电平
}

void  SendDataSPI(unsigned char dat)
{  
   unsigned char i;
   for(i=0; i<8; i++)			
   {  
      if( (dat&0x80)==0x80 ){
				LCD_SPI_SDA_SET;}
      else{
				LCD_SPI_SDA_CLR;}
      dat <<= 1;
			LCD_SPI_SCL_CLR;
      LCD_SPI_SCL_SET;			
   }
}

void WriteComm(unsigned char dt)
{ 
	LCD_CS_CLR;
	
	LCD_SPI_SDA_CLR;
	LCD_SPI_SCL_CLR;
	LCD_SPI_SCL_SET;		
	
	SendDataSPI(dt);
	
	LCD_CS_SET;
}
void WriteData(unsigned char dt)
{
	LCD_CS_CLR;
	LCD_SPI_SDA_SET;
	LCD_SPI_SCL_CLR;
	LCD_SPI_SCL_SET;		
	SendDataSPI(dt);
	LCD_CS_SET;
}
void LCD_IC_Init(void)
{

	// ILI9163C, 用于 LB1.41
	
	WriteComm(0x11); // 退出睡眠模式
	delay_us(50000);
	
	WriteComm(0x26); // 设置默认伽马值
	WriteData(0x04);
	
	WriteComm(0xB1); // 设置帧率
	WriteData(0x0C);
	WriteData(0x14);
	
	WriteComm(0xC0); // 设置 VRH1[4:0] & VC[2:0] 用于 VCI1 & GVDD
	WriteData(0x0C);
	WriteData(0x05);
	
	WriteComm(0xC1); // 设置 BT[2:0] 用于 AVDD & VCL & VGH & VGL
	WriteData(0x02); // 0x00
	
	WriteComm(0xC5); // 设置 VMH[6:0] & VML[6:0] 用于 VOMH & VCOML
	WriteData(0x29);  // 31  21  29
	WriteData(0x43);  // 58   48  43
	
	WriteComm(0xC7);
	WriteData(0x40);
	
	WriteComm(0x3a); // 设置颜色格式
	WriteData(0x05);
	
	WriteComm(0x2A); // 设置列地址
	WriteData(0x00);
	WriteData(0x00);
	WriteData(0x00);
	WriteData(0x7F);
	
	WriteComm(0x2B); // 设置页地址
	WriteData(0x00);
	WriteData(0x00);
	WriteData(0x00);
	WriteData(0x9F);
	
	WriteComm(0x36); // 设置扫描方向
	WriteData(0xC8); // 0xc8
	
	WriteComm(0xB7); // 设置源输出方向
	WriteData(0x00);
	
	WriteComm(0xF2); // 启用伽马位
	WriteData(0x01);
	
	WriteComm(0xE0);
	WriteData(0x36); // p1
	WriteData(0x29); // p2
	WriteData(0x12); // p3
	WriteData(0x22); // p4
	WriteData(0x1C); // p5
	WriteData(0x15); // p6
	WriteData(0x42); // p7
	WriteData(0xB7); // p8
	WriteData(0x2F); // p9
	WriteData(0x13); // p10
	WriteData(0x12); // p11
	WriteData(0x0A); // p12
	WriteData(0x11); // p13
	WriteData(0x0B); // p14
	WriteData(0x06); // p15
	
	WriteComm(0xE1);
	WriteData(0x09); // p1
	WriteData(0x16); // p2
	WriteData(0x2D); // p3
	WriteData(0x0D); // p4
	WriteData(0x13); // p5
	WriteData(0x15); // p6
	WriteData(0x40); // p7
	WriteData(0x48); // p8
	WriteData(0x53); // p9
	WriteData(0x0C); // p10
	WriteData(0x1D); // p11
	WriteData(0x25); // p12
	WriteData(0x2E); // p13
	WriteData(0x34); // p14
	WriteData(0x39); // p15
	WriteComm(0x29); // 显示开启
	WriteComm(0x2c);
}


#define COL  128		
#define ROW  128		
#define COL_Pre  00		
#define ROW_Pre  0		

void SendData(unsigned int color)
{
	WriteData(color>>8);
	WriteData(color);
}




void BlockWrite(unsigned int Xstart,unsigned int Xend,unsigned int Ystart,unsigned int Yend) //
{
	 WriteComm(0x2a);
	 WriteData((Xstart)>>8);
	 WriteData((Xstart));
	 WriteData((Xend)>>8);
	 WriteData(Xend);
	
	 WriteComm(0x2b);
	 WriteData((Ystart)>>8);
	 WriteData((Ystart));
	 WriteData((Yend)>>8);
	 WriteData(Yend);

	 WriteComm(0x2c); 	
}



void DispFrame(void)//绘制边框
{
	unsigned int i,j;
	BlockWrite(COL_Pre,COL+COL_Pre-1,ROW_Pre,ROW+ROW_Pre-1);
	LCD_CS_CLR;
	//LCD_RS_SET;
	//LCD_RD_SET;
	SendData(0xf800);
	for(i=0;i<COL-2;i++){SendData(0xFFFF);}
	SendData(0x001f);
	for(j=0;j<ROW-2;j++)
	{
		SendData(0xf800);
		for(i=0;i<COL-2;i++){SendData(0x0000);}
		SendData(0x001F);
	}
	SendData(0xf800);
	for(i=0;i<COL-2;i++){SendData(0xFFFF);}
	SendData(0x001F);
	LCD_CS_SET;
}
void DispGrayHor16(void)	//灰阶图 
{
	int i,j,k;
  BlockWrite(COL_Pre,COL+COL_Pre-1,ROW_Pre,ROW+ROW_Pre-1);
	LCD_CS_CLR;
//	LCD_RD_SET;
//	LCD_RS_SET;																									  
	for(i=0;i<ROW;i++)
	{
		for(j=0;j<COL%16;j++)
		{
			SendData(0);
		}
		for(j=0;j<16;j++)
		{
	    for(k=0;k<COL/16;k++)
			{		
				SendData(((((j*2)<<3)|((j*4)>>3))<<8)|(((j*4)<<5)|(j*2)));	
			} 
		}
	}
	LCD_CS_SET; 
}

#define WHITE       0xFFFF
#define BLACK      	0x0000	  
#define BLUE       	0x001F 
#define BRED        0XF81F
#define GRED 			 	0XFFE0
#define GBLUE			 	0X07FF
#define RED         0xF800
#define MAGENTA     0xF81F
#define GREEN       0x07E0
#define CYAN        0x7FFF
#define YELLOW      0xFFE0
#define BROWN 			0XBC40 //טɫ
#define BRRED 			0XFC07 //טº쉫
#define GRAY  			0X8430 //»҉«
#define GRAY25      0xADB5

void DispColor(unsigned int color)//显示颜色
{
	unsigned int i,j;
	BlockWrite(COL_Pre,COL+COL_Pre-1,ROW_Pre,ROW+ROW_Pre-1);
	LCD_CS_CLR;
	LCD_RS_SET;
	LCD_RD_SET;
		for(i=0;i<ROW;i++)
		{
		  for(j=0;j<COL;j++)
			{    
				SendData(color);
			}
		}
		LCD_CS_SET;
}	

void DispBand(void)	 
{
	int i,j,k;
	//unsigned int color[8]={0x001f,0x07e0,0xf800,0x07ff,0xf81f,0xffe0,0x0000,0xffff};
	unsigned int color[8]={0xf800,0xf800,0x07e0,0x07e0,0x001f,0x001f,0xffff,0xffff};//0x94B2
	//unsigned int gray16[]={0x0000,0x1082,0x2104,0x3186,0x42,0x08,0x528a,0x630c,0x738e,0x7bcf,0x9492,0xa514,0xb596,0xc618,0xd69a,0xe71c,0xffff};
  BlockWrite(COL_Pre,COL+COL_Pre-1,ROW_Pre,ROW+ROW_Pre-1);
	LCD_CS_CLR;
	LCD_RD_SET;
	LCD_RS_SET;																									  
	for(i=0;i<8;i++)
	{
		for(j=0;j<ROW/8;j++)
		{
	    for(k=0;k<COL;k++)
			{
				SendData(color[i]); 
			} 
		}
	}
	for(j=0;j<ROW%8;j++)
	{
		for(k=0;k<COL;k++)
		{
			SendData(color[7]); 
		} 
	}
	LCD_CS_SET;
}

void main(){
	delay_us(72000);
	LCD_InitPins();//端口初始化
	LCD_IC_Init();//屏幕初始化
	
	while(1){
		//DispFrame();//边框
		DispGrayHor16();//灰阶图
		//DispGrayHor16();
		DispBand();//彩虹条
		//DispColor(RED);
		//DispColor(GREEN);
		//DispColor(BLUE);
		
		}
	}




在这里插入图片描述

在这里插入图片描述
ili9163c
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值