完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
例程下载:
资料包括程序、相关说明资料以及软件使用截图 百度云链接:http://pan.baidu.com/s/1i574oPv 密码:r3s3 (硬石YS-F1Pro开发板HAL库例程持续更新2. 软件设计之高级裸机例程(HAL库版本)YSF1_HAL-109. LCD-显示与触摸旋转) /** ****************************************************************************** * 硬石YS-F1Pro开发板例程功能说明 * * 例程名称: YSF1_HAL-109. LCD-显示与触摸旋转 * ****************************************************************************** * 说明: * 本例程配套硬石STM32开发板YS-F1Pro使用。 * * 淘宝: * 论坛:硬石电子社区 * 版权归硬石嵌入式开发团队所有,请勿商用。 ****************************************************************************** */ |
|
相关推荐
|
|
【1】例程简介
电阻式触摸屏是一种传感器,它将矩形区域中触摸点(X,Y)的物理位置转换为代表X坐标和 Y坐标的电压。 电阻式触摸屏是一种传感器,基本上是薄膜加上玻璃的结构,薄膜和玻璃相邻的一面上均 涂有ITO(纳米铟锡金属氧化物)涂层,ITO具有很好的导电性和透明性。当触摸操作时,薄 膜下层的ITO会接触到玻璃上层的ITO,经由感应器传出相应的电信号,经过转换电路送到处 理器,通过运算转化为屏幕上的X、Y值,而完成点选的动作,并呈现在屏幕上。 四线触摸屏包含两个阻性层。其中一层在屏幕的左右边缘各有一条垂直总线,另一层在屏 幕的底部和顶部各有一条水平总线。 本例程实现触摸屏数据读取并实现校准算法。 【2】跳线帽情况 ******* 为保证例程正常运行,必须插入以下跳线帽 ********** 丝印编号 IO端口 目标功能引脚 出厂默认设置 JP1 PA10 TXD(CH340G) 已接入 JP2 PA9 RXD(CH340G) 已接入 【3】操作及现象 把3.5寸TFT液晶模组插入开发板中间液晶接口上,使用开发板配套的MINI USB线连接到开发 板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工 具,设置参数为115200 8-N-1。下载完程序之后,在串口调试助手窗口可接收到液晶模组ID 信息等信息,程序会读取存放在串行Flash上的触摸屏校准参数,如果读到数据不合法,则进行 触摸屏校准程序,否则直接进入触摸画板程序。按下KEY1按键可以旋转屏幕显示。 |
|
|
|
|
|
main.c文件内容
/** ****************************************************************************** * 文件名程: main.c * 作 者: 硬石嵌入式开发团队 * 版 本: V1.0 * 编写日期: 2015-10-04 * 功 能: 触摸屏使用实现 ****************************************************************************** * 说明: * 本例程配套硬石stm32开发板YS-F1Pro使用。 * * 淘宝: * 论坛:http://www.ing10bbs.com * 版权归硬石嵌入式开发团队所有,请勿商用。 ****************************************************************************** */ /* 包含头文件 ----------------------------------------------------------------*/ #include "stm32f1xx_hal.h" #include "usartbsp_debug_usart.h" #include "lcdbsp_lcd.h" #include "spiflashbsp_spiflash.h" #include "touch/bsp_touch.h" #include "stdlib.h" #include "key/bsp_key.h" /* 私有类型定义 --------------------------------------------------------------*/ /* 私有宏定义 ----------------------------------------------------------------*/ /* 私有变量 ------------------------------------------------------------------*/ uint8_t screen_flag=1; /* 扩展变量 ------------------------------------------------------------------*/ /* 私有函数原形 --------------------------------------------------------------*/ /* 函数体 --------------------------------------------------------------------*/ /** * 函数功能: 系统时钟配置 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 9倍频,得到72MHz主时钟 HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟:72MHz RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB时钟:72MHz RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1时钟:36MHz RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2时钟:72MHz HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); // HAL_RCC_GetHCLKFreq()/1000 1ms中断一次 // HAL_RCC_GetHCLKFreq()/100000 10us中断一次 // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 配置并启动系统滴答定时器 /* 系统滴答定时器时钟源 */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* 系统滴答定时器中断优先级配置 */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } /** * 函数功能: 画板初始化,用于取色用 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void Palette_Init(void) { if(screen_flag==1) { /* 整屏清为白色 */ LCD_Clear( 0, 0,320, 480,WHITE ); LCD_Clear( 0,440, 40, 40, BLACK ); LCD_DispString_EN(3,450,"CL",BLACK,RED,USB_FONT_24); LCD_Clear( 40,440, 40, 40, GREEN ); LCD_Clear( 80,440, 40, 40, BLUE ); LCD_Clear(120,440, 40, 40, MAGENTA ); LCD_Clear(160,440, 40, 40, ORANGE ); LCD_Clear(200,440, 40, 40, CYAN ); LCD_Clear(240,440, 40, 40, BLACK ); LCD_Clear(280,440, 40, 40, RED ); } else if(screen_flag==2) { /* 整屏清为白色 */ LCD_Clear( 0, 0,480, 320,WHITE); LCD_Clear( 0,280, 60, 40, BLACK); LCD_DispString_EN(3,290,"CL",BLACK,RED,USB_FONT_24); LCD_Clear( 60,280, 60, 40, GREEN ); LCD_Clear(120,280, 60, 40, BLUE ); LCD_Clear(180,280, 60, 40, MAGENTA ); LCD_Clear(240,280, 60, 40, ORANGE ); LCD_Clear(300,280, 60, 40, CYAN ); LCD_Clear(360,280, 60, 40, BLACK ); LCD_Clear(420,280, 60, 40, RED ); } } /** * 函数功能: 主函数. * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ int main(void) { uint32_t lcdid; uint16_t x,y; uint8_t i; uint16_t color=BLUE; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化3.5寸TFT液晶模组,一般优先于调试串口初始化 */ lcdid=BSP_LCD_Init(); KEY_GPIO_Init(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); MX_SPIFlash_Init(); Touch_Init_GPIO(); /* 调用格式化输出函数打印输出数据 */ printf("LCD ID=0x%08Xn",lcdid); printf("触摸屏校准测试n"); LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK); /* 开背光 */ LCD_BK_ON(); #if 0 /* 1:重新校准,0:读取原有数据进行校准 */ /* 擦除存储触摸校准值数据,重新进行校准 */ SPI_FLASH_SectorErase(XPT2046_SPIFLASH_ADDR); #endif SPI_FLASH_BufferRead((uint8_t *)&cal_value,XPT2046_SPIFLASH_ADDR,sizeof(XPT2046_Calibration)); printf("cal_flag: 0x%Xn",cal_value.cal_flag); for(i=0;i<5;++i) { printf("%d lcd_x=%d lcd_y=%d touch_x=%d touch_y=%dn",i,cal_value.lcd_x[i],cal_value.lcd_y[i],cal_value.touch_x[i],cal_value.touch_y[i]); } for(i=0;i<7;++i) { printf("adjust[%d]=%d ",i,cal_value.adjust[i]); } printf("n"); if(cal_value.cal_flag!=0xAA55) { /* 等待触摸屏校正完毕 */ while(XPT2046_Touch_Calibrate() !=0); } else { LCD_Clear(0, 0,LCD_DEFAULT_WIDTH, LCD_DEFAULT_HEIGTH, BACKGROUND); } Palette_Init(); /* 无限循环 */ while (1) { if(KEY1_StateRead()==KEY_DOWN) { if(screen_flag==1) { screen_flag=2; } else if(screen_flag==2) { screen_flag=1; } HAL_Delay(100); LCD_SetDirection(screen_flag); Palette_Init(); } if(XPT2046_EXTI_Read()==XPT2046_EXTI_ActiveLevel) /*如果触笔按下了*/ { if(screen_flag==1) { /*获取点的坐标*/ XPT2046_Get_TouchedPoint(&x,&y); if((x==0xFFFF)||(y==0xFFFF)) continue; if(y<440) { Palette_draw_point(x,y,color); } else if(y<480) { if(x>280) color=RED; else if(x>240) color=BLACK; else if(x>200) color=CYAN; else if(x>160) color=ORANGE; else if(x>120) color=MAGENTA; else if(x>80) color=BLUE; else if(x>40) color=GREEN; else { color=BLUE; LCD_Clear(0,0,320,440,WHITE); } } } else if(screen_flag==2) { /*获取点的坐标*/ XPT2046_Get_TouchedPoint(&y,&x); if((x==0xFFFF)||(y==0xFFFF)) continue; y=320-y; if(y<280) { Palette_draw_point(x,y,color); } else if(y<320) { if(x>420) color=RED; else if(x>360) color=BLACK; else if(x>300) color=CYAN; else if(x>240) color=ORANGE; else if(x>180) color=MAGENTA; else if(x>120) color=BLUE; else if(x>60) color=GREEN; else { color=BLUE; LCD_Clear(0,0,480,280,WHITE); } } } } HAL_Delay(10); } } |
|
|
|
|
|
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11769 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 23:17 , Processed in 0.983311 second(s), Total 96, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号