简单记录一下(#/。\#)。
单片机: STC89C52
开发板: HC6800-MS


程序
#include<reg51.h> sbit K1=P1^4; sbit K2=P1^5; sbit K3=P1^6; sbit K4=P1^7; sbit K5=P3^5; void Delay10ms() { unsigned char i, j;
i = 18; j = 235; do { while (--j); } while (--i); } void main() { while(1) { if(K1==0) { Delay10ms(); if(K1==0) { P2=0xf7; } } if(K2==0) { Delay10ms(); if(K2==0) { P2=0xef; } } if(K3==0) { Delay10ms(); if(K3==0) { P2=0xdf; } } if(K4==0) { Delay10ms(); if(K4==0) { P2=0xbf; } } if(K5==0) { Delay10ms(); if(K5==0) { P2=0x7f; } } } }
|
运行结果
按下独立按键K1
,只有LEDD4
亮;
按下独立按键K2
,只有LEDD5
亮;
按下独立按键K3
,只有LEDD6
亮;
按下独立按键K4
,只有LEDD7
亮;
按下独立按键K5
,只有LEDD8
亮。
说明
开发板上的按键由于机械触点的弹性作用,当按下按键时机械触点并不会立刻稳定闭合,松开按键时机械触点也不会立刻稳定断开,因此在按下或松开按键的瞬间(在大约10ms内)电位会有一定的波动(或者叫做抖动);软件消抖就是当检测到按键状态发生变化后,先延时大约10ms待电位稳定后,再进行一次检测,以此次检测到的状态为准。