प्रौद्योगिकी साझेदारी

51 microcontroller embedded development: 5. बटन, मैट्रिक्स बटन संचालन तथा protues अनुकरण

2024-07-12

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


提示

१ बटनपरिचयः

१.१ कीलप्रकाराः

कीलः इलेक्ट्रॉनिकयन्त्रस्य वा परिपथस्य वा संयोजनं विच्छेदनं च नियन्त्रयितुं प्रयुक्तं बटनं वा स्विचः वा । तेषां प्रायः द्वौ अवस्थाः भवतः - मुक्तः निमीलितः च । निम्नलिखितम् केषाञ्चन सामान्यस्विचबटनानाम् परिचयः अस्ति ।

  1. Push Button Switch: एतत् सरलं बटनं यत् दबावे सति परिपथं संयोजयति, मुक्तं कृत्वा परिपथं भङ्गयति च । प्रायः तेषां उपयोगः यन्त्रस्य चालू/बन्दस्विचस्य नियन्त्रणार्थं वा विशिष्टकार्यस्य प्रवर्तनार्थं वा भवति ।
  2. Toggle Switch: toggle switch इति नियतस्थानयुक्तः स्विचः यस्य हस्तचलितरूपेण स्विचः कर्तुं शक्यते । तेषां प्रायः द्वौ वा अधिकौ नियतस्थानौ (यथा मुक्तं निमीलितं च) भवति, स्विचस्य स्थानं स्विच् कृत्वा परिपथं संयोजयति वा विच्छिन्दति वा
  3. स्लाइड् स्विच् : स्लाइड् स्विच् इति स्विच् अस्ति यः बटन् स्लाइड् कृत्वा स्थितिं परिवर्तयति । तेषां प्रायः द्वौ स्थानौ भवतः, स्लाइडरं एकस्मात् स्थानात् अन्यस्मिन् स्थाने स्खलित्वा परिपथः संयोजितः वा विच्छिन्नः वा भवति ।
  4. Toggle Switch: toggle switch इति स्विचः यः बटनं परिवर्त्य स्थितिं परिवर्तयति । तेषां प्रायः मध्यमस्थानं, द्वौ चरमस्थानौ च भवति, यत्र एकस्मात् स्थानात् अन्यस्मिन् स्थाने बटनं प्लवमानं परिपथं संयोजितं वा विच्छिन्नं वा भवति
  5. बटन-स्विच् : पुश-बटन-स्विच् पुश-स्विच्-सदृशः भवति, परन्तु प्रायः तस्य वसन्त-तन्त्रं भवति यत् बटन्-विमोचनसमये स्वयमेव स्वस्य मूलस्थानं प्रति आगच्छति तेषां उपयोगः प्रायः तेषु अनुप्रयोगेषु भवति यत्र भवद्भिः संयोजनं निर्वाहयितुम् बटनं धारयितुं आवश्यकं भवति, परिपथं भङ्गयितुं च बटनं मुक्तं कर्तव्यम् ।
  6. इलेक्ट्रॉनिकस्विचः : इलेक्ट्रॉनिकस्विचः एकः स्विचः अस्ति यः विद्युत्घटकानाम् (यथा ट्रांजिस्टरः अथवा रिले) उपयोगं कृत्वा परिपथस्य संयोजनं विच्छेदनं च नियन्त्रयतिते विद्युत्संकेतैः अन्यैः उत्प्रेरकविधिभिः वा स्विचिंग् अवस्थां नियन्त्रयितुं शक्नुवन्ति

१.२ बटन-अनुप्रयोग-परिदृश्यानि

