独立按键电路:
独立按键编程:
一个独立按键和单片机的一个I/O口连接,当按键按下时,对应I/O口由高电平变为低电平
sbit key=P1^0;
if(key==0)
{
delay(15ms);
if(key==0)//消除按键抖动
{
功能代码块
}
}
矩阵式按键电路:
通过八个I/0口控制16个按键
4行4列
列线P1^0-P1^3,行线P1^4-P1^7
用定时器T0中断控制按键扫描
P1=0X0F;
uchar k,flag;
keycode()//扫描按下键的列线,列线值存在k中
{
flag=P1&0x0f;//如果扫描的不是按键所在的行,则flag=0x0f,若是按键所在的行,则该语句可将所在列取出,存入k中,和中断函数中的 P1=0x7f,_cror_(P1,1)配合使用
if(flag!=0x0f)
{
switch(flag)
{
case 0x07:k=1;break;
case 0x0b:k=2;break;
case 0x0d:k=3;break;
case 0x0e:k=4;break;
}
}
}
void timer0() interrupt 1
{
uchar m;
P1=0x0f;//行线置低,列线置高
if((P1&0x0f)!=0x0f)
{
delay(15ms)
if((P1&0x0f)!=0x0f)//判断是否有按键按下
for(m=0;m<4;m++)//如果有按键按下,进入行线扫描
{
P1=0x7f;//第一条行线置低
delay(5ms);
keycode();//进入列线扫描函数,若该行的4列均没有按键按下,则k为初始值0
t=k+4*m;
if(k!=0) goto L1;//K!-0时,说明已找到对应按键,跳转
P1=_cror_(P1,1);//
}
}
L1: P1=0x0f;k=0;//找到按键之后,行线置低,列线置高
while((P1&0x0f)!=0x0f);//若按键没有释放,循环等待
TH0=---;
TL0=---;
}