在线时间836 小时
UID307297
注册时间2007-12-24
NXP金币3480
TA的每日心情 | 开心 4 小时前 |
---|
签到天数: 2949 天 连续签到: 40 天 [LV.Master]伴坛终老
金牌会员
 
- 积分
- 13890
- 最后登录
- 2025-8-14
|
本帖最后由 toofree 于 2017-3-12 23:10 编辑
【我要创作】LPC824 Lite之GPIO,TTP229BSF电容触摸。
本来是要对比I2C接口中的两款电容触摸芯片TTP229和MPR121,但是最后发现板上的TTP229不支持I2C接口。板上的型号为TTP229BSF,只支持串行模式TT。
粉色框圈出的部分为“0”才是I2C接口,为“1”是串行接口TT。
由于不是I2C接口,本实验没有增加过多的文件,只增加了软件延时函数文件,“delay.c”、“delay.h”。关于TTP229BSF操作函数在主函数中。
实验硬件及连线。连接简单,3.3V电源、地、数据和时钟信号,分别挂到了I2C的数据和时钟管脚。
启动时还有三根跳线短接线,需要设置工作模式。在上电后就可以拔掉。关于三根跳线接法用途在后面介绍。
整体工程结构预览。
在主程序中增加两个函数。I2C_GPIO_Config()初始化IO方向状态,KeyScanValueEx()串行读取按键状态数据。- #ifndef HIGH
- #define HIGH 1
- #endif
- #ifndef LOW
- #define LOW 0
- #endif
- #ifndef INPUT
- #define INPUT 0
- #endif
- #ifndef OUTPUT
- #define OUTPUT 1
- #endif
- #define SCL_PIN 10
- #define SDA_PIN 11
- #define IOCON_SCL IOCON_PIO10
- #define IOCON_SDA IOCON_PIO11
- #define SCL_H Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, SCL_PIN, HIGH) //
- #define SCL_L Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, SCL_PIN, LOW) //
-
- #define SDA_H Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, SDA_PIN, HIGH) //
- #define SDA_L Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, SDA_PIN, LOW) //
- #define SCL_read Chip_GPIO_PinGetState(LPC_GPIO_PORT, 0, SCL_PIN)
- #define SDA_read Chip_GPIO_PinGetState(LPC_GPIO_PORT, 0, SDA_PIN)
- /*****************************************************************************
- * Private functions
- ****************************************************************************/
- /*****************************************************************************
- * Public functions
- ****************************************************************************/
-
- void I2C_GPIO_Config(void)
- {
-
- /* Enable the clock to the Switch Matrix */
- Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
-
- Chip_SWM_DisableFixedPin(SWM_FIXED_I2C0_SDA);
- Chip_SWM_DisableFixedPin(SWM_FIXED_I2C0_SCL);
-
- /* Disable the clock to the Switch Matrix to save power */
- Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
-
- Chip_GPIO_Init(LPC_GPIO_PORT);
-
- Chip_IOCON_PinSetOpenDrainMode(LPC_IOCON, IOCON_SCL, true);
- Chip_IOCON_PinSetOpenDrainMode(LPC_IOCON, IOCON_SDA, true);
-
- SCL_H;
- SDA_H;
-
- Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, SCL_PIN, OUTPUT);
- Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, SDA_PIN, INPUT);
-
- }
- // 扫描键值
- uint16_t KeyScanValueEx(void)
- {
- uint8_t i, j;
- uint16_t keyData = 0x00; // = PIND;
- //
- SDA_H;
- // 有键按下,取键值
- for ( i = 0; i < 16; i++ )
- {
- SCL_L;
- delay_us(10); // 10us
- // 取数据
- if ( SDA_read )
- {
- keyData += 0<<i;
- // break;
- }
- else
- {
- keyData += 1<<i;
- }
- SCL_H;
- delay_us(10); // 10us
- }
- SCL_H;
- return keyData;
- }
复制代码
附上一张TTP229B模块原理图。(原理图文件附上,
TTP229B sch.rar
(86.04 KB, 下载次数: 64)
|
|