यांत्रिकबटनस्य केचन अनुप्रयोगपरिदृश्याः : १.

  1. सङ्गणकस्य कीबोर्डः : सङ्गणकक्षेत्रे यांत्रिककीबोर्डस्य बहुधा उपयोगः भवति । यतो हि यांत्रिककुंजीः उत्तमं स्पर्शभावं कुञ्जीयात्रा च प्रदान्ति, टङ्कनस्य, गेमिंग्-अनुभवः अधिकः आरामदायकः सटीकः च भवति ।
  2. गेम उपकरणम् : गेम कन्सोल्, गेम कंट्रोलर्, गेम मेकेनिकल कीबोर्ड इत्येतयोः मध्ये यांत्रिककीलस्य व्यापकरूपेण उपयोगः भवति । यांत्रिकबटनानाम् स्पर्शप्रतिक्रिया, द्रुतप्रतिक्रियासमयः च क्रीडानियन्त्रणप्रदर्शने सुधारं कर्तुं साहाय्यं करोति ।
  3. औद्योगिकनियन्त्रणसाधनम् : यांत्रिकबटनानाम् स्थायित्वं प्रबलं भवति तथा च औद्योगिकनियन्त्रणसाधनयोः नित्यं संचालनस्य आवश्यकता भवति इति परिदृश्यानां कृते उपयुक्ताः सन्ति, यथा यांत्रिकनियन्त्रणपटलाः, रोबोट्कन्सोल् इत्यादयः
  4. संचारसाधनम् : यांत्रिकबटनानाम् उपयोगः संचारसाधनेषु यथा मोबाईलफोन, दूरभाषः, वाकी-टॉकी च उत्तमबटनस्पर्शं विश्वसनीयतां च प्रदातुं शक्यते
  5. श्रव्य-उपकरणम् : श्रव्य-उपकरणेषु यांत्रिक-कीलानां व्यापकरूपेण उपयोगः भवति, यथा मिक्सर्, श्रव्य-नियन्त्रण-पटलः, संगीत-कीबोर्ड् इत्यादिषु ।
  6. चिकित्सासाधनम् : चिकित्सासाधनेषु यांत्रिकबटनानाम् उपयोगः सामान्यतया भवति, यथा चिकित्सायन्त्राणि, संचालनमेजनियन्त्रणपटलाः इत्यादयः यांत्रिकबटनानाम् स्थिरता विश्वसनीयता च चिकित्सासाधनानाम् सामान्यसञ्चालनाय महत्त्वपूर्णा भवति
  7. वाहन-विमानन-उपकरणम् : वाहन-नियन्त्रण-पटलेषु, विमान-यन्त्र-पटलेषु अन्येषु परिदृश्येषु च यांत्रिक-बटनस्य उपयोगः कर्तुं शक्यते येषु उच्च-विश्वसनीयतायाः, स्थायित्वस्य च आवश्यकता भवति
    यांत्रिककुञ्जीनां स्थायित्वं, भावः, विश्वसनीयता च अनेकेषु क्षेत्रेषु तान् प्राधान्यविकल्पं करोति । कार्यदक्षतां सुधारयितुम् अथवा उत्तमं उपयोक्तृ-अनुभवं प्रदातुं वा, अनेकेषु अनुप्रयोग-परिदृश्येषु यांत्रिक-बटनस्य व्यापकरूपेण उपयोगः भवति ।

२ बटनपरिपथः

विकासफलके कीलपरिपथस्य योजनाबद्धचित्रं J11 इत्यस्य उपयोगः भवति यत् 0/4/8/ बटन्स् मैट्रिक्स कीबोर्ड् मध्ये सन्ति वा स्वतन्त्राः कीलेषु सन्ति वा इति।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

विकासफलकस्य वास्तविकबटनाः चित्रे यथा दर्शिताः तथा सन्ति
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

३ बटन सॉफ्टवेयर डिजाइन

३.१ बटनस्य कार्यान्वयनम्

प्रथमं वयं स्वतन्त्रबटनं कार्यान्वयामः J11 तथा 2.3 इत्येतयोः शॉर्ट-सर्किटं कर्तुं जम्पर कैप् इत्यस्य उपयोगं कुर्मः, येन 0/4/8/C बटन् स्वतन्त्रतया उपयोक्तुं शक्यते ।
1. सॉफ्टवेयर इन्जिनियरिंग्, वयं c51_key.c तथा c51_key.h इति द्वौ नूतनौ सञ्चिकां निर्मामः, c51_key.c इत्यस्मिन् includes.h इत्येतत् प्रयोजयामः, includes.h इत्यस्मिन् c51_key.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

३.२ बटन-छनन-विधिः

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

३.३ मैट्रिक्स बटन सॉफ्टवेयर डिजाइन

//खण्डसङ्केतमूल्यं 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

३.४ बटनं Protues अनुकरणम्

परिणामं प्रदर्शयितुं स्वतन्त्रं बटनं, DIP स्विच, बटनस्य एकं अन्तं ग्राउण्ड् इत्यनेन सह संयोजयन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

मैट्रिक्स कीबोर्ड कुञ्जी अनुकरणम् : १.अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

४ प्रमुखक्रियाणां सारांशः

