4*4矩阵键盘输入一个两位数,显示在一个两位数码管上。程序如下:现在的问题是我接一位的数码管能正常显示数,接两位的就像图片中乱码了?这是为什么呢?
#include<reg51.h>
unsigned char code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff
};
unsigned char keyNO0=16,keyNO1=16;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
void delay(int x)
{
unsigned int i;
for(;x>0;x--)
for(i=0;i<120;i++);
}
void keyscan()
{
unsigned char temp,temp1;
temp=P1&0xf0;
P1=0x0f;
temp1=P1&0x0f;
switch(temp)
{
case 0xe0:keyNO0=0;break;
case 0xd0:keyNO0=1;break;
case 0xb0:keyNO0=2;break;
case 0x70:keyNO0=3;break;
}
switch(temp1)
{
case 0x0e:keyNO1=0;break;
case 0x0d:keyNO1=1;break;
case 0x0b:keyNO1=2;break;
case 0x07:keyNO1=3;break;
}
P3=temp;
}
void main()
{
unsigned char keyNO=16,prekey=16,count=0;
while(1)
{P1=0xf0;
if(P1!=0xf0)
{
keyscan();
count++;
keyNO=keyNO0*4+keyNO1;prekey=keyNO;
//P0=~DSY_CODE[prekey];
if(count==1)
{
P2_6=0;
P2_7=1;
P0=~DSY_CODE[prekey];
delay(500);
}
if(count==2)
{
P2_7=0;
P2_6=0;
count=0;
P0=~DSY_CODE[prekey];
delay(500);
}
}
}
}
补充内容 (2017-2-25 13:49):
现在显示的问题解决了,就是不知道怎么分别对第一个数码管按键输入和对第二个数码管按键输入?有没有人帮忙看看
-
电路图
int flag;对位选位进行选择!
即table[flag];
你按下按键这个flag自动加1.
并判断flag
一周热门 更多>