51 Mikrocontroller-Tasten zum Ein- und Ausschalten des LED-Lichts. N Spielmöglichkeiten

51 Mikrocontroller-Tasten zum Ein- und Ausschalten des LED-Lichts. N Spielmöglichkeiten

1. Übersicht

In diesem Artikel wird die Verwendung von Tasten vorgestellt. Durch ein kleines Experiment zur Steuerung von LED-Leuchten werden Probleme mit den Tasten entdeckt und anschließend über diese Probleme nachgedacht und diese gelöst. Erwerben Sie Kenntnisse im Umgang mit Tastensteuerungskomponenten.

2. Erstellen Sie eine Hardwareumgebung

1.Hardware-Vorbereitung
Name Modell Menge
Mikrocontroller STC12C2052 1
LED-Laternen keiner 2
Kristalloszillator 12 MHz 1
Kapazität 30pf 2
Widerstand 100 Ohm 2
Steckbrett keiner 1
Verbindungslinie keiner 5
2. Schaltplan, schematisches Diagramm

Fügen Sie hier eine Bildbeschreibung ein

  • 1. Schließen Sie einen 100-Ohm-Widerstand in Reihe an den Pluspol der LED-Lampe an und verbinden Sie ihn mit Pin 20 VCC des Mikrocontrollers.
  • 2. Ein Ende des Verbindungskabels wird an Pin 12 des Mikrocontrollers angeschlossen, das andere Ende an einen Pin des Tasters.
  • 3. Der andere Pin des Tasters ist über ein Verbindungskabel mit Pin 10 GND des Mikrocontrollers verbunden.
  • 4. Die beiden Pins des Quarzoszillators sind jeweils mit den Pins 4 und 5 des Mikrocontrollers verbunden. Gleichzeitig ist jeder Pin des Quarzoszillators in Reihe mit einem 30pf-Kondensator mit Pin 10 des Mikrocontrollers, GND, verbunden.

Fügen Sie hier eine Bildbeschreibung ein

3. Experimentelle Themen

3.1. Wenn die Taste gedrückt wird, schaltet sich das Licht ein, und wenn die Taste losgelassen wird, geht das Licht aus.

1. Themenbeschreibung

Der Zweck des Projekts besteht darin, das Ein- und Ausschalten von LED-Leuchten mithilfe von Tasten zu steuern. Wenn die Taste gedrückt wird, wird ein niedriger Pegel abgelesen und das Licht schaltet sich ein. Wenn die Send-On-Taste einen hohen Pegel anzeigt, schaltet sich das Licht aus.

2. Implementieren Sie das Programm
/*************************************************************
* 程序名: 按键控制LED灯亮灭
* 编写人: bruce
* 硬件支持:TC12C2052 外部12MHZ晶振
* 日  期: 2023-11-14
* 修改日志: 
/*************************************************************/

#include<STC12C2052AD.H>

sbit LED = P1^7;
sbit KEY = P1^0;


void main(void){
    
    
	KEY = 1;
	LED = 1;

	while(1){
    
    
		/*
		使用if判断语句实现按下按键LED灯亮,
		松开按键LED灯灭
		*/

		/*
		if(KEY == 0){
			LED = 0;
		}else if(KEY == 1){
			LED = 1;
		}
		*/

		// 讨巧的方式实现按键控制灯亮灭
		LED = KEY;
		
	}

}

3.2. Lichtschalter zur Steuerung der Tastendrehung

1. Themenbeschreibung

Beim ersten Drücken und Loslassen der Taste wird das Licht eingeschaltet, beim zweiten Loslassen der Taste wird das Licht ausgeschaltet.

2. Implementieren Sie das Programm
/*************************************************************
* 程序名: 第一次按下按键LED灯亮,第二次按下按键LED灯灭,如此循环
* 编写人: bruce
* 硬件支持:TC12C2052 外部12MHZ晶振
* 日  期: 2023-11-14
* 修改日志: 
/*************************************************************/

#include<STC12C2052AD.H>

sbit LED = P1^7;
sbit KEY = P1^0;

/*********************************************************************************************
函数名:毫秒级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){
    
    
	KEY = 1;
	LED = 1;

	while(1){
    
    

		if(KEY == 0){
    
    
			/*
			DELAY_MS()延时函数的作用是去掉按下按键抖动造成信号不稳定,导致程序失灵。
			当按下按键后让程序稍等一会跳过按键抖动时刻,再读取按键状态达到去抖动效果。
		  */
			DELAY_MS(120);
			if(KEY == 0){
    
    
				//当按键为0时,判断当前灯的状态,并取反。实现轮训控制灯的开关。
				if(LED == 0){
    
    
					LED = 1;
				}else{
    
    
					LED = 0;
				}
				
			}
		}	
	}

}

Obwohl das obige Programm die Tastensteuerungsfunktion zum Ein- und Ausschalten des Lichts realisiert, weist es zwei Mängel auf und muss optimiert werden. Die Optimierungspunkte sind wie folgt

  • Die Einbettung von drei Ebenen von if-Urteilsanweisungen macht das Programm kompliziert und schwer lesbar.
  • Lediglich die Verzögerung wird zur Eliminierung von Tastenzittern verwendet und gelegentlich kann es zu Fehlfunktionen kommen.

Das folgende Programm hat diese beiden Punkte optimiert, um das Programm nächtlicher zu machen.

/*************************************************************
* 程序名: 第一次按下按键LED灯亮,第二次按下按键LED灯灭,如此循环
* 编写人: bruce
* 硬件支持:TC12C2052 外部12MHZ晶振
* 日  期: 2023-11-14
* 修改日志: 
/*************************************************************/

#include<STC12C2052AD.H>

sbit LED = P1^7;
sbit KEY = P1^0;

/*********************************************************************************************
函数名:毫秒级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){
    
    
	KEY = 1;
	LED = 1;

	while(1){
    
    

		if(KEY == 0){
    
    
			/*
			DELAY_MS()延时函数的作用是去掉按下按键抖动造成信号不稳定,导致程序失灵。
			当按下按键后让程序稍等一会跳过按键抖动时刻,再读取按键状态达到去抖动效果。
		  */
			DELAY_MS(120);
			if(KEY == 0){
    
    
				//当按键为0时,判断当前灯的状态,并取反。实现轮训控制灯的开关。
				LED = ~LED;
				//当按键按下没有松开时则一直做空循环,直到松开,while(1)才开始新的一轮循环。增强了按键控制灯的稳定性。
				while(KEY == 0);	
			}
		}	
	}

}

Supongo que te gusta

Origin blog.csdn.net/m0_38039437/article/details/134560671
Recomendado
Clasificación