Teknologian jakaminen

51 mikrokontrolleriin sulautettu kehitys: 5. Painike, matriisipainikkeen toiminta ja protues-simulaatio

2024-07-12

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


提示

1 Painikkeen esittely

1.1 Avaintyypit

Avain on painike tai kytkin, jota käytetään ohjaamaan elektronisen laitteen tai piirin kytkemistä ja irrottamista. Niillä on yleensä kaksi tilaa: avoin ja suljettu. Seuraavassa on johdanto joihinkin yleisiin kytkinpainikkeisiin:

  1. Painikekytkin: Tämä on yksinkertainen painike, joka yhdistää piirin painettaessa ja katkaisee piirin, kun se vapautetaan. Niitä käytetään usein ohjaamaan laitteen päälle/pois-kytkintä tai käynnistämään tietty toiminto.
  2. Vipukytkin: Vipukytkin on kytkin, jossa on kiinteä asento ja joka voidaan kytkeä manuaalisesti. Niissä on yleensä kaksi tai useampia kiinteää asentoa (kuten auki ja kiinni), ja kytkimen asennon vaihtaminen kytkee tai katkaisee piirin.
  3. Liukukytkin: Liukukytkin on kytkin, joka muuttaa tilaa liu'uttamalla painiketta. Niissä on yleensä kaksi asentoa, ja piiri kytketään tai irrotetaan liu'uttamalla liukusäädintä asennosta toiseen.
  4. Vaihtokytkin: Vaihtokytkin on kytkin, joka muuttaa tilaa kääntämällä painiketta. Niissä on yleensä keskiasento ja kaksi ääriasentoa, jolloin piiri kytketään tai irrotetaan kääntämällä painiketta asennosta toiseen.
  5. Painikekytkin: Painikekytkin on samanlainen kuin painokytkin, mutta siinä on yleensä jousimekanismi, joka palaa automaattisesti alkuperäiseen asentoonsa, kun painike vapautetaan. Niitä käytetään usein sovelluksissa, joissa joudut pitämään painiketta painettuna yhteyden ylläpitämiseksi ja vapauttamaan painikkeen piirin katkaisemiseksi.
  6. Elektroninen kytkin: Elektroninen kytkin on kytkin, joka käyttää elektronisia komponentteja (kuten transistoreita tai releitä) ohjaamaan piirin kytkemistä ja irrottamista.Ne voivat ohjata kytkentätilaa sähköisten signaalien tai muiden laukaisumenetelmien avulla

1.2 Painikkeiden käyttöskenaariot

Jotkut mekaanisten painikkeiden sovellusskenaariot:

  1. Tietokoneen näppäimistö: Mekaanisia näppäimistöjä käytetään laajalti tietokonealalla. Koska mekaaniset näppäimet tarjoavat paremman kosketustuntuman ja näppäinten liikkumisen, kirjoitus- ja pelikokemus on mukavampi ja tarkempi.
  2. Pelilaitteet: Mekaanisia näppäimiä käytetään laajalti pelikonsoleissa, peliohjaimissa ja pelien mekaanisissa näppäimistöissä. Mekaanisten painikkeiden kosketuspalaute ja nopea vasteaika auttavat parantamaan pelin ohjauksen suorituskykyä.
  3. Teollisuuden ohjauslaitteet: Mekaaniset painikkeet ovat vahvasti kestäviä ja sopivat skenaarioihin, jotka vaativat toistuvaa toimintaa teollisissa ohjauslaitteissa, kuten mekaanisissa ohjauspaneeleissa, robottikonsoleissa jne.
  4. Viestintälaitteet: Mekaanisia painikkeita voidaan käyttää viestintälaitteissa, kuten matkapuhelimissa, puhelimissa ja radiopuhelimissa paremman painikkeiden kosketuksen ja luotettavuuden parantamiseksi.
  5. Äänilaitteet: Mekaanisia näppäimiä käytetään laajalti äänilaitteissa, kuten miksereissä, äänen ohjauspaneeleissa, koskettimistoissa jne.
  6. Lääketieteelliset laitteet: Mekaanisia painikkeita käytetään yleisesti lääketieteellisissä laitteissa, kuten lääketieteellisissä instrumenteissa, leikkauspöydän ohjauspaneeleissa jne. Mekaanisten painikkeiden vakaus ja luotettavuus ovat ratkaisevan tärkeitä lääketieteellisten laitteiden normaalille toiminnalle.
  7. Auto- ja ilmailulaitteet: Mekaanisia painikkeita voidaan käyttää autojen ohjauspaneeleissa, lentokoneiden kojepaneeleissa ja muissa tilanteissa, jotka vaativat suurta luotettavuutta ja kestävyyttä.
    Mekaanisten avainten kestävyys, tuntuma ja luotettavuus tekevät niistä suosituimman valinnan monilla alueilla. Mekaanisia painikkeita käytetään laajasti monissa sovellusskenaarioissa riippumatta siitä, halutaanpa parantaa työn tehokkuutta tai tarjota parempi käyttökokemus.

2 napin piiri

Kehityslevyn näppäinpiirin kaavio on seuraava.

Lisää kuvan kuvaus tähän

Kehityslevyn todelliset painikkeet ovat kuvan mukaiset
Lisää kuvan kuvaus tähän

Lisää kuvan kuvaus tähän

3 Painikeohjelmiston suunnittelu

3.1 Painikkeen toteutus

Ensin toteutamme itsenäiset painikkeet. Käytä hyppysuojusta J11:n ja 2.3:n oikosulkemiseen, jotta 0/4/8/C-painikkeita voidaan käyttää itsenäisesti.
1. Ohjelmistosuunnittelu, luomme kaksi uutta tiedostoa, c51_key.c ja c51_key.h, lisäämme include.h:n tiedostoon c51_key.c, lisäämme c51_key.h tiedostoon include.h ja lisäämme kaksi tiedostoa projektiin kuvan osoittamalla tavalla.

Lisää kuvan kuvaus tähän

Koska haluamme näyttää painikkeen arvon, käytämme etuosan digitaalista putkea tietojen näyttämiseen.
Näyttötoiminto on esitetty alla.

/********************************************************
函数名称: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

Toteuta avainten tunnistus tiedostossa 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

Lainattu pääohjelman pääosassa:

#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 Painikesuodatusmenetelmä

/********************************************************
函数名称: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-painikeohjelmiston suunnittelu

//Näytä segmentin koodin arvo 01234567, jota voidaan tarkastella kaavion mukaisesti ja näyttää pin high point -tason konfigurointitilan, joka vastaa eri grafiikkaa.

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 -simulaatio

Itsenäinen painike tuloksen näyttämiseksi, DIP-kytkin, liitä painikkeen toinen pää maahan

Lisää kuvan kuvaus tähän

Matriisinäppäimistön näppäinsimulaatio:Lisää kuvan kuvaus tähän

4 Yhteenveto tärkeimmistä toiminnoista

Mikrokontrollerisovelluksissa avainten tunnistuksen luotettavuussuunnittelu on ratkaisevan tärkeää oikean syötteen ja vakaan järjestelmän toiminnan varmistamiseksi. Tässä on joitain suunnitteluperiaatteita avainten havaitsemisen luotettavuuden parantamiseksi:

  1. Poista näppäinvärinä: Näppäinvärinä viittaa lyhytaikaiseen epävakaaseen signaaliin, joka syntyy, kun painiketta painetaan tai vapautetaan. Värinän poistamiseksi voidaan käyttää laitteiston tai ohjelmiston värinänpoistomenetelmiä. Laitteistopuolella voidaan käyttää ulkoisia kondensaattoreita tai RC-verkkoja värinän suodattamiseen. Ohjelmiston osalta ohjelmistoviiveitä tai tilakoneita voidaan käyttää avainsignaalien vakauttamiseksi.
  2. Käytä ulkoisia ylös-/alasvetovastuksia: Käyttämällä ulkoista ylös- tai alasvetovastusta, joka on kytketty näppäintappiin, voit varmistaa, että avain pysyy vakaana, kun sitä ei paineta. Tämä estää kelluvat signaalit, kun näppäimiä ei paineta.
  3. Viive- ja debounce-algoritmit: Asianmukaisten viive- ja virhealgoritmien käyttöönotto ohjelmistossa voi parantaa näppäinpainalluksen tunnistuksen luotettavuutta. Viive voi varmistaa vakaan avaimen tilan ja välttää väärän liipaisun. Debounce-algoritmi voi suodattaa pois näppäinpainalluksen värinän varmistaakseen, että vain kelvolliset näppäinpainallukset havaitaan.
  4. Useita tunnistuksia ja vahvistuksia: Luotettavuuden parantamiseksi voidaan käyttää useita avainten tunnistus- ja vahvistusmekanismeja. Esimerkiksi ohjelmistoajastinta tai keskeytystä voidaan käyttää ajoittain havaitsemaan avaimen tila, ja useiden vahvistusten avulla voidaan varmistaa avaimen tehokas laukaisu.
  5. Syöttöpuskurit ja tilakoneet: Käytä syöttöpuskureita näppäinpainalluksen syötteen tallentamiseen ja käytä sitten tilakonetta syötteen käsittelemiseen. Tilakone voi seurata avainten tilaa ja käsitellä avaintapahtumia varmistaakseen avaintoimintojen oikeellisuuden ja vakauden.
  6. Virtalähteen ja maadoitusjohdon häiriöeristys: Jotta estetään virtalähteen häiriön ja maadoitusjohdon paluuvaikutus avainsignaaliin, voidaan ryhtyä asianmukaisiin eristystoimenpiteisiin. Käytä esimerkiksi erillisiä teho- ja maatasoja tai käytä suodattimia häiriöiden vähentämiseksi.
  7. Laitteiston ja ohjelmiston vikasietomekanismit: Suunnittele vikasietomekanismit suojaamaan avainsyötteen luotettavuutta virheiden tai epänormaalien ilmetessä. Voidaan käyttää esimerkiksi redundanssin havaitsemista, tarkistussumman havaitsemista, virheenkäsittely- ja palautusmekanismeja jne.
    Yleensä luotettavassa avainten havaitsemissuunnittelussa on otettava kattavasti huomioon laitteiston ja ohjelmiston eri tekijät ja tehtävä asianmukaiset optimoinnit ja säädöt tiettyjen sovellusskenaarioiden mukaan. Oikealla suunnittelulla ja toteutuksella voidaan varmistaa avainten vakaus, tarkkuus ja luotettavuus.