程序目的是為了實現:當按下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();
}
}
|