Κοινή χρήση τεχνολογίας

51 ανάπτυξη ενσωματωμένου μικροελεγκτή: 5. Λειτουργία κουμπιού, κουμπιού μήτρας και προσομοίωση προεξοχών

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


提示

1 Εισαγωγή κουμπιού

1.1 Τύποι κλειδιών

Το κλειδί είναι ένα κουμπί ή διακόπτης που χρησιμοποιείται για τον έλεγχο της σύνδεσης και της αποσύνδεσης μιας ηλεκτρονικής συσκευής ή κυκλώματος. Συνήθως έχουν δύο καταστάσεις: ανοιχτό και κλειστό. Ακολουθεί μια εισαγωγή σε ορισμένα κοινά κουμπιά διακόπτη:

  1. Διακόπτης κουμπιού: Αυτό είναι ένα απλό κουμπί που συνδέει ένα κύκλωμα όταν πατηθεί και διακόπτει το κύκλωμα όταν απελευθερωθεί. Συχνά χρησιμοποιούνται για τον έλεγχο του διακόπτη on/off μιας συσκευής ή για την ενεργοποίηση μιας συγκεκριμένης λειτουργίας.
  2. Διακόπτης εναλλαγής: Ένας διακόπτης εναλλαγής είναι ένας διακόπτης με σταθερή θέση που μπορεί να αλλάξει χειροκίνητα. Συνήθως έχουν δύο ή περισσότερες σταθερές θέσεις (όπως ανοιχτή και κλειστή) και η αλλαγή της θέσης του διακόπτη συνδέει ή αποσυνδέει ένα κύκλωμα.
  3. Slide Switch: Ο συρόμενος διακόπτης είναι ένας διακόπτης που αλλάζει κατάσταση σύροντας ένα κουμπί. Συνήθως έχουν δύο θέσεις και το κύκλωμα συνδέεται ή αποσυνδέεται σύροντας το ρυθμιστικό από τη μια θέση στην άλλη.
  4. Διακόπτης εναλλαγής: Ένας διακόπτης εναλλαγής είναι ένας διακόπτης που αλλάζει κατάσταση γυρίζοντας ένα κουμπί. Συνήθως έχουν μια μεσαία θέση και δύο ακραίες θέσεις, με το κύκλωμα να συνδέεται ή να αποσυνδέεται γυρίζοντας το κουμπί από τη μια θέση στην άλλη.
  5. Διακόπτης κουμπιού: Ένας διακόπτης κουμπιού είναι παρόμοιος με έναν διακόπτη ώθησης, αλλά συνήθως έχει έναν μηχανισμό ελατηρίου που επιστρέφει αυτόματα στην αρχική του θέση όταν αφήσετε το κουμπί. Συχνά χρησιμοποιούνται σε εφαρμογές όπου πρέπει να κρατήσετε πατημένο ένα κουμπί για να διατηρήσετε μια σύνδεση και να αφήσετε το κουμπί για να σπάσει το κύκλωμα.
  6. Ηλεκτρονικός διακόπτης: Ένας ηλεκτρονικός διακόπτης είναι ένας διακόπτης που χρησιμοποιεί ηλεκτρονικά εξαρτήματα (όπως τρανζίστορ ή ρελέ) για τον έλεγχο της σύνδεσης και της αποσύνδεσης ενός κυκλώματος.Μπορούν να ελέγχουν την κατάσταση μεταγωγής μέσω ηλεκτρικών σημάτων ή άλλων μεθόδων ενεργοποίησης

1.2 Σενάρια εφαρμογής κουμπιών

