求解:代码(只写了S1~S4)下载到开发板之后只有第一个数码管显示0,按下S1~S4没反应,但按下S8数码管灭,松开恢复。
时间:10-02
整理:3721RD
点击:
/**************************************************************************************
* 矩阵按键实验 *
实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字
S1-S4:0-3
S5-S8:4-7
S9-S12:8-B
S13-S16:C-F。
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。
***************************************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar key;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code printf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint x)
{
while(x--);
}
void keyscan()
{
uchar temp;
P3=0x7f;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
if(temp!=0x0f)
{
switch(temp)
{
case(0x77): key=0; break;
case(0x7b): key=1; break;
case(0x7d): key=2; break;
case(0x7e): key=3; break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0xf7;
}
}
}
}
void main()
{
LSA=0;
LSB=0;
LSC=0;
P0=printf[0];
while(1)
{
keyscan();
P0=printf[key];
}
}
* 矩阵按键实验 *
实现现象:下载程序后数码管显示0,按下矩阵按键上的按键显示对应的数字
S1-S4:0-3
S5-S8:4-7
S9-S12:8-B
S13-S16:C-F。
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。
***************************************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar key;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code printf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint x)
{
while(x--);
}
void keyscan()
{
uchar temp;
P3=0x7f;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
if(temp!=0x0f)
{
switch(temp)
{
case(0x77): key=0; break;
case(0x7b): key=1; break;
case(0x7d): key=2; break;
case(0x7e): key=3; break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0xf7;
}
}
}
}
void main()
{
LSA=0;
LSB=0;
LSC=0;
P0=printf[0];
while(1)
{
keyscan();
P0=printf[key];
}
}
看一下位选有没有问题
位选是没有问题的 是选中第一个数码管