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

📄 touchprogram.c

📁 触摸液晶控制显示程序
💻 C
字号:
#include <__LF240x.h>
#include <Led.h>
//#define  rbadd1 XBYTE[0xF000]  /* 读忙状态地址 */
//#define  wdadd1 XBYTE[0xF000]  /* 写参数及显示数据地址 */
//#define  rdadd1 XBYTE[0xF001]  /* 读参数及显示数据地址 */
//#define  wcadd1 XBYTE[0xF001]  /* 写指令代码地址 */


ioport unsigned 		  portF800;
ioport unsigned 		  portF801;
ioport unsigned       portffff;
#define portWSGR      portffff
#define rbadd1      	portF800
#define wdadd1	      portF800
#define rdadd1	      portF801
#define wcadd1		    portF801

static unsigned char s_DataTemp;
static unsigned short X1,Y1,X,Y,p;	
       unsigned char i,j,code_1;
       unsigned short wCount;
       unsigned int O_X,O_Y; 

#define  PARA 0x29;     /* 程序参数定义,根据用户选择的LCM型号修改 */

const unsigned char CGTAB[7][32]={0x00,0x00,0x7F,0x40,0x7F,0x40,0x5F,0x51,      /* 感 */
                                  0x51,0x5F,0x90,0x02,0x29,0x28,0x48,0x07,
                                  0x50,0x48,0xFC,0x40,0xC0,0x48,0x48,0x50,
                                  0x22,0x52,0x8E,0x00,0x90,0xAC,0x24,0xE0,
                                  0x02,0x44,0x2F,0x28,0x0F,0x08,0xEF,0x28,      /* 谢 */
                                  0x28,0x3F,0x21,0x2A,0x34,0x28,0x12,0x01,
                                  0x08,0x88,0xC8,0x88,0x88,0xFE,0x88,0x88,
                                  0xC8,0xA8,0xA8,0x88,0x88,0x88,0xA8,0x10,
                                  0x04,0x04,0x07,0x08,0x14,0x22,0x01,0x06,      /* 各 */
                                  0x18,0xE0,0x0F,0x08,0x08,0x08,0x0F,0x08,
                                  0x00,0x00,0xF0,0x10,0x20,0x40,0x80,0x60,
                                  0x1E,0x40,0xF0,0x10,0x10,0x10,0xF0,0x10,
                                  0x08,0x08,0x08,0x10,0x17,0x30,0x52,0x92,      /* 位 */
                                  0x11,0x11,0x10,0x10,0x10,0x1F,0x10,0x10,
                                  0x80,0x40,0x40,0x08,0xFC,0x00,0x08,0x08,
                                  0x10,0x10,0x90,0xA0,0x24,0xFE,0x00,0x00,
                                  0x10,0x10,0x22,0x7F,0x42,0x43,0x42,0x42,      /* 的 */
                                  0x7E,0x42,0x42,0x42,0x42,0x7e,0x42,0x00,
                                  0x40,0x40,0x44,0x7E,0x84,0x04,0x04,0x84,
                                  0x64,0x24,0x04,0x04,0x04,0x04,0x28,0x10,
                                  0x01,0x01,0x01,0xFE,0x01,0x01,0x3F,0x08,      /* 支 */
                                  0x08,0x04,0x02,0x01,0x02,0x0C,0x30,0xC0,
                                  0x00,0x00,0x04,0xFE,0x00,0x00,0xF0,0x20,
                                  0x20,0x40,0x80,0x00,0x80,0x60,0x1E,0x40,
                                  0x10,0x10,0x10,0x13,0xFC,0x10,0x17,0x18,      /* 持 */
                                  0x30,0x07,0x12,0x11,0x11,0x10,0x50,0x20,
                                  0x40,0x40,0x50,0xF8,0x40,0x48,0xFC,0x10,
                                  0x14,0xFE,0x10,0x10,0x10,0x10,0x50,0x20};
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00}; //系统设置指令参数
unsigned char SCROLLTAB[10]={0,0,0xf0,0xb0,0x04,0xf0}; //SCROLL指令参数