Μερικά σενάρια εφαρμογής μηχανικών κουμπιών:

  1. Πληκτρολόγιο υπολογιστή: Τα μηχανικά πληκτρολόγια χρησιμοποιούνται ευρέως στον τομέα των υπολογιστών. Επειδή τα μηχανικά πλήκτρα παρέχουν καλύτερη αίσθηση αφής και μετακίνηση των πλήκτρων, η εμπειρία πληκτρολόγησης και παιχνιδιού είναι πιο άνετη και ακριβής.
  2. Εξοπλισμός παιχνιδιού: Τα μηχανικά πλήκτρα χρησιμοποιούνται ευρέως σε κονσόλες παιχνιδιών, χειριστήρια παιχνιδιών και μηχανικά πληκτρολόγια παιχνιδιών. Η απτική ανάδραση και ο γρήγορος χρόνος απόκρισης των μηχανικών κουμπιών συμβάλλουν στη βελτίωση της απόδοσης ελέγχου του παιχνιδιού.
  3. Βιομηχανικός εξοπλισμός ελέγχου: Τα μηχανικά κουμπιά έχουν ισχυρή αντοχή και είναι κατάλληλα για σενάρια που απαιτούν συχνές λειτουργίες σε εξοπλισμό βιομηχανικού ελέγχου, όπως μηχανικούς πίνακες ελέγχου, κονσόλες ρομπότ κ.λπ.
  4. Εξοπλισμός επικοινωνίας: Τα μηχανικά κουμπιά μπορούν να χρησιμοποιηθούν σε εξοπλισμό επικοινωνίας, όπως κινητά τηλέφωνα, τηλέφωνα και φορητά ραδιοτηλέφωνα για να παρέχουν καλύτερο άγγιγμα κουμπιών και αξιοπιστία.
  5. Εξοπλισμός ήχου: Τα μηχανικά πλήκτρα χρησιμοποιούνται ευρέως σε εξοπλισμό ήχου, όπως μίκτες, πίνακες ελέγχου ήχου, πληκτρολόγια μουσικής κ.λπ.
  6. Ιατρικός εξοπλισμός: Τα μηχανικά κουμπιά χρησιμοποιούνται συνήθως σε ιατρικό εξοπλισμό, όπως ιατρικά όργανα, πίνακες ελέγχου χειρουργικού τραπεζιού κ.λπ. Η σταθερότητα και η αξιοπιστία των μηχανικών κουμπιών είναι ζωτικής σημασίας για την κανονική λειτουργία του ιατρικού εξοπλισμού.
  7. Εξοπλισμός αυτοκινήτου και αεροπορίας: Τα μηχανικά κουμπιά μπορούν να χρησιμοποιηθούν σε πίνακες ελέγχου αυτοκινήτων, πίνακες οργάνων αεροσκαφών και άλλα σενάρια που απαιτούν υψηλή αξιοπιστία και ανθεκτικότητα.
    Η ανθεκτικότητα, η αίσθηση και η αξιοπιστία των μηχανικών πλήκτρων τα καθιστούν την προτιμώμενη επιλογή σε πολλούς τομείς. Είτε για τη βελτίωση της απόδοσης εργασίας είτε για την παροχή καλύτερης εμπειρίας χρήστη, τα μηχανικά κουμπιά χρησιμοποιούνται ευρέως σε πολλά σενάρια εφαρμογών.

Κύκλωμα 2 κουμπιών

Το σχηματικό διάγραμμα του κυκλώματος του κλειδιού στην πλακέτα ανάπτυξης είναι το ακόλουθο για τον έλεγχο του εάν τα κουμπιά 0/4/8/ βρίσκονται στο πληκτρολόγιο matrix ή ανεξάρτητα πλήκτρα.

Εισαγάγετε την περιγραφή της εικόνας εδώ

Τα πραγματικά κουμπιά του πίνακα ανάπτυξης είναι όπως φαίνεται στο σχήμα
Εισαγάγετε την περιγραφή της εικόνας εδώ

Εισαγάγετε την περιγραφή της εικόνας εδώ

Σχεδιασμός λογισμικού 3 κουμπιών

3.1 Εφαρμογή κουμπιού

Αρχικά, εφαρμόζουμε ανεξάρτητα κουμπιά Χρησιμοποιήστε ένα καπάκι για βραχυκύκλωμα J11 και 2.3, έτσι ώστε τα κουμπιά 0/4/8/C να μπορούν να χρησιμοποιηθούν ανεξάρτητα.
1. Μηχανική λογισμικού, δημιουργούμε δύο νέα αρχεία, τα c51_key.c και c51_key.h, εφαρμόζουμε το include.h στο c51_key.c, συμπεριλαμβάνουμε το c51_key.h στο include.h και προσθέτουμε τα δύο αρχεία στο έργο όπως φαίνεται στην εικόνα.

