本帖最后由 wangku001wei 于 2012-9-24 20:05 编辑
注意 仅仅是简单分析哦
组件的原理及使用还在研究中
首先看原理图 可见接近传感器也是使用了CapSense组件
注意 由于我们在配置对话框的General选项卡中选择了 IDAC disable,use external Rb
在具体引脚配置中 出现了 sCmod 和 sRb0
在Proximity Sensors 中添加了Sensor Name (Proximity)
在具体引脚配置中 出现了 PROX_Promimity_0
LED灯的配置和之前的Proximity Sensor基本相同 只是这次是用8个寄存器各自独立的控制一个LED灯 PdPort_LSB 对应P2口的P2[3:0]控制 dPort_MSB 对应P4口的P4[3:0]控制 同样的,反向是因为电路设计为低电平点亮LED,高电平熄灭LED
代码分析 /******************************************************************************************* * 主函数的功能: * 1: 关闭所有的LED * 2: 启动电容感应组件 * 3: 查看接近传感器并报告信号强度 * 4: 根据手指接近传感器的程度点亮对应数量的LED灯 /******************************************************************************************/ /* 存储位置信号值的数组*/ extern uint8 CapSenseProximity_CSHL_SlotSignal[(CapSenseProximity_TOTAL_SCANSLOT_COUNT - CapSenseProximity_TOTAL_GENERIC_SCANSLOT_COUNT)];
void main() { uint8 Sensitivity = 15; uint8 tempVar = 0; uint8 LedData = 0; uint8 ProximitySignal = 0; uint16 i = 0;
/* 使能全局中断 */ CYGlobalIntEnable; /* 关闭LED灯 */ LED_Control_Reg_Write(LedData); /* 启动并且初始化电容接近感应传感器 */ CapSenseProximity_Start(); /* 初始化基线 */ CapSenseProximity_CSHL_InitializeSlotBaseline(CapSenseProximity_CSHL_PROX_PROXIMITY);
while(1) { /* 在读取信号之前进行短暂的延时 以便降低LED的更新速度 */ for(i = 0; i <= 10000; i++); /* 扫描并更新基线 */ CapSenseProximity_CSD_ScanSlot(CapSenseProximity_CSHL_PROX_PROXIMITY); CapSenseProximity_CSHL_UpdateSlotBaseline(CapSenseProximity_CSHL_PROX_PROXIMITY);
/* 判断传感器是否激活 */ LedData=0; if(CapSenseProximity_CSHL_CheckIsSlotActive(CapSenseProximity_CSHL_PROX_PROXIMITY)) { /* 读取当前传感器值 */ ProximitySignal = (uint8)CapSenseProximity_CSHL_SlotSignal[CapSenseProximity_CSHL_PROX_PROXIMITY]; /* 根据信号值计算需要点亮的LED */ tempVar = ProximitySignal / Sensitivity; for(i = 1 ; i <= tempVar ; i++) { LedData = LedData << 1; LedData = LedData | 1; } } /* 更新LED灯状态*/ LED_Control_Reg_Write(LedData); } }
CapSense组件的使用 可参考帮助文档 在配置对话框框中 单击Data Sheet即可出现一个PDF
由于只是针对代码的简单分析 对组件的使用还不是很了解 接下来准备阅读ADC 和 CapSense 组件的说明文档 |