在实验板上欲实现一个简单的功能,按K1键 数码管LED1 显1 按K2键 数码管LED2 显2 按K3键 数码管LED3 显3 按K4键 数码管LED1 显4问题?现在按K1四个管子同时显示1,其它按键也是四个数码管同时显示,不知问题出在那里,请高手指正,万分感谢!
实验板图纸
下面是C代码
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P2
#define SMG P0 //数码管段选
#define GPIO_PLACE P1 //位选
sbit K1=P1^4; //位操作
sbit K2=P1^5;
sbit K3=P1^6;
sbit K4=P1^7;
sbit ws1=P1^0; //数码管位选
sbit ws2=P1^1;
sbit ws3=P1^2;
sbit ws4=P1^3;
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
void delay5(uint);
main()
{
SMG=0xff;
while(1)
{
if((P1&0xf0)!=0xff){
delay5(1);
SMG=0xff;
switch(P1&0xf0)
{
case 0xe0:SMG=DIG_CODE[1];ws1=0;delay5(1);ws1=1;break;
case 0xd0:SMG=DIG_CODE[2];ws2=0;delay5(1);ws2=1;break;
case 0xb0:SMG=DIG_CODE[3];ws3=0;delay5(1);ws3=1;break;
case 0x70:SMG=DIG_CODE[4];ws4=0;delay5(1);ws4=1;break;
}
}
}
}
void delay5(uint c) //延时5ms
{
uchar a,b;
for(;c>0;c--)
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
|