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

📄 touch.c

📁 ads 编写的lcd彩色液晶320*240显示程序
💻 C
字号:
#include "..\Target\44b.h"#include "..\Target\44blib.h"#include "lcdtest\lcd.h"#define TOUCH_MSR_Y   0x9c//读Y轴坐标命令(参考表14-2的位定义说明)#define TOUCH_MSR_X   0xdc//读X轴坐标命令typedef struct {	int  Pressed;	int  x;	int  y;}TOUCHSTATE;TOUCHSTATE _State;int ReadTouch(unsigned char command)//TouchStruct *TouchState){	unsigned char temp,i,ack;		ack=0;        ///PG7<-PENIRQ,PG6<-BUSY,PG5<-DOUT,PG4->CS,PG3->DCLK,PG2->DIN    //PC14<-DCLK, PC11<-DOUT, PC10<-BUSY, PC9<-DIN, PC8<-CS, EXINT7<-PENIRQ			rPDATC &=0xbeff;//rPDATG &=0xe7;	//clr cs;clr dclk	temp=0x80;	for(i=0;i<8;i++)	{		if(command&temp)//mov din,c			rPDATC |=0x0200;//rPDATG|=0x04;//setb din  ,PC9=1 //setb din		else			rPDATC &=0xfdff;//rPDATG &=0xfb;//clr  din	,PC9=0 //clr  din		rPDATC |=0x4000;//rPDATG |=0x08;	//setb dclk            //setb dclk		Delay(3);		rPDATC &=0xbfff;//rPDATG &=0xf7;	//clr dclk ,PC14=0     //clr dclk		Delay(3);		temp=temp>>1;	}	temp=(unsigned char)((rPDATC&0x0400)>>8);	while(temp==0)		//while((temp=(rPDATG&0x40))==0); 	// 当busy(pc10)=0 循环			temp=(unsigned char)((rPDATC&0x0400)>>8);	rPDATC &=0xf7ff;//rPDATG &=0xdf;	//clr dout  ,PC11=0  //clr din    		rPDATC |=0x4000;//rPDATG |=0x08;	//setb dclk ,PC14=1		//setb dclk	Delay(3);	rPDATC &=0xbfff;//rPDATG &=0xf7;	//clr dclk  ,PC14=0						//clr dclk	Delay(3);	for(i=0;i<7;i++)	{		rPDATC |=0x4000;//rPDATG |=0x08;	//setb dclk ,PC14=1			//setb dclk		temp=(unsigned char)((rPDATC&0x0800)>>8);		if(temp)		//if(temp=rPDATG&0x20)		//当dout(pc11)=1				ack++;		ack=ack<<1;		Delay(3);		rPDATC &=0xbfff;//rPDATG &=0xf7;	//clr dclk ,PC14=0		//clr dclk		Delay(3);	}	rPDATC |=0x4000;	// rPDATG |=0x08;//setb dclk ,PC14=1	temp=(unsigned char)((rPDATC&0x0800)>>8);	if(temp)		//if(temp=rPDATG&0x20)		ack++;		Delay(3);		rPDATC &=0xbfff;	//rPDATG&=0xf7;//clr dclk	rPDATC |=0x0100;	//rPDATG|=0x10;//setb cs        	return ack;}//////////////////////////////////////////////////////int key_point(int point_x,int point_y){       int key;    if(point_x>=180)    {         if(point_y>=200) key=1;         else if(point_y>=150) key=2;         else if(point_y>=100) key=3;         else if(point_y>=50) key=4;         else  key=5;    }    else if(point_x>=120)    {         if(point_y>=200) key=6;         else if(point_y>=150) key=7;         else if(point_y>=100) key=8;         else if(point_y>=50) key=9;         else  key=10;    }    else if(point_x>=60)    {         if(point_y>=200) key=11;         else if(point_y>=150) key=12;         else if(point_y>=100) key=13;         else if(point_y>=50) key=14;         else  key=15;    }    else     {         if(point_y>=200) key=16;         else if(point_y>=150) key=17;         else if(point_y>=100) key=18;         else if(point_y>=50) key=19;         else  key=20;    }    return(key);}/////选中区域变颜色void change_color(int key){     int x1,y1,x2,y2;     int x,y;     y=(key-1)/5;     x=(key-1)%5;     x1=64*x;     y1=60*y;     x2=64*(x+1);     y2=60*(y+1);     LCD_rectangle(x1,y1,x2,y2,GREEN);}//////////////////////////////////////////////////////void Test_Touch(void){   	unsigned int save_C,save_G,save_PC,save_PG;   	int key_value;   	save_C=rPCONC;	save_G=rPCONG;    save_PC=rPUPC;    save_PG=rPUPG;   		Uart_Printf("[Touch Screen Panel test!\n");	Uart_Printf(" 在计算机上,按任意键退出测试...\n");	Uart_Printf("点击触摸屏,显示点击的位置坐标。\n");			_State.Pressed=0;	_State.x=0;	_State.y=0;		//rPCONG=0x015f;//init. I/O	//rPUPG &=0x80;	rPCONC =0x1f05ff55;		//PC14,PC8,PC9为输出,PC10,PC11为输入	rPUPC  =0x00ff;   	rPCONG =0x00ff;			//PG7 设为输入	rPUPG  =0x80;				//PG7 the pull up resistor is disabled	    	ReadTouch(0xdc);   	while(!Uart_GetKey())	{		if(((rPDATG&0x80)==0)&&(_State.Pressed==0)) //PENIRQ电平为低  PG7=0	//PENIRQ电平为低		{            _State.Pressed=1;			//说明已经按下		    _State.x=ReadTouch(TOUCH_MSR_X);		    _State.y=ReadTouch(TOUCH_MSR_Y);		    Uart_Printf("\nTouch at the point ( %4d, %4d )",_State.x,_State.y);		    key_value=key_point(_State.x,_State.y);		    Uart_Printf("\n按下  %d  号区域",key_value);		    change_color( key_value);		    if(key_value==20) 		    {		        LcdDraw_backgroundcolor(BLUE);Delay(5000);		        Uart_Printf("\n清除显示屏");		     }		    if(key_value==19) 		    {		        Test_LCD();		        Uart_Printf("\n显示屏调试");		    }		}		else if(((rPDATG&0x80)!=0)&&(_State.Pressed==1))			_State.Pressed=0;				Delay(100);	}	rPCONC=save_C;	rPCONG=save_G;	rPUPC=save_PC;	rPUPG=save_PG;}			

⌨️ 快捷键说明

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