|
本帖最后由 dcexpert 于 2015-12-19 11:18 编辑
这几天Mbed很给力,对F429/F469两个开发板连续升级,给出了很多例子,可以很方便的驱动液晶屏、触摸屏、陀螺仪等外设了。先看看F429的触摸屏用法。
- #include "mbed.h"
- #include "TS_DISCO_F429ZI.h"
- #include "LCD_DISCO_F429ZI.h"
- LCD_DISCO_F429ZI lcd;
- TS_DISCO_F429ZI ts;
- int main()
- {
- TS_StateTypeDef TS_State;
- uint16_t x, y;
- uint8_t text[30];
- uint8_t status;
-
- BSP_LCD_SetFont(&Font20);
-
- lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN", CENTER_MODE);
- lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"DEMO", CENTER_MODE);
- wait(1);
-
- status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
-
- if (status != TS_OK)
- {
- lcd.Clear(LCD_COLOR_RED);
- lcd.SetBackColor(LCD_COLOR_RED);
- lcd.SetTextColor(LCD_COLOR_WHITE);
- lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN", CENTER_MODE);
- lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"INIT FAIL", CENTER_MODE);
- }
- else
- {
- lcd.Clear(LCD_COLOR_GREEN);
- lcd.SetBackColor(LCD_COLOR_GREEN);
- lcd.SetTextColor(LCD_COLOR_WHITE);
- lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN", CENTER_MODE);
- lcd.DisplayStringAt(0, LINE(6), (uint8_t *)"INIT OK", CENTER_MODE);
- }
-
- wait(1);
- lcd.Clear(LCD_COLOR_BLUE);
- lcd.SetBackColor(LCD_COLOR_BLUE);
- lcd.SetTextColor(LCD_COLOR_WHITE);
-
- while(1)
- {
-
- ts.GetState(&TS_State);
- if (TS_State.TouchDetected)
- {
- x = TS_State.X;
- y = TS_State.Y;
- sprintf((char*)text, "x=%d y=%d ", x, y);
- lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
- }
- }
- }
复制代码
- 首先需要定义一个触摸屏对象
TS_DISCO_F429ZI ts;以及定义一个触摸屏状态变量 - TS_StateTypeDef TS_State;通过 ts.Init 初始化触摸屏
status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); - 在通过ts.GetState函数获取触摸屏状态
ts.GetState(&TS_State); - 使用TS_State.TouchDetected判断触摸屏是否按下
TS_State.TouchDetected - 最后是通过TS_State.X/TS_State.Y得到触摸点的座标
x = TS_State.X;
y = TS_State.Y;
运行效果
注意F429是电阻屏,是不支持多点触摸的。
|
|