#include<reg52.h>#include<intrins.h>#define uint unsigned int //用uint替换unsigned int#define uchar unsigned char //用uchar替换unsigned char sbit sbit key_s1 = P3^7; //用P3.7来检测第一个按键是否被按下 sbit key_s2 = P3^0; //用P3.0来检测第二个按键是否被按下 sbit beep = P2^3; void delay(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--);} void main() { if(key_s1 == 0&& key_s2 == 0) //第一次检测两个按键被按下 { delay(8); //延时8ms进行消抖 if(key_s1 == 0&& key_s2 == 0) //再次检测两个按键被按下,说明确实被按下了 { beep = 1; //使蜂鸣器鸣叫 while(!key_s1 == 0&& key_s2 == 0 ) beep = 0; //使蜂鸣器停止 } }}
程序显示没有错误,但为什么按下两个键时蜂鸣器不会鸣叫。
因为代码一直执行的是while里面的判断 一直卡在哪里 不管怎么按 也会卡在while哪里 beep=1的时间太短