用的郭天祥的程序,顺序按下键盘后,显示0~F,但是编译后数码管一个也不亮。
我对程序有点疑问:P3=0xfe”将第一行线设置为低电平后,立即又令temp=P3;那么temp不也是变成0xfe?那对应一个键被按下的那一个语句在哪儿呢?(书中说就是temp,但是temp被赋值为P3,但P3已被赋值为0xfe用来检测)
还有P3=0xfe,这是通过程序将P3.0设置成0,那跟用一个导线将P3.0接地有区别吗?
硬件没问题,程序如下:
#include<STC12C5A60S2.h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x00,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delayms(int xms)
{
int i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void display(char num)
{
P1=table[num]; //段选数据
}
void matrixkeyscan()
{
char temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
{......};
P3=0xfb:
{......};
P3=0xf7;
{......};
void main()
{
P0M1 = 0x00;//推挽输出的定义
P0M0 = 0x0f;//推挽输出的定义
P0=0x0f;
while(1)
{
matrixkeyscan();//不停调用键盘扫描程序
}
}
程序有点长不能全复制上去,中途对于P3的4次检测只显示了第一个“P3=0xfe”将第一行线设置为低电平,后面三行的检测跟这个一样。
有TX有单片机在身边的能试一下帮我解决这个问题吗?