新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)中最簡單實(shí)用的按鍵程序

單片機(jī)中最簡單實(shí)用的按鍵程序

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
我想了很久才寫成的這個(gè)按鍵程序;先講講我的思路,

我的思路很簡單就是一般的按鍵不是需要去抖動(dòng)延時(shí),我想單片機(jī)夠慢的了,用什么方法不要去延時(shí),所以我就想到在定時(shí)中斷中插入按鍵掃描程序,如果連續(xù)兩個(gè)中斷程序中都有按鍵,就可以認(rèn)為有按鍵。

本文引用地址:http://m.butianyuan.cn/article/201611/321325.htm

但是我下面的這個(gè)程序中有個(gè)缺陷,那就是沒有加入去抖動(dòng)的方法,為了縮短短程序的總長度,我就是沒有寫,這個(gè)我用在一個(gè)平時(shí)的一個(gè)小的測試部件控制程序中,去抖動(dòng)沒什么實(shí)際的意義,就沒有寫!

ucharkey = 0;
ucharkey0 = 0;
ucharkey1 = 0;
ucharkey2 = 0;
ucharkey3 = 0;
ucharkey4 = 0;

//以上為全局變量


voidkey_saomiao(void)
{
//uchara = 0;

P3 = P3 | 0xF0;
nop();
key0 = P3;
key0 = key0 >> 4;
key2 = key2 | (key0 ^ key1);
key1 = key0;
key = key | (key2 & key0);
key2 = key ^ key2;
}


void time0_init(void)
{
uchar a;

a = TMOD;
a = a | 0x01;
TMOD = a;
//IE = 0x82;
TH0 = 0x10;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
EA = 1;
}

void time0_int(void) interrupt 1
{
TH0 = 0x10;
TL0 = 0x00;
TR0=1;
time_count++;
key_saomiao();
if(time_count > 20)
{
LED0 = ~LED0;
time_count = 0;
}
}



評(píng)論


技術(shù)專區(qū)

關(guān)閉