51 マイクロコントローラーは I/O ポートのハイインピーダンス状態を使用して LED ライトのタッチ制御を実現します

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

}
タッチライト効果

ここに画像の説明を挿入します

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/m0_38039437/article/details/134585185