if(key_statue==1)
{
key_statue=0;
led=~led;
}
你把这段代码写到主循环中,不能放到外中断中,这样就正常了,另外,把定时器的中断改成我给你的样子,要是不正常你找我!
void t0() interrupt 1 //1ms 用于按键去抖动。
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(key == 0)
{
key_num++;
if(key_num>=15)
{
key_num = 15;
key_statue=1;
}
}
else
{
key_num = 0;
}
}
我随便写了下,配着注释,你理解下意思,然后弄个适合你的
void key_scan()
{ unsigned char key1,key2;unsigned int key;
P1 = 0XFF; //P1拉高
P2 &= 0XF0; //P20 -P23 拉低
if(P1 != 0XFF) // 如果有按键按下,P1就有引脚被拉低,
{
delay_ms(10); //延时10ms, 防抖
if(P1 != 0XFF)
{ key1 = P1; //记下P1口的值
P1 = 0X00; P2 |= 0X0F; //P1拉低,P2拉高
if((P2&0X0F)!=0X0F) //P2口有引脚被拉低了,说明有按键按下
key2 = P2 & 0x0F; //记下P2后4位的值
//现在通过key1和key2就可以区分每个按键了
key = (key2<<8) + key1; //把key1 和key2组合在一起
switch (key) //每个key值都对应着一个按键 ,用case 语句执行就行了
{ case 0X077F : 按键1按下的子程序;break;
}
}
}
}
大致就这个意思 是按键扫描的 行列翻转法 ,
以上就是关于消抖,在定时器中断里面调用按键扫描子程序好还是在全部的内容,包括:消抖,在定时器中断里面调用按键扫描子程序好还是在、c51单片机P1.0-P1.7控制列,P2.0-P2.3控制行,8*4的矩阵键盘扫描,程序思路都好,求大虾帮忙!!!!c语言、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)