51 마이크로 컨트롤러는 I/O 포트의 고임피던스 상태를 사용하여 LED 조명의 터치 제어를 실현합니다.
1. 개요
이 기사에서는 I/O 포트의 높은 임피던스 상태를 사용하여 터치 제어 LED 조명을 구현하는 실험을 소개합니다. 이 실험에서는 손이 P3.7 핀을 터치하고 레벨 신호를 변경하여 조명을 켜고 끄는 것을 제어합니다.
2. 실험과정
2.1.실험재료
이름 | 모델 | 수량 |
---|---|---|
마이크로컨트롤러 | STC12C2052 | 1 |
LED 랜턴 | 없음 | 1 |
수정 발진기 | 12MHZ | 1 |
정전 용량 | 30pf | 2 |
저항 | 100옴 | 1 |
브레드보드 | 없음 | 1 |
연결선 | 없음 | 5 |
2.2 회로 원리
P3.7 인터페이스의 표시등을 P1.7 인터페이스에 연결하고 회로도에 따라 다른 인터페이스를 연결하십시오.
2.3 실험절차
/*************************************************************
* 程序名: IO口高阻模式实现触控控制LED灯
* 编写人: bruce
* 硬件支持:STC12C2052
* 日 期: 2023-11-23
* 修改日志:
/*************************************************************/
#include<STC12C2052AD.H>
// 定义P1.3 和 P1.2接口
sbit LED1 = P1^7;
sbit KEY = P3^7;
void main(void){
//设置P1接口为准双口模式
P1M0 = 0X00;
P1M1 = 0X00;
//设置P3.7接口为高阻模式
P3M0 = 0X80;
P3M1 = 0X00;
// 定义接口高电平
LED1 = 1;
while(1){
LED1 = ~KEY;
}
}
P3.7 인터페이스에 손가락을 대면 표시등이 켜지고 떠나면 꺼집니다. 그러나 실제 사용에서는 손가락이 P3.7 인터페이스에 닿기 전에 조명이 켜지는데 이는 간섭으로 인해 발생합니다. 아래에 최적화되어 있습니다.
- 먼저 P3.7을 준이중 포트 + 지연으로 설정하여 P3.7을 건드리지 않고 낮은 수준의 제어 표시등이 켜지는 것을 방지합니다. 손이 P3.7에 닿기 시작하면 인터페이스는 준이중 포트에 있고 간섭 전류를 GND로 끌어와 간섭의 일부를 제거할 수 있는 출력 기능이 있습니다.
- P3.7을 고임피던스 상태로 설정할 때 지연을 추가하여 일부 간섭을 다시 제거하십시오.
- 최적화 후에는 이전보다 훨씬 안정적이며, 손가락이 P3.7 및 P1.0 핀에 닿을 때만 LED 표시등이 켜집니다.
/*************************************************************
* 程序名: IO口高阻模式实现触控控制LED灯
* 编写人: bruce
* 硬件支持:STC12C2052
* 日 期: 2023-11-23
* 修改日志:
/*************************************************************/
#include<STC12C2052AD.H>
// 定义P1.3 和 P1.2接口
sbit LED1 = P1^7;
sbit KEY = P3^7;
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
void main(void){
//设置P1接口为准双口模式
P1M0 = 0X00;
P1M1 = 0X00;
//设置P3.7接口为高阻模式
P3M0 = 0X80;
P3M1 = 0X00;
//初始化高低电平
LED1 = 1;
KEY = 0;
while(1){
//当手靠近还未触摸到P3.7引脚,感应到微电流后就会改变状态使控制灯的开关不稳定。
//设置为准双口,+ 延迟 过滤微电流影响触摸不稳定现象。
P3M0 = 0X00;
DELAY_MS(2);
P3M0 = 0X80;
DELAY_MS(2);
LED1 = ~KEY;
}
}