void DelayOnce(unsigned short wCount800ns)
{
	unsigned short wT3CountOld;
	wT3CountOld = T3CNT;
	while(T3CNT-wT3CountOld<=wCount800ns);
}

void SPIOpen(void)
{	
    PCDATDIR |= 0x2020;
	DelayOnce(10);
	SPICCR = 0x07;
	SPICTL = 0x0e;
	PCDATDIR &= 0xffff^0x0020;
	SPIBRR = 0x0C;	//sck = 20*4/3MHZ/(SPIBRR+1);	SPIBRR>4
	SPIPRI = 0x30;
	SPICCR = 0x87;
	DelayOnce(10);
}

void SPIClose(void)
{
	DelayOnce( 10 );
	PCDATDIR &= 0xfffd;
	PCDATDIR |= 0x2220;
	DelayOnce( 10 );
}

void SPISendByte(unsigned char Data)
{
	SPIRXBUF = 0x0000;
	SPITXBUF = Data<<8;
	while(!(SPISTS&0x40));	
    s_DataTemp = SPIRXBUF;
}
unsigned short SPIReadByte(void)
{
	SPITXBUF = 0x0000;
	while(!(SPISTS&0x40));
	return (SPIRXBUF&0xff);
}

void INT_1(void)
   {
     unsigned char i;
     wcadd1=0x40;   /* SYSTEM SET代码 */
     for(i=0;i<8;i++)
        {
          wdadd1=SYSTAB[i];  /* 写入参数 */
        }
      wcadd1=0x44;   /* SCROLL代码 */
      for(i=0;i<10;i++)
        {
          wdadd1=SCROLLTAB[i];   /* 写入参数 */
        }
      wcadd1=0x5a;   /* HDOT SCR 代码 */
      //asm(" NOP");
      wdadd1=0x00;   /* 设置参数P1 */
      //asm(" NOP");
      //asm(" NOP");
      wcadd1=0x5b;   /* OVLAY 代码 */
     // asm(" NOP");
     // asm(" NOP");
      //asm(" NOP");
      wdadd1=0x00;   /* 设置参数:显示一,三区为文本属性 */
      CLEAR(0,0,0x00);       /* 调清屏函数 显示一区清屏*/
      CLEAR(0xb0,0x04,0x00);     /*显示二区清屏*/
      wcadd1=0x59;   /* 显示状态设置 */
      //asm(" NOP");
      wdadd1=0x54;   /* 设置参数:显示一~四区开显示 */
    }


/*void CLEAR()
  {
    unsigned int i,j;
    wcadd1=0x4c;    CSRDIR 代码
    wcadd1=0x46;    CSRW 代码
    wdadd1=0x00;    设置参数光标指针低8位
    wdadd1=0x00;   设置参数光标指针高8位
    wcadd1=0x42;    MWRITE 代码
    for(j=0;j<2195;j++)
      {
        for(i=0;i<30;i++)
          {
            wdadd1=0x00;   写入数据
          }
      }
  }*/


void CGRAM(void)
  {
   unsigned char i,j;
   wcadd1=0x5c;  /* CGRAMADR 代码 */
   wdadd1=0x00;  /* 设置SAG=0x3000 */
   wdadd1=0x30;
   wcadd1=0x46;  /* CSRW 代码 */
   wdadd1=0x00;  /* 设置CSR=0x3400(字符代码=80H) */
   wdadd1=0x34;
   wcadd1=0x4c;  /* CSRDIR 代码 */
   wcadd1=0x42;  /* MWRITE 代码 */
   for(j=0;j<7;j++)
     {
   for(i=0;i<32;i++)
      {
       wdadd1=CGTAB[j][i];  /* 写入字模数据 */
       }
     }
  }

