各位老师,我抄写一个键盘矩阵程序,但不知为什么 P1=shumaguan[h*3+l]; //在这里填写下标10或11可显示字母a和b,,但按对应键时数字不会变,,但按键0到9能对应显示出。请教解说。
#include<reg52.h>
sbit duanxuan=P0^4;
sbit h1=P2^3;
sbit h2=P2^2;
sbit h3=P2^1;
sbit h4=P2^0;
sbit l1=P2^6;
sbit l2=P2^5;
sbit l3=P2^4;
unsigned char code shumaguan[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,
0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
unsigned char anjiandangqianzhi[4][3]={{1,1,1},{1,1,1},
{1,1,1},{1,1,1}};
main()
{
unsigned h ,l;
unsigned char anjianbiduizhi[4][3]={{1,1,1},{1,1,1},
{1,1,1},{1,1,1}};
TMOD=TMOD&0XF0;
TMOD=TMOD|0X01;
TH0=0XFC;
TL0=0X18;
TR0=1;
EA=1;
ET0=1;
duanxuan=0;
P1=shumaguan[0];
while(1)
{
for (h=0;h<3;h++)
{
for (l=0;l<4;l++)
{
if(anjianbiduizhi[h][l]!=anjiandangqianzhi[h][l])
{
P1=shumaguan[h*3+l]; //在这里填写下标10或11可显示字母a和b,,但按对应键时数字不会变,,但按键0到9能对应显示出。
}
(anjianbiduizhi[h][l])!=(anjiandangqianzhi[h][l]);
}
}
}
}
void zd() interrupt 1
{
unsigned char L;
static unsigned char H=0;
static unsigned char anjianbidui[4][3]={{0XFF,0XFF,0XFF},
{0XFF,0XFF,0XFF},{0XFF,0XFF,0XFF},{0XFF,0XFF,0XFF},};
TH0=0XFC;TL0=0X18;
anjianbidui[H][0]=(anjianbidui[H][0]<<1)|l1;
anjianbidui[H][1]=(anjianbidui[H][1]<<1)|l2;
anjianbidui[H][2]=(anjianbidui[H][2]<<1)|l3;
for(L=0;L<3;L++)
{
if (anjianbidui[H][L]==0XF0)// ((anjianbidui[H][L]&0X0F)==0X00)
{
anjiandangqianzhi[H][L]=0;
}
else if(anjianbidui[H][L]==0XFF)// ((anjianbidui[H][L]&0X0F)==0X0F)
{
anjiandangqianzhi[H][L]=1;
}
}
H++;
H=H&0X03;
switch (H)
{
case 0:h1=0;h2=1;h3=1;h4=1; break;
case 1:h1=1;h2=0;h3=1;h4=1;break;
case 2:h1=1;h2=1;h3=0;h4=1; break;
case 3:h1=1;h2=1;h3=1;h4=0; break;
default: break;
}
}
|