在这个项目中,我们将触摸传感器与 8051 微控制器 AT89S52 连接。如果您是 8051 微控制器的新手,那么您可以从LED 闪烁开始 8051。
什么是电容式触摸传感器?
电容式触控作用于我们身体上可用的静电荷。屏幕已经充满了电场。当我们触摸屏幕时,由于流经我们身体的静电荷形成闭合电路。此外,软件决定要执行的位置和动作。电容式触摸屏不适用于手套,因为手指和屏幕之间不会有任何传导。
此项目中使用的触摸传感器
本项目使用的触摸传感器为电容式触摸传感器模块,传感器驱动基于驱动IC TTP223。IC TTP23的工作电压为 2.0V 至 5.5V ,触摸传感器的电流消耗非常低。由于价格低廉、电流消耗低且易于集成支持,采用 TTP223 的触摸传感器在其细分市场中广受欢迎。
在上图中,传感器的两侧都显示了引脚图清晰可见的位置。它还有一个焊接跳线,可用于根据输出重新配置传感器。跳线为 A 和 B。默认配置或在焊锡跳线的默认状态下,触摸传感器时输出由低变为高。但是,当设置跳线并重新配置传感器时,当触摸传感器检测到触摸时,输出会改变其状态。触摸传感器的灵敏度也可以通过改变电容来配置。
下图显示了不同跳线设置下的不同输出 -
对于这个项目,传感器将在出厂发布条件下可用的默认配置中使用。在这个项目中,触摸传感器将用于控制使用 AT89S52 微控制器的交流灯泡。
继电器与 8051 微控制器连接。继电器的引脚排列如下图所示 -
NO常开,NC常接。L1 和 L2 是 Relay 线圈的两个端子。未施加电压时,继电器关闭,POLE 与 NC 引脚连接。当电压施加在线圈端子上时,继电器的 L1 和 L2 接通,POLE 与 NO 连接。因此,可以通过改变继电器的操作状态来打开或关闭 POLE 和 NO 之间的连接。
所需材料
AT89S52 8051 微控制器
标准立方继电器 - 5V
11.592 MHz 晶振
33pF 电容器 - 2 个
2k电阻-1个
4.7k 电阻器 - 1 个
10uF电容
BC549B晶体管
TTP223 传感器
1N4007 二极管
带灯座的灯泡
面包板
5V供电,一个手机充电器即可工作。
很多跳线或 berg 线。
AT89S52 编程环境,带有 Programmer Kit 和带有编译器的 IDE
电路原理图
使用触摸传感器和 8051 控制光的示意图如下图所示,
晶体管用于打开或关闭继电器。触摸传感器与 AT89S52 微控制器单元相连。该电路是使用面包板构建的。
编程 Atmega AT89S52 微控制器
最后给出完整的 8051 代码。在这里,我们解释了代码的几个部分。如果您是 8051 微控制器的新手,那么首先学习如何对 8051 微控制器进行编程。
以下代码行用于将继电器和触摸传感器与 8051 微控制器集成。REGX52 是 AT89S52 微控制器单元的头文件。还声明了一个延迟函数。
#include
// RELAY Pin
sbit RELAY = P1^0; // 引脚 P1.0 被命名为 RELAY
// 触摸传感器引脚
sbit Touch = P1^1; // Pin P1.1 被命名为 Touch Sensor
//函数声明
void delay(char ms);
触摸和继电器初始化为 0。触摸传感器将逻辑 0 更改为 1。如果在激活触摸传感器时语句为真,则继电器的状态会发生变化。然而,为了准确检测触摸,使用了去抖动延迟。
// 主函数
void main(void)
{
继电器 = 0;
触摸 = 0;
while(1){
if (Touch == 1){
delay(15); // 去抖动延迟
if (Touch == 1){
RELAY = !RELAY; //切换继电器引脚
延迟(30);
}
}
}
}
下面,编写延迟函数。该函数以毫秒格式接受输入,并使用两个for循环生成延迟。这种延迟不太准确,但可以接受,主要取决于时钟周期时序。
/*延迟相关函数*/
void delay(char ms){
整数a,b;
对于(a=0;a<1295;a++){
对于 (b=0; b
这个触摸控制的灯电路在面包板上进行了测试,并连接了一个低功率灯泡。
/* 名称:touchsensor.c
* 目的:用于电路文摘。与 8051 (AT89S52) 连接的触摸传感器
*/
#include
// 继电器引脚
位继电器 = P1^0; // 引脚 P1.0 被命名为 RELAY
// 触摸传感器引脚
sbit 触摸 = P1^1; // Pin P1.1 被命名为 Touch Sensor
//函数声明
无效延迟(字符毫秒);
// 主功能
无效主要(无效)
{
继电器 = 0;
触摸 = 0;
而(1){
如果(触摸 == 1){
延迟(15);// 去抖动延迟
如果(触摸 == 1){
继电器=!继电器;// 切换继电器引脚
延迟(30);
}
}
}
}
/*延时相关函数*/
无效延迟(字符毫秒){
整数a,b;
对于(a=0;a<1295;a++){
对于 (b=0; b
}
}