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;
}
}