u8 GetTouchValue(void) { int x[2],y[2]; Pen_Int_Set(0);//关闭中断 x[0]=TPReadX(); y[0]=TPReadY(); x[1]=TPReadX(); y[1]=TPReadY(); while(TOUCH_PEN==0); //等待放开屏幕 Pen_Int_Set(1);//开中断 if(x[0]>MAX_X_VAL||x[0]<MIN_X_VAL||y[0]>MAX_Y_VAL||y[0]<MIN_Y_VAL)return 0; if(abs((float)x[0]-x[1])>50||abs((float)y[0]-y[1])>50)return 0; else { penPoint.x=(x[0]+x[1])/2; penPoint.y=(y[0]+y[1])/2; return 1; } }
int main(void) { u8 key; u8 i=0; SystemInit(); delay_init(72); //延时初始化 NVIC_Configuration(); uart_init(9600); LED_Init(); KEY_Init(); LCD_Init(); POINT_COLOR=RED;//设置字体为蓝色 LCD_ShowString(60,50,"Mini STM32"); LCD_ShowString(60,70,"TOUCH TEST"); LCD_ShowString(60,90,"ATOM@ALIENTEK"); LCD_ShowString(60,110,"2011/1/1"); LCD_ShowString(60,130,"Press KEY0 to Adjust"); Touch_Init(); delay_ms(1500); Load_Drow_Dialog(); while(1) { key=KEY_Scan(); if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下 { Pen_Int_Set(0);//关闭中断 do { Convert_Pos(); Pen_Point.Key_Sta=Key_Up; if(Pen_Point.X0>216&&Pen_Point.Y0<16)Load_Drow_Dialog();//清除 else { Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//画图 GPIOC->ODR|=1<<1; //PC1 上拉 } }while(PEN==0);//如果PEN一直有效,则一直执行 Pen_Int_Set(1);//开启中断 }else delay_ms(10); if(key==1)//KEY0按下,则执行校准程序 { LCD_Clear(WHITE);//清屏 Touch_Adjust(); //屏幕校准 Save_Adjdata(); Load_Drow_Dialog(); } i++; if(i==20) { i=0; LED0=!LED0; } }; }
//读取一次坐标值 //仅仅读取一次,知道PEN松开才返回! u8 Read_TP_Once(void) { u8 t=0; Pen_Int_Set(0);//关闭中断 Pen_Point.Key_Sta=Key_Up; Read_ADS2(&Pen_Point.X,&Pen_Point.Y); while(PEN==0&&t<=250) { t++; delay_ms(10); }; Pen_Int_Set(1);//开启中断 if(t>=250)return 0;//按下2.5s 认为无效 else return 1; }
//读取一次坐标值 //仅仅读取一次,知道PEN松开才返回! uint8_t Read_TP_Once(void) { uint8_t t = 0; Pen_Int_Set(0);//关闭中断 Pen_Point.Key_Sta = Pen_Up; Read_ADS2(&Pen_Point.X, &Pen_Point.Y); while(PEN == 0 && t <= 250) { t++; Delay_ms(10); }; Pen_Int_Set(1);//开启中断 if(t >= 250) { return 0; } //按下2.5s 认为无效 else { return 1; } }
//任务5 //触摸画笔 void TaskTouch(void *pdata) { LCD_ShowString(10,160,"Touch Panel"); while(1) { GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource1); //触摸中断线映射 if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下 { Pen_Int_Set(0);//关闭中断 Convert_Pos(); Pen_Point.Key_Sta=Key_Up; if(Pen_Point.X0>216&&Pen_Point.Y0>304)Load_Drow_Dialog();//清除 else if(Pen_Point.Y0>180) { Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//画图 GPIO_SetBits(GPIOC,GPIO_Pin_1); } Pen_Int_Set(1);//开启中断 } OSTimeDlyHMSM(0,0,0,2); }; }
int main(void) { /////////////////////////////////////////// uint8_t Key; int i; //////////////////////////////////////////////// brightness = 0x40;//亮度 contrast = 0x70;//对比度 saturation = 0x40;//饱和度 memset(outbuf,0,64); SystemInit(); //GPIOInit(); //chumo改版加入 //Touch_Initializtion(); Init_NVIC(); //中断向量表注册函数 Init_LED(); //LED初始化 Init_KEY(); //按键初始化 Init_IIC(); //24LC02初始化 Init_TOUCH(); // 触摸屏配置 //Touch_Initializtion(); ////////// UART3_Init(115200); PrintStr("=========12345========\r\n"); //ADC_Init_Ex(); //Tim3_ETR_Init(); //Tim4_Init(); //CAN1_Init(250); // USB_Init(); // RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); /* Configure FSMC Bank1 NOR/SRAM3 */ //FSMC_SRAM_Init(); DelayMs(300); //InitSSD1963(); //LcdInitTest(); LcdInit(); LcdClear(GRAY0); DispButton(button2); DisplayButtonUp(2, 2,400,25); LcdPrintStr("版权所有(C)mmmmmmmmmmmmmmmmmmmm",4,4,BLUE,GRAY0); DisplayButtonUp(402,2,478,25); LcdPrintf(410,4,BLACK,GRAY0,"%02d:%02d:%02d",12,12,12); DisplayButtonDownColor(200, 410, 290, 470, RED); DisplayButtonDownColor(412, 410, 502, 470, GREEN); LcdPrintStr("删除",230,432,WHITE,RED); LcdPrintStr("确认",442,432,BLACK,GREEN); LcdFillRec(200,100,502,190,DGREEN); DisplayButtonUp(190,90,512,475); DelayMs(1000); LcdFillRec(190,90,512,475,RED); DelayMs(1000); LcdFillRec(190,90,512,475,GRAY0); DispButton(button2); DisplayButtonDownColor(200, 410, 290, 470, RED); DisplayButtonDownColor(412, 410, 502, 470, GREEN); LcdPrintStr("删除",230,432,WHITE,RED); LcdPrintStr("确认",442,432,BLACK,GREEN); LcdFillRec(200,100,502,190,DGREEN); DisplayButtonUp(190,90,512,475); // Pen_Point.Key_Sta==Key_Up; //LcdPrint16bitBmp(gImage, 16, 16, 490, 368 ); while(1) { // if(Pen_Point.Key_Sta==Key_Down) // { // LcdPrintf( 16,16,BLUE,WHITE,"%d",ADS_Read_AD(CMD_RDX)); // LcdPrintf( 16,32,BLUE,WHITE,"%d",ADS_Read_AD(CMD_RDY)); // } //LcdPrintf( 16,32,BLUE,WHITE,"%d",Touch_GetPhyY()); //LcdPrintf( 16,16,BLUE,WHITE,"%d",Touch_GetPhyX()); // DelayMs(200); // LED1 = ~LED1; //LED1=~LED1; //DelayMs(50); //////////////////////////////////////// Key=KEY_Scan(); if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下 { Pen_Int_Set(0); //关闭中断 do { LcdPrintf( 16,16,BLUE,WHITE,"%d",ADS_Read_AD(CMD_RDX)); LcdPrintf( 16,32,BLUE,WHITE,"%d",ADS_Read_AD(CMD_RDY)); Convert_Pos(); Pen_Point.Key_Sta=Key_Up; //GPIOC->ODR|=1<<5;//临时添加 // LcdPrintf(16,16,BLUE,BLACK,"%d\n",Pen_Point.X); // LcdPrintf(16,32,BLUE,BLACK,"%d\n",Pen_Point.Y); if(Pen_Point.X0>216&&Pen_Point.Y0<48)LcdClear(RED);//清除 else { Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//画图 GPIOC->ODR|=1<<5; //PC5 上拉 } }while(PEN==0);//如果PEN一直有效,则一直执行 Pen_Int_Set(1);//开启中断 } else DelayMs(1); if(Key==USER)//USER按下,则执行校准程序 { LcdClear(BlackColor);//清屏 Touch_Adjust(); //屏幕校准 Save_Adjdata(); LcdClear(RED); } i++; if(i==1) { i=0; LED1=~LED1; } } /////////////////////////////////// /* if(_SEC_) { _SEC_ = 0; GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6))); LcdPrintf(300,460,BLACK,GRAY0,"%03d",i); //i += 10; SetSensors(); for(u8 i=1; i<=16; i++) Printf("No.%d=%d,",i,GetSensorVoltage(i)); PrintStr("\r\n"); } UART1_SendByte(0x55); DelayMs(1); } */ }
/* ********************************************************************************************************* * Description: Main function * Arguments : None * Returns : None ********************************************************************************************************* */ int main (void) { u8 key; u8 x0,y0,x1,y1,x2,y2; u8 r,a,b; unsigned char flag; tccolor=Blue; SystemInit(); UART0_Init(); LCD_Init (); LPC_GPIO0->FIODIR |= 0x00002C0; //P0.6 0.7 0.9 Output LPC_GPIO2->FIODIR |= 0x00000FF; //P2.13 input P2.0...P2.7 Output Touch_Init(); LCD_Color(0,0,239,239,White); Load_Drow_Dialog(); LCD_Color(279,0,40,40,White); while(1) { if(len==8) { len=0; flag=data[6]; switch(flag) { case 0x01: x0=data[0];y0=data[1];x1=data[2];y1=data[3]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawLine(x0,y0,x1,y1); break; case 0x02: x0=data[0];y0=data[1];x1=data[2];y1=data[3];x2=data[4];y2=data[5]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawTriangle(x0,y0,x1,y1,x2,y2); break; case 0x03: x0=data[0];y0=data[1];x1=data[2];y1=data[3]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawRectangle(x0,y0,x1,y1); break; case 0x04: x0=data[0];y0=data[1];r=data[2]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawCircle(x0,y0,r); break; case 0x05: x0=data[0];y0=data[1];a=data[2];b=data[3]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawEllipse(x0,y0,a,b); } } key = KEY_Scan(); if(Pen_Point.Key_Sta==Key_Down) //Touch screen is pressed { Pen_Int_Set(0); //Closed interrupt do { Convert_Pos(); Pen_Point.Key_Sta=Key_Up; // Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0); //Drawing if(Pen_Point.Y0>=240) { Load_Drow_Dialog(); switch(Pen_Point.X0/40) { case 0:LCD_Color(279,0,40,40,White);tccolor=Blue;break; case 1:LCD_Color(279,40,40,40,White);tccolor=Yellow;break; case 2:LCD_Color(279,80,40,40,White);tccolor=Green;break; case 3:LCD_Color(279,120,40,40,White);tccolor=Red;break; case 4:LCD_Color(279,160,40,40,White);tccolor=Purple;break; case 5:LCD_Color(279,200,40,40,White);tccolor=Cyan;break; } } /* else { LCD_Color(0,0,239,239,tccolor); }*/ }while(PEN==0); //While the Touch screen is pressing Pen_Int_Set(1); //Opene the interrupt } else delay1ms(1); } }