/** * @brief: 触摸屏初始化 * @retval:0 - 没有进行校准 * 1 - 进行过校准 * @note: * - T_SCK -> PB1 * - T_CS -> PB2 * - T_MISO -> PF8 * - T_MOSI -> PF9 * - T_PEN -> PF10 */ u8 TP_Init(void) { RCC->APB2ENR|=1<<3; //PB时钟使能 RCC->APB2ENR|=1<<7; //PF时钟使能 GPIOB->CRL&=0XFFFFF00F; //PB1 PB2 GPIOB->CRL|=0X00000330; GPIOB->ODR|=3<<1; //PB1 PB2 推挽输出 GPIOF->CRH&=0XFFFFF000; GPIOF->CRH|=0X00000838; //PF8-上拉输入 PF9-推挽输出 PF10-上拉输入 GPIOF->ODR|=7<<8; //PF8 PF9 PF10 全部上拉 TP_Read_XY(&tp_dev.x,&tp_dev.y);//第一次读取初始化 IIC_Init(); //初始化IIC while(AT24CXX_Check()) //检测不到24c02 { LCD_ShowString(16,150,200,16,16,"24C02 Check Failed!"); delay_ms(500); LCD_ShowString(16,150,200,16,16,"Please Check! "); delay_ms(500); } if(TP_Get_Adjdata())return 0; //已经校准 else //未校准 { LCD_Clear(WHITE); //清屏 TP_Adjust(); //屏幕校准 TP_Save_Adjdata(); } TP_Get_Adjdata(); return 1; }
int main(void) { u8 key,fontok=0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); //串口1初始化 LCD_Init(); //初始化液晶 LED_Init(); //LED初始化 KEY_Init(); //按键初始化 usmart_dev.init(72); //usmart初始化 USART2_Init(36,115200); //初始化串口2 TP_Init(); //初始化触摸屏 mem_init(SRAMIN); //初始化内部内存池 exfuns_init(); //为fatfs相关变量申请内存 f_mount(0,fs[0]); //挂载SD卡 key=KEY_Scan(0); if(key==KEY_RIGHT) //强制校准 { LCD_Clear(WHITE); //清屏 TP_Adjust(); //屏幕校准 TP_Save_Adjdata(); LCD_Clear(WHITE); //清屏 } fontok=font_init(); //检查字库是否OK if(fontok||key==KEY_DOWN)//需要更新字库 { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32"); while(SD_Initialize()) //检测SD卡 { LCD_ShowString(60,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(60,70,200+60,70+16,WHITE); delay_ms(200); } LCD_ShowString(60,70,200,16,16,"SD Card OK"); LCD_ShowString(60,90,200,16,16,"Font Updating..."); key=update_font(20,110,16,0);//从SD卡更新 while(key)//更新失败 { LCD_ShowString(60,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(60,110,200,16,16,"Font Update Success!"); delay_ms(1500); LCD_Clear(WHITE);//清屏 } sim900a_test(); }
char Proc_TP_Adj(char *NC) { unsigned int temp[8] ; Color = Green ; Color_BK = Black ; TP_Init() ; Clear_LCD(Color_BK) ; PutStringCN24(58,120,"触摸屏校正") ; Color = Cyan ; PutStringCN16(30,165,"请用触控笔点测试点中心") ; for(;;) { Draw_Test_Point(20,20,Yellow) ; for(;;) { if(Read_TP_Twice(&temp[0],&temp[1])) break ; if(ReadKey()==Cancel) return 0x00 ; } DrawRectFill(0,0,40,40,Color_BK) ; Wait_Pen_Up() ; Draw_Test_Point(220,20,Yellow) ; for(;;) { if(Read_TP_Twice(&temp[2],&temp[3])) break ; if(ReadKey()==Cancel) return 0x00 ; } DrawRectFill(200,0,40,40,Color_BK) ; Wait_Pen_Up() ; Draw_Test_Point(20,300,Yellow) ; for(;;) { if(Read_TP_Twice(&temp[4],&temp[5])) break ; if(ReadKey()==Cancel) return 0x00 ; } DrawRectFill(0,280,40,40,Color_BK) ; Wait_Pen_Up() ; Draw_Test_Point(220,300,Yellow) ; for(;;) { if(Read_TP_Twice(&temp[6],&temp[7])) break ; if(ReadKey()==Cancel) return 0x00 ; } DrawRectFill(200,280,40,40,Color_BK) ; Wait_Pen_Up() ; if(TP_Adjust(temp)) break ; } return 0x00 ; }
//触摸屏初始化 //返回值:0,没有进行校准 // 1,进行过校准 //触摸屏初始化 //返回值:0,没有进行校准 // 1,进行过校准 u8 TP_Init(void) { //注意,时钟使能之后,对GPIO的操作才有效 //所以上拉之前,必须使能时钟.才能实现真正的上拉输出 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE); //使能PB,PF端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2; // PB1,PB2端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2);//上拉 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // PF9端口配置 推挽输出 GPIO_Init(GPIOF, &GPIO_InitStructure); GPIO_SetBits(GPIOF,GPIO_Pin_9);//P9 上拉 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_10; // PF8.PF10端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入 GPIO_Init(GPIOF, &GPIO_InitStructure); TP_Read_XY(&tp_dev.x,&tp_dev.y);//第一次读取初始化 AT24CXX_Init();//初始化24CXX if(TP_Get_Adjdata())return 0;//已经校准 else //未校准? { LCD_Clear(WHITE);//清屏 TP_Adjust(); //屏幕校准 TP_Save_Adjdata(); } TP_Get_Adjdata(); return 1; }