要求是当按下s1按键开关时,数码管显示1;当按下s2按键开关时,数码管显示2;当按下s3按键开关时,数码管显示0;
下面是我写的程序:
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
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;
LSB=1;
LSC=1;
while(1)
{
keypros();
}
}
|