void CCW1_PR(char O_X,char O_Y,unsigned char code_1,unsigned char n)
  {
    unsigned int i,j,t;
    i=PARA;
    j=i*O_Y+O_X;
    for(t=0;t<n;t++)
    {
     wcadd1=0x4f;      /* CSRDIR 代码(下移) */
     wcadd1=0x46;      /* CSRW 代码 */
     wdadd1=j%256;     /* 设置光标地址 */
     wdadd1=j/256;
     wcadd1=0x42;      /* MWRITE 代码 */
     wdadd1=code_1;    /* 写入汉字代码 */
     wdadd1=code_1+1;  /* 写入汉字代码 */
     j++;
     wcadd1=0x46;      /* CSRW 代码 */
     wdadd1=j%256;     /* 设置光标地址 */
     wdadd1=j/256;
     wcadd1=0x42;      /* MWRITE 代码 */
     wdadd1=code_1+2;  /* 写入汉字代码 */
     wdadd1=code_1+3;  /* 写入汉字代码 */
    //修改部分
     j++;
     code_1=code_1+4;
    }
  }


/*void W_DOT(int O_X,int O_Y)
  {
    unsigned char i,j,dat;
    unsigned int k;
      j=PARA;
      i=O_X%8;
      O_X=O_X/8;
      k=j*O_Y+O_X;
      wcadd1=0x4f;
      wcadd1=0x46;  /* 设置光标地址
      wdadd1=k%256; /* 计算光标地址
      wdadd1=k/256;
      if(O_Y==0)O_Y=0x80;
      else
        {
             O_Y=1;
         for(;i<7;i++)  /* 计算显示位
             {
                O_Y=O_Y*2;
             }
         }
      wcadd1=0x43;  /* MREAD 代码
      dat=rdadd1;   /* 读取当前显示数据
      wcadd1=0x46;  /* 设置光标地址
      wdadd1=k%256;  /* 计算光标地址
      wdadd1=k/256;
      wcadd1=0x42;  /* MWRITE 代码
      wdadd1=dat|O_Y;  /* 写入合成数据
  }*/

static void CLEAR(unsigned short csrl,unsigned short csrh,unsigned short data1)
{
	unsigned char i,j;
	wcadd1=0x46;
	wdadd1=csrl;
	wdadd1=csrh;
	wcadd1=0x4c;
	wcadd1=0x42;
	for(i=0;i<240;i++)
	{
		for(j=0;j<320;j++)
		{
			wdadd1=data1;
		}
	}
}

void main()
{	 
		 
    DISABLE();
	IMR = 0x0000;   /*初始化*/
	IFR = IFR;
	portWSGR = 0x01c0;
	SCSR1 = 0x04fd;
	SCSR2 = (SCSR2&0x000c)|0x0002;
	WDCR = 0x006f;
	
	MCRA = 0x0004;
	MCRB = 0x003c;
	
	//PADATDIR = 0x8000;
	//asm(" NOP");
	PADATDIR = 0x0000;
	PCDATDIR = 0x3400;
	
	XINT1CR = 0x8001;
	 
	GPTCONB = 0x0000;

	T3CNT = 0x0000;
	T3CON = 0x1440;
	T3PR = 0xffff;

	EVBIMRA = 0x0000;
	EVBIFRA = 0x0000;
	EVBIMRB = 0x0001;
	EVBIFRB = 0x0001;
	EVBIMRC = 0x0000;
	EVBIFRC = 0x0000;	
    
	IMR = 0x0007;
	ENABLE();
//	SCSR2 = SCSR2|0x0020;
//	WDCR = 0x002f;
	
	ProgMemCopy();
    INT_1();   // 调初始化函数 
    OnInit8255();
    CGRAM(); 
    code_1=0x80;             // 取字模 
    O_X=0x02;
    O_Y=0x0b;
    CCW1_PR(O_X,O_Y,code_1,5); // 调中文显示函数(文本方式)  
    
    code_1=0x94;             // 取字模 
    O_X=0x00;
    O_Y=0x10;
    CCW1_PR(O_X,O_Y,code_1,2);  // 调中文显示函数(文本方式)
    
/* 	while(1)
 	{
    	SPIOpen();
        //while(PADATDIR&0x0080);
		SPISendByte(0x90);
		asm(" NOP");//while(PADATDIR&0x0080);
		asm(" NOP");
		asm(" NOP");
		Y1 = SPIReadByte();
		if(Y1 < 120)
		{
		  Y = Y1;
		  }
		SPIClose();
		SPIOpen();
		//while(PADATDIR&0x0080);
		SPISendByte(0xD0);
		asm(" NOP");//while(PADATDIR&0x0080);
		asm(" NOP");
		asm(" NOP");
		X1 = SPIReadByte();
		if(X1 != 0)
		{
		  X = X1;
		  }
		SPIClose();
		if(Y>=90&&X>=50)
		{
			CLEAR(0,0,0x00);
			CLEAR(0xb0,0x04,0x00);
			CGRAM();
			code_1 = 0x80;
			O_X=0x00;
     		O_Y=0x10;
     		CCW1_PR(O_X,O_Y,code_1,2);
     		}
     if((Y<90&&Y>0)&&(X>0&&X<50))
     {
      CLEAR(0,0,0x00);           // 调清屏函数 显示一区清屏
      CLEAR(0xb0,0x04,0x00);     //显示二区清屏
	  CGRAM();
	  code_1=0x88;               //取字模 
      O_X=0x00;
      O_Y=0x10;
      CCW1_PR(O_X,O_Y,code_1,2);  // 调中文显示函数(文本方式)
    }
    //X = 0;
    //Y = 0;
	}*/
}

