大家好,我今天使用
ARMEGA128
单片机,在调试矩阵键盘的时候,检测引脚是否被拉低,结果检测出来是引脚被拉高,这到是怎么回事?下面是我调试时矩阵键盘的程序,末尾是我判断引脚被拉高的程序,求大家解答一下为何会如此,是我的
芯片有问题吗?#include<iom128v.h>
#define uchar unsigned char
uchar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
uchar num=0;
void delayms(uchar i)
{
uchar j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
DDRC=0XFF;
PORTC=~a[num];
}
void check()
{
uchar dat;
DDRD|=0XFF;
PORTD=0x0f;
delayms(2);
DDRD=0xff;
dat=PIND;
if(dat!=0x0f)
{
delayms(5);
dat=PIND;
if(dat!=0x0f)
{
switch(dat)
{
case 0x0e:num=0;break;
case 0x0d:num=4;break;
case 0x0b:num=8;break;
case 0x07:num=12;break;
}
}
DDRD=0XFF;
PORTD=0xf0;
DDRD=0x00;
delayms(1);
dat=PIND;
if(dat!=0xf0)
{
delayms(5);
dat=PIND;
if(dat!=0xf0)
{
num=6;
switch(dat)
{
case 0xe0:num+=0;break;
case 0xd0:num+=1;break;
case 0xb0:num+=2;break;
case 0x70:num+=3;break;
}
}
}
display();
}
}
void main()
{
while(1)
{
check();
}
}
下面是我检验出来引脚被拉高的程序
#include<iom128v.h>
#define uchar unsigned char
uchar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
uchar num=0;
void delayms(uchar i)
{
uchar j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
DDRC=0XFF;
PORTC=~a[num];
}
void check()
{
uchar dat;
DDRD|=0XFF;
PORTD=0x0f;
delayms(2);
DDRD=0xff;
dat=PIND;
if(dat!=0x0f)
{
delayms(5);
dat=PIND;
if(dat!=0x0f)
{
switch(dat)
{
case 0x0f:num=0;break;
case 0x1f:num=1;break;
case 0x2f:num=2;break;
case 0x3f:num=3;break;
case 0x4f:num=4;break;
case 0x5f:num=5;break;
case 0x6f:num=6;break;
case 0x7f:num=7;break;
case 0x8f:num=8;break;
case 0x9f:num=9;break;
case 0xaf:num=10;break;
case 0xbf:num=11;break;
case 0xcf:num=12;break;
case 0xdf:num=13;break;
case 0xfe:num=14;break;
default : num=5;
}
}
display();
}
}
void main()
{
while(1)
{
check();
}
}
一周热门 更多>