51单片机的初学者 keil编程出现问题帮忙看看吧

没有输入的时候显示0,之后按钮按几就显示几(对应数字1~8),代码如下 #include <reg52.h> void delay(void) { unsigned int i,ms=200; while(ms--) for(i=0;i<120;i++); } void main() { unsigned int a; a=P1; P0=0xc0; delay(); while(1) { switch(a) { case 0xfe:P0=0xf9;delay();break; case 0xfd:P0=0xa4;delay();break; case 0xfb:P0=0xb0;delay();break; case 0xf8:P0=0x99;delay();break; case 0xef:P0=0x92;delay();break; case 0xdf:P0=0x82;delay();break; case 0xbf:P0=0xf8;delay();break; case 0x8f:P0=0x80;delay();break; } } } 按按钮没反应,一直都是0,应该怎么改啊??

第1个回答  2019-08-15
程序及仿真电路存在其他健壮性问题,这里不予表述及建议。
主要问题:
while(1)循环有问题。
原因分析:
你的main函数进来a=P1,只是给a附一个初值,然后一直循环while(1)里面。
while(1)里面a的值一直是初值(0xff),switch函数根本侦测不到按键值。
短期建议:
while(1)内添加获取键值代码为
a=P1。
while(1)
{
a=P1;
/*添加此行代码*/
switch(a)
{
case
0xfe:P0=0xf9;delay();break;
case
0xfd:P0=0xa4;delay();break;
case
0xfb:P0=0xb0;delay();break;
case
0xf8:P0=0x99;delay();break;
case
0xef:P0=0x92;delay();break;
case
0xdf:P0=0x82;delay();break;
case
0xbf:P0=0xf8;delay();break;
case
0x8f:P0=0x80;delay();break;
}
}
相似回答