51单片机数码管显示有问题
#include <REGX52.H>
#include "LCD1602.h"
#include "key.h"
#include "Delay.h"
unsigned char K,n;
unsigned char chr[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void test(unsigned char location,unsigned char number)
{
switch(location) //位选
{
case 0: P2_4=1;P2_3=1;P2_2=1;break; //7
case 1: P2_4=1;P2_3=1;P2_2=0;break; //6
case 2: P2_4=1;P2_3=0;P2_2=1;break;//5
case 3: P2_4=1;P2_3=0;P2_2=0;break; //4
case 4: P2_4=0;P2_3=1;P2_2=1;break;//3
case 5: P2_4=0;P2_3=1;P2_2=0;break;//2
case 6: P2_4=0;P2_3=0;P2_2=1;break;//1
case 7: P2_4=0;P2_3=0;P2_2=0;break;//0
}
P0=chr[number]; //段选
}
void main()
{
test(0,0);
while(1)
{
K=key(); //返回按键
if(K)
{
test(1,K); //数码管显示数字 如果是(0,K),第一个数码管会随按键变化而变化,换成其他数码管则不能正常显示,比如(1,K)
}
}
}
如果位选为0,第一个数码管随段选的变化而变化,但是当位选为1到7时,段选变化,数码管抽风
实在不知道怎么解决,不知道是硬件的问题,还是代码的问题
我想要的结果和为什么
test (x,K), x可以为0到7.是静态扫描,数码管上数随K的变化而变化。每次位选都是固定的,段选在变化
##
unsigned char key()
{
.if(.........){return 1;};//按下键1
if(.........){return 2;};//按下键2
if(.........){return 3;};//按下键3
if(.........){return 4;};//按下键4
}