程序目的是为了实现:当按下s1开关按键时数码管显示1;按下s2开关按键时数码管显示2;按下s3开关按键时,数码管显示0。程序显示无错误i,但现象只有当按下s1开关按键时数码管显示1,且灭不了,按其他键没反应,想知道为什么。下面是程序:
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
u8 code smgduan[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 ,
0x7f , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 };
void delay(u16 i)
{
while (i--);
} // 延时
void keypros()
{
if (k1==0) //S1开关
{
delay(1000); //防抖动
if(k1==0)
{
P0=smgduan[1]; //显示1
}
}
while(!k1) //显示1模块
if (k2==0) //S2开关
{
delay(1000); //防抖动
if(k2==0)
{
P0=smgduan[2]; //显示2
}
}
while(!k2) //显示2模块
if (k3==0) //S3开关
{
delay(1000); //防抖动
if(k3==0)
{
P0=smgduan[0]; //显示0
}
}
while(!k3); //显示0模块
}
void main()
{
LSA=1;
while(1)
{
keypros();
}
}
|