2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
提示
कीलः इलेक्ट्रॉनिकयन्त्रस्य वा परिपथस्य वा संयोजनं विच्छेदनं च नियन्त्रयितुं प्रयुक्तं बटनं वा स्विचः वा । तेषां प्रायः द्वौ अवस्थाः भवतः - मुक्तः निमीलितः च । निम्नलिखितम् केषाञ्चन सामान्यस्विचबटनानाम् परिचयः अस्ति ।
यांत्रिकबटनस्य केचन अनुप्रयोगपरिदृश्याः : १.
विकासफलके कीलपरिपथस्य योजनाबद्धचित्रं 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; //取位码
}
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;
}
}
मुख्यकार्यक्रमे उद्धृतम् मुख्यम् : १.
#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());
}
}
/********************************************************
函数名称: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;
}
}
//खण्डसङ्केतमूल्यं 01234567 प्रदर्शयतु, यत् योजनाबद्धचित्रस्य अनुरूपं द्रष्टुं शक्यते तथा च भिन्नचित्रलेखानां अनुरूपं पिन उच्चबिन्दुस्तरीयविन्यासस्थितिं प्रदर्शयतु।
unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
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); //返回该值
}
परिणामं प्रदर्शयितुं स्वतन्त्रं बटनं, DIP स्विच, बटनस्य एकं अन्तं ग्राउण्ड् इत्यनेन सह संयोजयन्तु
मैट्रिक्स कीबोर्ड कुञ्जी अनुकरणम् : १.
सूक्ष्मनियन्त्रक-अनुप्रयोगेषु, सम्यक् निवेशं स्थिरं प्रणाली-सञ्चालनं च सुनिश्चित्य कुञ्जी-परिचयस्य विश्वसनीयता-निर्माणं महत्त्वपूर्णम् अस्ति । अत्र प्रमुखपरिचयविश्वसनीयतां सुधारयितुम् केचन डिजाइनसिद्धान्ताः सन्ति: