找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2575|回复: 11
收起左侧

键盘矩阵程序的问题

[复制链接]
ID:64817 发表于 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;
}
}
回复

使用道具 举报

ID:44262 发表于 2014-10-22 22:31 来自手机 | 显示全部楼层
意思是把三改为十或者11是吧
回复

使用道具 举报

ID:44262 发表于 2014-10-22 22:31 来自手机 | 显示全部楼层
意思是把三改为十或者11是吧
回复

使用道具 举报

ID:64817 发表于 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。求详解。谢谢
回复

使用道具 举报

ID:64817 发表于 2014-11-1 17:21 | 显示全部楼层
回复

使用道具 举报

ID:51088 发表于 2014-11-4 12:35 来自手机 | 显示全部楼层
学习了,mark一下
回复

使用道具 举报

ID:67992 发表于 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



回复

使用道具 举报

ID:67992 发表于 2014-11-4 16:07 | 显示全部楼层
看走眼了,不好意思
回复

使用道具 举报

ID:67992 发表于 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++)
{

评分

参与人数 2威望 +50 黑币 +100 收起 理由
admin + 50 + 50 回帖助人的奖励!
huqin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:64817 发表于 2014-11-12 21:36 | 显示全部楼层

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表