新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机最高效的按键程序(C语言

单片机最高效的按键程序(C语言

作者: 时间:2016-11-25 来源:网络 收藏
声明:

本文由南通富士特电力自动化有限公司内部帮助完成。

本文引用地址://m.amcfsurvey.com/article/201611/321323.htm

单片机如何实现一个高效的按键程序很是重要,在单片机中每一步都是需要去斟酌,尽量做到高效,提高整个系统的高效是需要每一步都要高效,先上源代码:

#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)interrupt1
{
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步来实现,。这样看来就算加上其他的一些调用,整个程序执行的效率试试非常高的



关键词:单片机按键程

评论


技术专区

关闭