Εισαγάγετε την περιγραφή της εικόνας εδώ

Επειδή θέλουμε να εμφανίσουμε την τιμή του κουμπιού, χρησιμοποιούμε τον μπροστινό ψηφιακό σωλήνα για να εμφανίσουμε τα δεδομένα.
Η λειτουργία εμφάνισης φαίνεται παρακάτω.

/********************************************************
函数名称:sys_keynum_ledon
函数功能:显示按键数值
入口参数:按键数值
出口参数:
修    改:
内    容:
********************************************************/
void sys_keynum_ledon(unsigned char num)
{
	//根据原理图,将P0口全部输出高电平,P2选择0号数码管
	P0=EL[num];//取显示数据,段码
	P2=0;  	//取位码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Στο c51_key.c, εφαρμόστε την ανίχνευση κλειδιού

bit key1=0;   //定义按键位置
bit key2=0;
bit key3=0;
bit key4=0;


/********************************************************
函数名称:sys_key_single
函数功能:按键检测
入口参数:
出口参数:按键数值
修    改:
内    容:
********************************************************/
static unsigned char key1_history = 0;//缓存上一次按键的结果
unsigned char sys_key_single(void)
{
	key1=P30;   //定义按键位置
	key2=P31;
	key3=P32;
	key4=P33;

	if(!key1)  //按下相应的按键,数码管显示相应的码值
	{
		key1_history = 1;
		return 1;
	}
	else if(!key2)
	{
		key1_history = 2;
		return 2;
	}
	else if(!key3)
	{
		key1_history = 3;
		return 3;
	}
	else if(!key4)
	{
		key1_history = 4;
		return 4;
	}
	else
	{
		return key1_history;
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

Αναφέρεται στο κύριο πρόγραμμα:

#include "includes.h"



/*------------------------------------------------
                    延时子程序
------------------------------------------------*/
void delay(unsigned int cnt) 
{
 while(--cnt);
}

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
	//8个指示灯的操作
	sys_led();
	sys_led_test();
	sys_led_test1();
	
	sys_ledtube_on1();
	sys_ledtube_on2();
	
	//主循环中添加其他需要一直工作的程序
	while (1)
	{
		sys_keynum_ledon(sys_key_single());
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

3.2 Μέθοδος φιλτραρίσματος κουμπιών

/********************************************************
函数名称:sys_key_single
函数功能:按键检测,带有消抖策略
入口参数:
出口参数:按键数值
修    改:
内    容:
********************************************************/
static unsigned char key1_history = 0;//缓存上一次按键的结果
unsigned char sys_key_single(void)
{
	key1=P30;   //定义按键位置
	key2=P31;
	key3=P32;
	key4=P33;

	if(!key1)  //按下相应的按键,数码管显示相应的码值
	{
		delay(1000);
		if(!key1)
		{
			key1_history = 1;
			return 1;
		}
		else
		{
			return key1_history;
		}
	}
	else if(!key2)
	{
		delay(1000);
		if(!key2)
		{
			key1_history = 2;
			return 2;
		}
		else
		{
			return key1_history;
		}
	}
	else if(!key3)
	{
		delay(1000);
		if(!key3)
		{
			key1_history = 3;
			return 3;
		}
		else
		{
			return key1_history;
		}
	}
	else if(!key4)
	{
		delay(1000);
		if(!key4)
		{
			key1_history = 4;
			return 4;
		}
		else
		{
			return key1_history;
		}
	}
	else
	{
		return key1_history;
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

3.3 Σχεδιασμός λογισμικού κουμπιών Matrix

//Τιμή κωδικού τμήματος εμφάνισης 01234567, η οποία μπορεί να προβληθεί ανάλογα με το σχηματικό διάγραμμα και να εμφανίσει την κατάσταση διαμόρφωσης επιπέδου υψηλού σημείου της καρφίτσας που αντιστοιχεί σε διαφορετικά γραφικά.

unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
		                  	 0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
  • 1
  • 2
unsigned char sys_key_board(void)
{
	unsigned char key = 0x00;
	unsigned char num = 0x00;
	key=keyscan();  //调用键盘扫描
	if(key == 0xFF)
	{
		num = key1_history;
	}
	else
	{
		switch(key)
		{
			case 0xee:num = 0x0;break;//0按下相应的键显示相对应的码值
			case 0xde:num = 0x1;break;//1 按下相应的键显示相对应的码值 
			case 0xbe:num = 0x2;break;//2
			case 0x7e:num = 0x3;break;//3
			case 0xed:num = 0x4;break;//4
			case 0xdd:num = 0x5;break;//5
			case 0xbd:num = 0x6;break;//6
			case 0x7d:num = 0x7;break;//7
			case 0xeb:num = 0x8;break;//8
			case 0xdb:num = 0x9;break;//9
			case 0xbb:num = 0xA;break;//a
			case 0x7b:num = 0xB;break;//b
			case 0xe7:num = 0xC;break;//c
			case 0xd7:num = 0xD;break;//d
			case 0xb7:num = 0xE;break;//e
			case 0x77:num = 0xF;break;//f
			default:num = key1_history; break;
		}
		
		key1_history = num;
	}
	return num;
}


/*------------------------------------------------
              键盘扫描程序
------------------------------------------------*/
unsigned char keyscan(void)  //键盘扫描函数,使用行列反转扫描法
{
	unsigned char cord_h,cord_l;//行列值中间变量
	P3=0x0f;            //行线输出全为0
	cord_h=P3&0x0f;     //读入列线值
	if(cord_h!=0x0f)    //先检测有无按键按下
	{
		delay(100);        //去抖
		if(cord_h!=0x0f)
		{
			cord_h=P3&0x0f;  //读入列线值
			P3=cord_h|0xf0;  //输出当前列线值
			cord_l=P3&0xf0;  //读入行线值
			return(cord_h+cord_l);//键盘最后组合码值
		}
	}
	return(0xff);     //返回该值
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

3.4 Προσομοίωση Button Protues

Ανεξάρτητο κουμπί για την εμφάνιση του αποτελέσματος, διακόπτης DIP, συνδέστε το ένα άκρο του κουμπιού στη γείωση

Εισαγάγετε την περιγραφή της εικόνας εδώ

Προσομοίωση πληκτρολογίου Matrix:Εισαγάγετε την περιγραφή της εικόνας εδώ

4 Σύνοψη βασικών λειτουργιών

Σε εφαρμογές μικροελεγκτών, ο σχεδιασμός αξιοπιστίας της ανίχνευσης κλειδιού είναι ζωτικής σημασίας για τη διασφάλιση της σωστής εισαγωγής και της σταθερής λειτουργίας του συστήματος. Ακολουθούν ορισμένες αρχές σχεδιασμού για τη βελτίωση της αξιοπιστίας ανίχνευσης κλειδιού:

  1. Εξάλειψη τρεμούλιασης πλήκτρων: Το τρεμόπαιγμα πλήκτρων αναφέρεται στο σύντομο ασταθές σήμα που παράγεται όταν πατηθεί ή απελευθερωθεί ένα κουμπί. Για την εξάλειψη του jitter, μπορούν να χρησιμοποιηθούν μέθοδοι εξάλειψης του jitter υλικού ή λογισμικού. Από την πλευρά του υλικού, μπορούν να χρησιμοποιηθούν εξωτερικοί πυκνωτές ή δίκτυα RC για να φιλτράρουν το jitter. Όσον αφορά το λογισμικό, οι καθυστερήσεις λογισμικού ή οι μηχανές κατάστασης μπορούν να χρησιμοποιηθούν για τη σταθεροποίηση των βασικών σημάτων.
  2. Χρησιμοποιήστε εξωτερικές αντιστάσεις έλξης/κάτω: Χρησιμοποιώντας μια εξωτερική συρόμενη ή συρόμενη αντίσταση συνδεδεμένη στην ακίδα του κλειδιού, μπορείτε να διασφαλίσετε ότι το κλειδί παραμένει σταθερό όταν δεν πατιέται. Με αυτόν τον τρόπο αποτρέπονται τα αιωρούμενα σήματα όταν δεν πατηθούν τα πλήκτρα.
  3. Αλγόριθμοι καθυστέρησης και αναπήδησης: Η εφαρμογή κατάλληλων αλγορίθμων καθυστέρησης και αναπήδησης στο λογισμικό μπορεί να βελτιώσει την αξιοπιστία της ανίχνευσης πληκτρολόγησης. Η καθυστέρηση μπορεί να εξασφαλίσει σταθερή κατάσταση κλειδιού και να αποφύγει την εσφαλμένη ενεργοποίηση. Ο αλγόριθμος αναπήδησης μπορεί να φιλτράρει το jitter πίεσης πλήκτρων για να διασφαλίσει ότι ανιχνεύονται μόνο έγκυρες λειτουργίες πατήματος πλήκτρων.
  4. Πολλαπλός εντοπισμός και επιβεβαίωση: Για να βελτιωθεί η αξιοπιστία, μπορούν να χρησιμοποιηθούν μηχανισμοί ανίχνευσης και επιβεβαίωσης πολλαπλών κλειδιών. Για παράδειγμα, ένας χρονοδιακόπτης λογισμικού ή μια διακοπή μπορεί να χρησιμοποιηθεί για την περιοδική ανίχνευση της κατάστασης του κλειδιού και πολλαπλές επιβεβαιώσεις μπορούν να χρησιμοποιηθούν για να διασφαλιστεί η αποτελεσματική ενεργοποίηση του κλειδιού.
  5. Buffer εισόδου και μηχανές κατάστασης: Χρησιμοποιήστε buffer εισόδου για να αποθηκεύσετε την είσοδο πληκτρολόγησης και, στη συνέχεια, χρησιμοποιήστε μια μηχανή κατάστασης για να επεξεργαστείτε την είσοδο. Το μηχάνημα κατάστασης μπορεί να παρακολουθεί την κατάσταση του κλειδιού και να χειρίζεται βασικά συμβάντα για να εξασφαλίσει την ορθότητα και τη σταθερότητα των βασικών λειτουργιών.
  6. Απομόνωση παρεμβολών τροφοδοσίας και καλωδίου γείωσης: Για να αποφευχθεί η επίδραση παρεμβολών στο τροφοδοτικό και η επιστροφή του καλωδίου γείωσης στο σήμα κλειδιού, μπορούν να ληφθούν τα κατάλληλα μέτρα απομόνωσης. Για παράδειγμα, χρησιμοποιήστε ξεχωριστά επίπεδα ισχύος και γείωσης ή χρησιμοποιήστε φίλτρα για να μειώσετε τις παρεμβολές.
  7. Μηχανισμοί ανοχής σφαλμάτων για υλικό και λογισμικό: Σχεδιάστε μηχανισμούς ανοχής σφαλμάτων για να προστατεύσετε την αξιοπιστία της εισαγωγής κλειδιού όταν εμφανίζονται σφάλματα ή μη φυσιολογικές συνθήκες. Για παράδειγμα, μπορούν να χρησιμοποιηθούν μηχανισμοί ανίχνευσης πλεονασμού, ανίχνευσης αθροίσματος ελέγχου, χειρισμού σφαλμάτων και ανάκτησης κ.λπ.
    Γενικά, η αξιόπιστη σχεδίαση ανίχνευσης κλειδιού πρέπει να εξετάζει πλήρως διάφορους παράγοντες στο υλικό και το λογισμικό και να κάνει την κατάλληλη βελτιστοποίηση και προσαρμογές σύμφωνα με συγκεκριμένα σενάρια εφαρμογών. Μέσω του κατάλληλου σχεδιασμού και εφαρμογής, μπορεί να διασφαλιστεί η σταθερότητα, η ακρίβεια και η αξιοπιστία των κλειδιών.