经典防抖动键C51源程序

更新时间:2023-04-16 03:27:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

经典防抖动键C51源程序

/********************************************************/

//单片机四独立按键控制四LED;

//四个独立按键对应四个独立的LED.

//当某一按键按下时对应的LED亮,当第二次按下时灭。

//四个LED只能有一个亮,初学者可以参考以下程式:

/********************************************************/

#i nclude < reg52.h >

unsigned char k_scan();

unsigned char k_pro();

unsigned char k_new,k_old;

unsigned char k;

void delay(unsigned char m);

sbit k1=P1^4; sbit k2=P1^5;

sbit k3=P1^6; sbit k4=P1^7;

sbit led0=P0^0; sbit led1=P0^1;

sbit led2=P0^2; sbit led3=P0^3;

bit n;

/********************************************************/ void main(void)

{

P0=0xff;

k_old=0x00;

while(1)

{

k_new=k_scan();

if(k_new!=k_old)

{ delay(1);

if(k_new!=k_old)

{k_old=k_new;

k=k_pro();}

}

switch(k)

{

case 1:{if(n)led0=0;else if(!n)led0=1;} break;

case 2:{if(n)led1=0;else if(!n)led1=1;} break;

case 3:{if(n)led2=0;else if(!n)led2=1;} break;

case 4:{if(n)led3=0;else if(!n)led3=1;} break;

default: break;

}

}

}

/********************************************************/ unsigned char k_pro()

{

switch (k_new)

{

case 0x01:{k=1;if(led1&led2&led3){n=!n;}

else {P0=0xff;}}

break;

case 0x02:{k=2;if(led0&led2&led3){n=!n;}P0=0xff;}

break;

case 0x04:{k=3;if(led0&led1&led3){n=!n;}P0=0xff;}

break;

case 0x08:{k=4;if(led0&led1&led2){n=!n;}P0=0xff;}

break;

default:

break;

}

return(k);

}

/********************************************************/ unsigned char k_scan()

{

P1=0xff;

k_new=0x00;

k_new=k_new|(!k4);

k_new=k_new<<1;

k_new|=(!k3);

k_new=k_new<<1;

k_new|=(!k2);

k_new=k_new<<1;

k_new|=(!k1);

return(k_new); //无键按下 k_new=0x00

}

/********************************************************/

void delay(unsigned char m)

{

while(m--)

{

unsigned char i=255;

while(i--);

}

}

/********************************************************/

/*

还可以将k_scan 函数更改为:

unsigned char k_scan()

{

P1=0xff;

k_new=0x00;

k_new=(~(P1) & 0xf0)>>4;

return(k_new); //无键按下 k_new=0x00 }

*/

/********************************************************/

本文来源:https://www.bwwdw.com/article/x70q.html

Top