|
本帖最后由 ll13536121668 于 2017-11-2 17:32 編輯
阿里旺旺圖片20171102103509.jpg (70.86 KB, 下載次數(shù): 39)
下載附件
2017-11-2 11:45 上傳
4只獨(dú)立按鍵控制4只LED亮和滅,按下按鍵,LED亮,再按下,LED滅。因?yàn)槲覀兒芏喽际前赐臧存I,松開(kāi)手LED才亮。 我現(xiàn)在是想一按按鍵,LED就亮或滅,這個(gè)又怎么寫(xiě)呢?while(!key1) ,while(!key2) ,while(!key3) ,while(!key4 )這句是松手之后,LED亮或滅,但是,如果去掉這一句松手檢測(cè),那按鍵就不靈活了,有時(shí)行,有時(shí)不行,有時(shí)要按很多次才亮或者滅,請(qǐng)朋友們幫幫忙,要怎樣改才正確?謝謝。下面是程序
#include <reg52.h>
//定義一下,方便使用
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^4; //按鍵1定義
sbit key2=P2^5; //按鍵2定義
sbit key3=P2^6; //按鍵3定義
sbit key4=P2^7; //按鍵4定義
sbit led1=P3^0; //led1端口
sbit led2=P3^1; //led2端口
sbit led3=P3^2; //led3端口
sbit led4=P3^3; //led4端口
/**************************臨時(shí)變量定義****************************/
uchar keyflag_1=0; //按鍵標(biāo)志位
uchar keyflag_2=0; //按鍵標(biāo)志位
uchar keyflag_3=0; //按鍵標(biāo)志位
uchar keyflag_4=0; //按鍵標(biāo)志位
/*************************毫秒延時(shí)函數(shù)****************************/
void delayms(uint z)
{
uint x,y;
for(x=0;x<=76;x++)
for(y=0;y<=z;y++);
}
/**************************按鍵掃描子程序****************************/
void keyscan()
{
if(key1==0) //第一個(gè)按鍵按下
{
delayms(5); //進(jìn)行短暫延時(shí)消除按鍵的抖動(dòng)
if(key1==0) //第一個(gè)按鍵確實(shí)按下
{
keyflag_1++; //鍵一按下,標(biāo)志位加一
while(!key1); //松手檢測(cè)
}
}
if(keyflag_1==1){led1=0;} //點(diǎn)亮LED1
if(keyflag_1==2){led1=1;keyflag_1=0; } //關(guān)閉LED1
if(key2==0) //第二個(gè)按鍵按下
{
delayms(5); //進(jìn)行短暫延時(shí)消除按鍵的抖動(dòng)
if(key2==0) //第二個(gè)按鍵確實(shí)按下
{
keyflag_2++; //鍵一按下,標(biāo)志位加一
while(!key2); //松手檢測(cè)
}
}
if(keyflag_2==1){led2=0;} //點(diǎn)亮LED2
if(keyflag_2==2){led2=1;keyflag_2=0; } //關(guān)閉LED2
if(key3==0) //第三個(gè)按鍵按下
{
delayms(5); //進(jìn)行短暫延時(shí)消除按鍵的抖動(dòng)
if(key3==0) //第三個(gè)按鍵確實(shí)按下
{
keyflag_3++; //鍵一按下,標(biāo)志位加一
while(!key3); //松手檢測(cè)
}
}
if(keyflag_3==1){led3=0;} //點(diǎn)亮LED3
if(keyflag_3==2){led3=1;keyflag_3=0; } //關(guān)閉LED3
if(key4==0) //第四個(gè)按鍵按下
{
delayms(5); //進(jìn)行短暫延時(shí)消除按鍵的抖動(dòng)
if(key4==0) //第四個(gè)按鍵確實(shí)按下
{
keyflag_4++; //鍵一按下,標(biāo)志位加一
while(!key4); //松手檢測(cè)
}
}
if(keyflag_4==1){led4=0;} //點(diǎn)亮LED4
if(keyflag_4==2){led4=1;keyflag_4=0; } //關(guān)閉LED4
}
void main()
{
while(1) //程序循環(huán)執(zhí)行
{
keyscan(); //按鍵掃描,子函數(shù)
}
}
|
|