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

📄 ocmj8x10d_touch.c

📁 触摸屏中断控制程序
💻 C
字号:
//中断方式
//==============================================================================
//本触摸屏程序只适用于金鹏公司D型液晶模块,显示点数按OCMJ8X10D液晶模块显示,即160X128点阵显示。
//本程序利用液晶模块的触摸屏中断信号输出到lcd_int脚由MCU的INT0接收。
//==============================================================================
#include "init.c"

uchar code tab1[] = "     No-Touch!!            X=                  Y= ";
uchar code tab2[] = "No-Touch!!";
uchar code tab3[] = "Touch-Now!";

uint X1, X2, Y1 ,Y2;
//==============================================================================
void Get_Touch_XY(void)
{
	uchar temp;
	//uint X1, X2, Y1 ,Y2;
	
	Y1 = Touch_Y();
	X1 = Touch_X();
		
	Delay1ms(2);
			
	if(Test_Touch())
	{	
		Y2 = Touch_Y();
		X2 = Touch_X();
		
		if((X1==X2) && (Y1==Y2))
		{	
			/*已获得确实的触摸坐标X1、Y1*/
			gotoxy(5, 0);
			LCD_Bold();
			for(temp=0 ; temp<11 ; temp++)
			{	
				lcd_datawrite(tab3[temp]);
					
			}	
			gotoxy(10, 16);
			Print_Hex(X1);
			gotoxy(10, 32);
			Print_Hex(Y1);
			LCD_NoBold();
			
			delay1 (100);
		}
	}
	lcd_regwrite(0xc0, 0xc0);//touch on
	
	gotoxy(5, 0);
	for(temp=0 ; temp<11 ; temp++)
	{	
		lcd_datawrite(tab2[temp]);
	}	
}
//==============================================================================
void lcd_touch_init(void)
{	
	uchar temp;
	
	temp=lcd_regread(0xa0)|0x44;//enable lcd touch int
	lcd_regwrite(0xa0, temp);
	
	lcd_regwrite(0xc0, 0xc0);//touch on								
}
//==============================================================================
void Ext_int0(void) interrupt 0
{
	EA=0;
	
	if(0x40==(lcd_regread(0xa0)&0x40))      //test bit6 touch int is "1"?
	{
		Get_Touch_XY();
	}
	EA=1;
}
/******************************************************************************/
/*Main program 		  													  */
/******************************************************************************/
void main(void)
{
	uchar temp;
	
	lcd_reset();
  	lcd_initial();
	lcd_clear();
	
	lcd_touch_init();
	
	lcd_regwrite(0x10,0x6b);
   	lcd_regwrite(0x00,0xcd);
   	
	gotoxy(0, 0);
	for(temp=0 ; temp<50 ; temp++)
	{	
		lcd_datawrite(tab1[temp]);
	}
	
	IT0=1;
	EA=1;
	EX0=1;
	
	while(1)
	{
		if((X2<0x118)&&(X2>0x6c)&&(Y2>0x4c)&&(Y2<0x13c))
		{
			EA=0;//记住:处理LCM显示期间不能让中断或其他事件延迟影响LCM的时序
			gotoxy(10, 64);
			Print_Hex(0x11);
			EA=1;
		}
		else if((X2<0x30c)&&(X2>0x224)&&(Y2>0x23c)&&(Y2<0x36c))
		{ 
			EA=0;//记住:处理LCM显示期间不能让中断或其他事件延迟影响LCM的时序
			gotoxy(10, 80);
			Print_Hex(0xff);
			EA=1;
		}
		else
		{
			EA=0;//记住:处理LCM显示期间不能让中断或其他事件延迟影响LCM的时序
			gotoxy(10, 64);
			Print_Hex(0x00);
			gotoxy(10, 80);
			Print_Hex(0x00);
			EA=1;
		}
	}
}

⌨️ 快捷键说明

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