单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验 

 

 

 十一长假在家快烂了,没事儿做,DIY技术搞起来!


 【关于12C增强型单片机I/O口的工作类型实验研究】

 

文中动画视频效果下载: STC单片机头文件【51CTO-->单片机-->LED感应亮灭实验】

下载链接 链接:http://pan.baidu.com/s/1pJKK4w7   密码:a0re

   



 1、用强推模式,点亮一个LED 

 

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:无要求
功能:用强推模式,点亮一个LED
连接说明:LED正极串接1K 电阻接P1 ^ 7,负极接到 MCU的P1 ^ 6
      对应的P1口  7654 3210
	P1M0 = 0x00; -->0000 0000
	P1M1 = 0xC0; -->1100 0000
P1^7,P1^6都设置为强推模式,可提供20ma的上拉电流

*/
#include <STC12C2052AD.H>
sbit LED1 = P1 ^ 7;
sbit LED2 = P1 ^ 6;
void main (void) {
  P1M0 = 0x00;P1M1 = 0xC0; 
  	LED1=1;
    LED2=0;
}



2、高阻模式,不输出电流

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:无要求
功能:高阻模式,不输出电流
连接说明:LED正极串接1K 电阻接P1 ^ 7,负极接到 MCU的P1 ^ 6
      对应的P1口  7654 3210
	P1M0 = 0xC0; -->1100 0000
	P1M1 = 0x00; -->0000 0000


*/
#include <STC12C2052AD.H>
sbit LED1 = P1 ^ 7;
sbit LED2 = P1 ^ 6;
void main (void) {
  P1M0 = 0xC0;P1M1 = 0x00; 
  	LED1=1;
    LED2=0;
}



3、高阻模式,LED感应亮灭

wKiom1YM54PhpTmeAArB8raNku0170.jpg

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:无要求
功能:高阻模式,手指距离P3^7 2毫米远,LED感应亮灭,不需要手去碰到P3^7脚

连接说明:LED正极串接1K 电阻接VCC,负极接到 MCU的P1 ^ 7

供电说明:电脑的USB干扰要比移动电源的干扰要大,使用电脑USB与移动电源供电,效果对比明显!
*/

#include <STC12C2052AD.H>
sbit LED = P1^7;
sbit KEY = P3^7;

void main (void) {
   P3M0 = 0x80;P3M1 = 0x00;	//高阻
   LED=1; // LED = P1^7; 无需设定KEY的状态,因为不会被输出!


	while (1)
	{
		LED=~KEY;
	}

}








4、高阻模式,调整LED灯的感应距离


先放测试图!

// 电脑USB供电,测试报告:

// 分别调为 DELAY_MS 6 4  不用碰,周围干扰的就触发LED亮

看下图!


wKioL1YM6GeQVKAsABNaAXte55s867.gif


// 分别调为 DELAY_MS 7 3  隔离2厘米 LED亮

看下图!


wKiom1YM6VvDApRPAA6MnL0I1AQ490.gif


// 分别调为 DELAY_MS 8     2  隔离2毫米 LED亮

看下图!

wKioL1YM6e_hRUNfABlBdvQOYbs349.gif






// 分别调为 DELAY_MS 9 1  需要触摸引脚才亮

wKiom1YM6iiQD3MGABsoOtIfQ1o520.gif




上图感应灯,调整LED灯的感应距离 源代码!

/*
工程创建MCU选取,Atmel 89C55
单片机:STC12C4052AD
晶振:无要求
功能:高阻模式,手指距离P3^7 2毫米远,LED感应亮灭,不需要手去碰到P3^7脚

连接说明:LED正极串接1K 电阻接VCC,负极接到 MCU的P1 ^ 7

供电说明:电脑的USB干扰要比移动电源的干扰要大,使用电脑USB与移动电源供电,效果对比明显!
*/

#include <STC12C2052AD.H>
sbit LED = P1^7;
sbit KEY = P3^7;
 
void DELAY_MS (unsigned int a) {
    unsigned int i;
    while ( --a != 0 )  {
        for (i=0;i<=600;i++);
    }
}

void main (void) {
  P1M0 = 0x00;P1M1 = 0x00;  //普通
  P3M0 = 0x80;P3M1 = 0x00;	//高阻
 	LED=1;// LED = P1^7; 无需设定KEY的状态,因为不会被输出!
  KEY=0;// 始终拉低

	
	//调整感应灵敏度,从距离两厘米到必须触碰到引脚,LED感应灯亮
	while (1)	{
		P3M0 = 0x00;
		DELAY_MS(6);  
		P3M0 = 0x80;
	  DELAY_MS(4);		
		LED=~KEY;
		
	}

}
// 电脑USB供电,测试报告:
// 分别调为 DELAY_MS 6 4  不用碰,周围干扰的就触发LED亮
// 分别调为 DELAY_MS 7 3  隔离2厘米 LED亮
// 分别调为 DELAY_MS 8 2  隔离2毫米 LED亮
// 分别调为 DELAY_MS 9 1  需要触摸引脚才亮


【禁止转载!】