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

📄 st7787-37pin.c

📁 LCD开发程序,适用于LCD开发的程序人员,上面的程序是经过几年的工作经验总结出来的,是实践中的经验,宝贵的经验
💻 C
字号:
#include <reg51.H>
#include <stdio.H>
#include <intrins.H>
#include "board.c"
#include "readrom.c"
#include "page_sel.c"
#include "Trans_romdat.c"
#include "init_ILI9320.c"
#define CHANNEL_X 	0x90
#define CHANNEL_Y	0xd0
#define ID			0xe0


sbit DCLK    = P3^4;
sbit tpCS    = P3^5;
sbit DIN     = P3^6;
sbit BUSY    = P1^7;
sbit DOUT    = P1^5;
sbit PENIRQ  = P1^4;

void Pause()
 {
  while(!(P3&0x08));
  }     

void set_x(unsigned int x_star,unsigned x_end)
 {
    	Trans_Com_16(0x0050);
        Trans_Dat_16(x_star);
        Trans_Com_16(0x0051);
        Trans_Dat_16(x_end);
  }

void set_y(unsigned int y_star,unsigned y_end )
 {
    	Trans_Com_16(0x0052);
        Trans_Dat_16(y_star);
		Trans_Com_16(0x0053);
        Trans_Dat_16(y_end);
  }            

void Display(unsigned int c1,unsigned char x,unsigned int y)
 {   
	unsigned int i,j;
  	
	set_x(0x0000,0x00ef);
	set_y(0x0000,0x013f);
	Trans_Com_16(0x0022);
	
	for(i=0;i<y;i++)
	 {
	 for(j=0;j<x;j++)
 	  {
	   Trans_Dat_16(c1);
	   }
	  }
 }

void Display101(unsigned int c1)
 {   
	int i,j,k,l,a=0;
  	
	set_x(0x0000,0x00ef);
	set_y(0x0000,0x013f);
  	Trans_Com_16(0x0022);
	
	for(i=0;i<40;i++)
	 {
	  for(l=0;l<120;l++)
	   {for(j=0;j<8;j++)	
	 	Trans_Dat_16( c1); // Red.
	    for(k=0;k<8;k++)	
		Trans_Dat_16(~c1);
	        }
	   c1=~c1;	
		}
 }

void Disp_rom(unsigned char page,unsigned int addr,unsigned char x,unsigned int y)
 {   
	unsigned int j,k;
  	unsigned char high8,low8;
	
	set_x(0x0000,0x00ef);
	set_y(0x0000,0x013f);
  	page_se(page);	
	Trans_Com_16(0x0022);

	 for(j=0;j<y;j++)
	   {
	     for(k=0;k<x;k++)
	      {
			high8=read_rom(addr++);	
		  	low8=read_rom(addr++);
			Trans_romdat(high8,low8);
			while (addr==0x0000)
    		{page_se(++page);break;}
			}
        }
 }



void SPI_WriteCharTo7643(unsigned char cmd)	// SPI写数据
{
	unsigned char i;

	for(i=0; i<8; i++)
		{
		DIN=cmd&0x80;
		//DIN   = CY;
		DCLK  = 0;			// DCLK 上升沿 将DIN 数据发送出去 ...
		_nop_();_nop_();_nop_();
		DCLK  = 1;
		_nop_();_nop_();_nop_();
		cmd <<= 1;
		}
	DCLK = 0;
	_nop_();_nop_();_nop_();
}

 unsigned int SPI_ReadACharFrom7643(void) // SPI 读数据
{
	unsigned char  i;
	unsigned int value=0;

	for(i=0; i<12; i++)
		{
		DOUT = 1;
		value <<= 1;
		DCLK  = 1;			// 下降沿有效
		_nop_();_nop_();_nop_();
		DCLK  = 0;
		_nop_();_nop_();_nop_();
		if(DOUT){
			value++;
			}

		}
	return value;
}

void IdleClock(void)
{
 	unsigned char i;

 	for(i=0;i<4;i++)
  		{
    		DCLK = 1;
		_nop_();_nop_();_nop_();
    		DCLK = 0;
		_nop_();_nop_();_nop_();
  		}
}
 
unsigned int ReadADC(unsigned char cmd)
{
	unsigned int value;

	tpCS   = 0;
	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();
	SPI_WriteCharTo7643(cmd);   		// 8 clocks
	while(BUSY==0);
	value = SPI_ReadACharFrom7643();	// 12 clock
	IdleClock();						// 4 clocks
	tpCS = 1;
	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();
	return value;
}

void Init_7643(void)
{
 	DCLK    = 0;
	tpCS    = 1;
 	DIN     = 1;
 	BUSY    = 1;
 	DOUT    = 1;
 	PENIRQ  = 1;

	ReadADC(CHANNEL_X); 	// Enable PENIRQ
}


void main(void)
 {
  while(1)	
    {	
 	init_LCD();
  	Init_7643();
  	while(PENIRQ)
  	{;}
    ReadADC(ID);
		Display(0xF800,240,320);
    	Pause();
		//Display(0x07E0,240,320);
    	//Pause();
		//Display(0x001F,240,320);
    	//Pause();
		//Display(0x0000,240,320);
    	//Pause();
		//Display(0xFFFF,240,320);
    	//Pause();
		//Display101(0xFFFF);
    	//Pause();
		//Disp_rom(0x02,0x5d00,240,320);
		//Pause();
		//Disp_rom(0x04,0xb500,240,320);
		//Pause();
      }
 }       

⌨️ 快捷键说明

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