void c_int1(void)
{
/*	if(PIVR==0x0001)
	{	
		
		XINT1CR |= 0x8000;
		XINT1CR &= 0XFFFE;		
		SPIOpen();		
		SPISendByte(0x90);            //送控制字 10010000 用差分方式读Y坐标             		
	    while(PADATDIR&0x0080);
	 	Y = SPIReadByte();  	  	
	  	SPIClose();	  	
	  		  	       
	    SPIOpen();	   
	    SPISendByte(0xD0);            //送控制字 11010000 用差分方式读X坐标
        while(PADATDIR&0x0080);
	    X = SPIReadByte();	 
	    SPIClose();	    	         	    
	    if(Y>=90)
	    {
	    	if(X>=50)
	    	{
	    		CLEAR(0,0,0x00);           // 调清屏函数 显示一区清屏
            	CLEAR(0xb0,0x04,0x00);     //显示二区清屏
	    		CGRAM();
	    		code_1=0x80;               //取字模 
     			O_X=0x00;
     			O_Y=0x10;
     			CCW1_PR(O_X,O_Y,code_1,2);  // 调中文显示函数(文本方式) 
    		}
    		else
    		{
    			CLEAR(0,0,0x00);           // 调清屏函数 显示一区清屏
            	CLEAR(0xb0,0x04,0x00);     //显示二区清屏
	    		CGRAM();
	    		code_1=0x88;               //取字模 
     			O_X=0x00;
     			O_Y=0x10;
     			CCW1_PR(O_X,O_Y,code_1,2);  // 调中文显示函数(文本方式) 
    		}
    	}
    	else 
    	{
    		if(X>=50)   	
    		{
	   			CLEAR(0,0,0x00);           // 调清屏函数 显示一区清屏
		   		CLEAR(0xb0,0x04,0x00);     //显示二区清屏
    			CGRAM();
    			code_1=0x90;               //取字模 
     			O_X=0x00;
     			O_Y=0x10;
     			CCW1_PR(O_X,O_Y,code_1,1); // 调中文显示函数(文本方式)  
    		}
    		else
    		{
    			CLEAR(0,0,0x00);           // 调清屏函数 显示一区清屏
		   		CLEAR(0xb0,0x04,0x00);     //显示二区清屏
		   		CGRAM(); 
   			    code_1=0x80;             // 取字模 
                O_X=0x02;
    			O_Y=0x0b;
    			CCW1_PR(O_X,O_Y,code_1,5); // 调中文显示函数(文本方式)  
    
    			code_1=0x94;             // 取字模 
    			O_X=0x00;
    			O_Y=0x10;
    			CCW1_PR(O_X,O_Y,code_1,2);  // 调中文显示函数(文本方式)
    			/*CGRAM();
    			code_1=0x94;               //取字模 
     			O_X=0x00;
     			O_Y=0x10;
     			CCW1_PR(O_X,O_Y,code_1,2); // 调中文显示函数(文本方式) 
    		}
    	}
    	XINT1CR |= 0x0001;
  }*/
	  ;  	
}

void c_int2(void)
{
	;
}

void c_int3(void)
{
	;
}

⌨️ 快捷键说明

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