标题: 键盘矩阵程序的问题 [打印本页]

作者: abeimao    时间: 2014-10-22 21:36
标题: 键盘矩阵程序的问题
各位老师,我抄写一个键盘矩阵程序,但不知为什么    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;
}
}

作者: a110    时间: 2014-10-22 22:31
意思是把三改为十或者11是吧
作者: a110    时间: 2014-10-22 22:31
意思是把三改为十或者11是吧
作者: abeimao    时间: 2014-10-23 18:04
a110 发表于 2014-10-22 22:31
意思是把三改为十或者11是吧

P1=shumaguan[h*3+l]; 在数组里面填下标10或者11,可以显示出对应的a和b,如果h=3,l=1,或l=2, 。。 [h*3+l]; 这程序中计算出的值也就是10或者11,就显示不出对应的a和b。求详解。谢谢
作者: abeimao    时间: 2014-11-1 17:21

作者: jiege    时间: 2014-11-4 12:35
学习了,mark一下
作者: dgahz    时间: 2014-11-4 16:05
abeimao 发表于 2014-10-22 21:36:17
sbit l1=P2^6;
sbit l2=P2^5;
sbit l3=P2^4;
没看到函数体中用到 l1,l2,l3




作者: dgahz    时间: 2014-11-4 16:07
看走眼了,不好意思
作者: dgahz    时间: 2014-11-4 20:55
abeimao 发表于 2014-10-22 21:36:17
while(1)
   {
   
for (h=0;h<3;h++)
  {
   for (l=0;l<4;l++)
    {

改为
while(1)
{

for (h=0;h<4;h++)
{
for (l=0;l<3;l++)
{


作者: abeimao    时间: 2014-11-12 21:36
dgahz 发表于 2014-11-4 20:55
改为while(1)
{

哦,谢谢了,,,我晕迷糊,对对我写的4行3例。。太感谢了.




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1