声明:
本文由南通富士特电力自动化有限公司内部协助完结。
单片机怎么完成一个高效的按键程序很是重要,在单片机中每一步都是需求去酌量,尽量做到高效,进步整个体系的高效是需求每一步都要高效,先上源代码:
#include
#include
unsigned charkey = 0;
unsigned charkey0 = 0;
unsigned charkey1 = 0;
unsigned charkey2 = 0;
voidkey_saomiao(void)
{
key0 = P2;
key0 = key0 & 0xB0;
//key0 = key0 >> 4;//移位要看键值是哪个,将其移动到低位来
key2 = key2 | (key0 ^ key1);
key1 = key0;
key = key | (key2 & key0);
key2 = key ^ key2;
}
void time0_init(void)
{
unsigned char a;
a = TMOD;
a = a | 0x01;
TMOD = a;
//IE = 0x82;
TH0 = 0x10;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
EA = 1;
}
void time0_inte(void) interrupt 1
{
TH0 = 0x10;
TL0 = 0x00;
TR0=1;
key_saomiao();
//其他程序
}
voidkey_num(void)
{
unsigned char temp;
temp = 0;
//key3
temp = key & 0x80;
if(temp > 0)
{
disp_stop = 1;
key = key & 0x7F;
temp = 0;
}
else
{
disp_stop = 0;
}
//key2
temp = key & 0x20;
if(temp > 0)
{
disp_orderly = 1;
key = key & 0xDF;
temp = 0;
}
//key1
temp = key & 0x10;
if(temp > 0)
{
disp_orderly = 0;
key = key & 0xEF;
temp = 0;
}
}//本段程序中只完成了3个按键,因为只要按键3只,改动一些全局变量(开关量)值
intmain(void)
{
unsigned char temp;
all_data_int();
while(1)
{
key_num();
//其他程序
}
return 0;
}
阐明:本程序只是只能作为点动按键的运用,不适用于例如拨动按键类型的按键信号固定在某一固定值。
本程序中只是是完成的最多为8个按键的程序,而且按键信号有必要直接由MCU的IO口直接收集,假如想要完成其他品种的方法,就需求晋级程序了,本程序的中心当地是每个一个固定的时刻调用一次key_saomiao();本文中运用的是定时器0,时长50MS。关于按键的对应问题,本文中实这样的P2的各个IO口正对应着key变量的各个位,一共8个位,刚好8个IO口,所以是最多完成8个按键,看是否有按键只是需求检查key变量对应为是否为“1”,为“1”则表明这个对应的按键产生了一个按键效果。这段程序的精华在于将去抖,等候按键松开的进程用了3个变量来记住,分别是key0,key1,key2.可以说整个进程只是运用了5步,当然运用汇编的话不止5步,需求9步来完成,。这样看来就算加上其他的一些调用,整个程序履行的功率试试十分高的
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/259204.html