सूक्ष्मनियन्त्रक-अनुप्रयोगेषु, सम्यक् निवेशं स्थिरं प्रणाली-सञ्चालनं च सुनिश्चित्य कुञ्जी-परिचयस्य विश्वसनीयता-निर्माणं महत्त्वपूर्णम् अस्ति । अत्र प्रमुखपरिचयविश्वसनीयतां सुधारयितुम् केचन डिजाइनसिद्धान्ताः सन्ति:

  1. कील-जिटर-इत्येतत् समाप्तं कुर्वन्तु : कील-जिटर-इत्येतत् संक्षिप्तं अस्थिर-संकेतं निर्दिशति यदा बटनं दबाति वा मुक्तं वा भवति । जिटर-निवारणाय हार्डवेयर-सॉफ्टवेयर-जिटर-निराकरण-विधिः उपयोक्तुं शक्यते । हार्डवेयरपक्षे बाह्यसंधारित्रस्य अथवा आरसीजालस्य उपयोगेन जिटरं छानयितुं शक्यते । सॉफ्टवेयरस्य दृष्ट्या कीलसंकेतानां स्थिरीकरणाय सॉफ्टवेयरविलम्बस्य अथवा राज्ययन्त्राणां उपयोगः कर्तुं शक्यते ।
  2. बाह्य-पुल्-अप/पुल्-डाउन-प्रतिरोधकानां उपयोगं कुर्वन्तु: कील-पिन-सङ्गतस्य बाह्य-पुल्-अप-अथवा-पुल्-डाउन-प्रतिरोधकस्य उपयोगेन, भवान् सुनिश्चितं कर्तुं शक्नोति यत् कुञ्जी न दबाति चेत् स्थिरं तिष्ठति एतत् कृत्वा कीलानि न निपीडितानि सति प्लवमानसंकेताः निवारिताः भवन्ति ।
  3. विलम्बः तथा डिबाउन्स एल्गोरिदम् : सॉफ्टवेयर् मध्ये समुचितविलम्बः तथा डिबाउन्स एल्गोरिदम् कार्यान्वितुं कीस्ट्रोक्-परिचयस्य विश्वसनीयतायां सुधारः कर्तुं शक्यते । विलम्बः स्थिरकुंजीस्थितिं सुनिश्चितं कर्तुं शक्नोति तथा च मिथ्याप्रवर्तनं परिहरितुं शक्नोति । डिबाउन्स एल्गोरिदम् कीलप्रेस् जिटरं छानयितुं शक्नोति यत् केवलं वैधकीप्रेसक्रियाः एव ज्ञायन्ते इति सुनिश्चितं कर्तुं शक्नोति ।
  4. बहुविधपरिचयः पुष्टिः च : विश्वसनीयतां सुधारयितुम् बहुकुञ्जीपरिचयः पुष्टिकरणतन्त्राणां उपयोगः कर्तुं शक्यते । यथा, कुञ्जीस्थितिं समये समये ज्ञातुं सॉफ्टवेयरसमयनिर्धारकस्य अथवा व्यत्ययस्य उपयोगः कर्तुं शक्यते, तथा च कुञ्जिकायाः ​​प्रभावीप्रवर्तनं सुनिश्चित्य बहुविधपुष्टीकरणानां उपयोगः कर्तुं शक्यते
  5. इनपुट् बफर्स् तथा स्टेट् मशीन्स् : कीस्ट्रोक् इनपुट् संग्रहीतुं इनपुट् बफर्स् इत्यस्य उपयोगं कुर्वन्तु, ततः इनपुट् इत्यस्य संसाधनार्थं स्टेट् मशीन् इत्यस्य उपयोगं कुर्वन्तु । राज्ययन्त्रं कुञ्जीस्थितिं निरीक्षितुं शक्नोति तथा च मुख्यघटनानां सम्पादनं कर्तुं शक्नोति यत् कुञ्जीसञ्चालनानां सम्यक्त्वं स्थिरतां च सुनिश्चितं करोति ।
  6. विद्युत् आपूर्तिस्य तथा ग्राउण्ड् तारस्य हस्तक्षेपपृथक्करणम् : कुञ्जीसंकेते विद्युत् आपूर्तिहस्तक्षेपस्य तथा ग्राउण्ड् तारस्य पुनरागमनस्य प्रभावं निवारयितुं समुचितपृथक्करणस्य उपायाः कर्तुं शक्यन्ते यथा, पृथक् पृथक् शक्ति-भूविमानयोः उपयोगं कुर्वन्तु, अथवा बाधां न्यूनीकर्तुं छानकस्य उपयोगं कुर्वन्तु ।
  7. हार्डवेयर-सॉफ्टवेयरयोः कृते दोष-सहिष्णुता-तन्त्राणि : यदा त्रुटयः अथवा असामान्य-स्थितयः भवन्ति तदा कुञ्जी-निवेशस्य विश्वसनीयतायाः रक्षणार्थं दोष-सहिष्णुता-तन्त्राणि डिजाइनं कुर्वन्तु यथा, अतिरेकपरिचयः, चेकसमपरिचयः, त्रुटिनियन्त्रणं, पुनर्प्राप्तितन्त्रम् इत्यादीनां उपयोगः कर्तुं शक्यते ।
    सामान्यतया, विश्वसनीयकुञ्जीपरिचयनिर्माणस्य हार्डवेयर-सॉफ्टवेयरयोः विविधकारकाणां व्यापकरूपेण विचारः करणीयः, तथा च विशिष्टानुप्रयोगपरिदृश्यानुसारं समुचितं अनुकूलनं समायोजनं च कर्तुं आवश्यकता वर्तते समुचितनिर्माणस्य कार्यान्वयनस्य च माध्यमेन कुञ्जीनां स्थिरता, सटीकता, विश्वसनीयता च सुनिश्चितं कर्तुं शक्यते ।