完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F427V系列的触摸屏驱动
提示:本程序主控为STM32F427VGT6, LCD驱动为ILI9341 触摸驱动为2046 前言 一、STM32CubeMX LCD配置 1,配置FMC a,选择FMC b,配置为LCD模式 注:LCD Register Select的选择要根据硬件设计来选择,以下为本例程的LCD接口原理图 c,配置时钟 注:以上数据可达最大刷新率 2,配置TIM作为LCD的专用延时函数 若程序中未添加滴答时钟写的延时函数则可按如下配置 3,LCD程序 到此,LCD配置结束,生成工程,添加lcd.c和lcd.h,直接调用相关API即可。 部分API函数: void LCD_Init(void); //初始化 void LCD_DisplayOn(void); //开显示 void LCD_DisplayOff(void); //关显示 void LCD_Clear(uint16_t Color); //清屏 void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos); //设置光标 void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t RGB_Code) ; //画点 void LCD_Fast_DrawPoint(uint16_t x,uint16_t y,uint16_t color); //快速画点 uint16_t LCD_ReadPoint(uint16_t x,uint16_t y); //读点 void Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r, uint16_t RGB_Code); //画圆 void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,uint16_t RGB_Code); //画线 void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t RGB_Code); //画矩形 void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color); //填充单色 void LCD_Color_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t *color); //填充指定颜色 void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t size, uint16_t RGB_Code ,uint16_t back_color); //显示一个字符 void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size ,uint16_t RGB_Code,uint16_t back_color); //显示一个数字 void LCD_ShowxNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size, uint16_t RGB_Code,uint16_t back_color);//显示 数字 提示:相关代码在后续附件中 二、STM32CubeMX LCD触摸屏配置 1,配置相关IO a,原理图的接口 b,IO配置 T_MISO、T_PEN 配置为输入模式 T_MOSI、T_CS 、T_SCK配置为输出模式 2,程序 添加 到本工程中 stmflash.c用于储存触摸的校验数据 a,部分API void TP_Write_Byte(uint8_t num); //向控制芯片写入一个数据 uint16_t TP_Read_AD(uint8_t CMD); //读取AD转换值 uint16_t TP_Read_XOY(uint8_t xy); //带滤波的坐标读取(X/Y) uint8_t TP_Read_XY(uint16_t *x,uint16_t *y); //双方向读取(X+Y) uint8_t TP_Read_XY2(uint16_t *x,uint16_t *y); //带加强滤波的双方向坐标读取 void TP_Drow_Touch_Point(uint16_t x,uint16_t y,uint16_t color);//画一个坐标校准点 void TP_Draw_Big_Point(uint16_t x,uint16_t y,uint16_t color); //画一个大点 void TP_Save_Adjdata(void); //保存校准参数 uint8_t TP_Get_Adjdata(void); //读取校准参数 void TP_Adjust(void); //触摸屏校准 void TP_Adj_Info_Show(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,uint16_t x3,uint16_t y3,uint16_t fac);//显示校准信息 //电阻屏/电容屏 共用函数 uint8_t TP_Scan(uint8_t tp); //扫描 uint8_t TP_Init(void); //初始化 void Load_Drow_Dialog(void); //清空屏幕并在右上角显示"Clear" void rtp_test(void); //电阻触摸屏测试函数 2,使用说明 在LCD初始化后调用tp_dev.init(); 触摸初始化,然后可以试用rtp_test()触摸测试函数。 也可编写自己的触摸功能函数 例子: tp_dev.scan(0); //触摸扫描 if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下 { if(tp_dev.x[0] if(tp_dev.x[0] > x1 && tp_dev.x[0] < x2 && tp_dev.y[0] > y1 && tp_dev.y[0] < y2) //判断按下的坐标与目标坐标是否相等 { //然后执行相应功能即可 } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3316 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9060 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 04:11 , Processed in 1.265084 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号