你的程序是无论按key几键都会有使MUN+1,没什么问题,我猜想是你的P0口,即数码管显示的数据传输口没有加上拉电阻,导致显示端得电压不足造成无法显示。或显示的不清楚,你看不见。如果不是这个问题,再检查其他连接点是否接上。程序没有问题。
你这么编是很麻烦的,我建议你用外部中断来编写,将按键一段接在P3^2(P3^2有另一个功能是外部中断IT0),再将按键的另一端接地,然后在程序中设定IT0下降沿有效,再将P3^2置高电平,当按键按下时,中断被触发。
/*******************************************************************************************/
#include
#define led P1
unsigned char i=0;
unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极
/*********主程序**************/
main()
{
IE=0x81; //ea=1,it0=1
TCON=0x01; //it0下降沿有效
while(1);
}
/********中断************/
void a_INT0(void) interrupt 0 using 0
{
i++;
led=tab[i];
}
怎么又问一遍。
if(key1==0) {
delay(5); //消抖检测
if(key1==0) {
led1=0;
num++;
}
while(!key1); //抬手检测 //这个检测在放在里面
delay(5);
while(!key1);
}
// 放在这里的话,每次循环,就是没有按键你也要判断两下,有时,当你按下时,刚好在这里判断的时候,那你说,此时你不是在等着按键放开嘛,你这次按键就没用了。
延时太短了要10-15MS 抬手检测一个while就够了