2601|3

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于51单片机矩阵键盘的问题!! [复制链接]

2芯积分

#include<reg51.h>
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                        0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay10ms(int n);
void main()
{
 unsigned char i,j,t;
 while(1)
  {
     P2=table[0];
  P3=0x0F;
  t=P3;
  P3=t;
 while(P3==0x0F);
 delay10ms(1);
 if(P3!=0x0F)
   {
   switch(P3)
     {
       case 0x07:i=4;;break;
       case 0x0B:i=3;break;
       case 0x0D:i=2;break;
       case 0x0E:i=1;break;
       default:i=0;break;
      }
        P3=0xEF;
     t=P3;
     P3=t;
    if(P3!=0xEF) j=1;
        P3=0xDF;
        t=P3;
     P3=t;
     if(P3!=0xDF) j=2;
     P3=0xBF;
     t=P3;
     P3=t;
       if(P3!=0xBF) j=3; 
     P3=0x7F;
     t=P3;
     P3=t;
       if(P3!=0x7F) j=4 ;
     P2=table[5*i-6+j];
 }
 }
}
void delay10ms(int n)
{
 int i,j;
 while(n--)
  {
    for(i=11;i>0;i--)
  for(j=108;j>0;j--);
  }
}

这个是4*4矩阵键盘的源程序 ,我在KEIL和PROTEUS中联调一直单步运行能显示最后结果(要按下的那个键在PROTEUS电路中我连接起来让它短路,说明是这个键按下了),但是为什么在KEIL中生成.HEX文件 加载到PROTEUS中运行时,按下按键又没反应了,是不是上面的程序有问题,希望懂的高手能解答!!

[ 本帖最后由 cs350203 于 2011-1-1 20:13 编辑 ]

最佳答案

查看完整内容

首先,你应该明白的是,你的主函数一直在运行,那么P2=table[0];和P2=table[5*i-6+j];也一直在运行,你相信他们之间不会有影响。你想要保存你的值,就一定要将他们区分开来,有键按下才改变P2的值,无键则不改变。
此帖出自51单片机论坛

最新回复

首先,你应该明白的是,你的主函数一直在运行,那么P2=table[0];和P2=table[5*i-6+j];也一直在运行,你相信他们之间不会有影响。你想要保存你的值,就一定要将他们区分开来,有键按下才改变P2的值,无键则不改变。  详情 回复 发表于 2011-1-1 19:59
点赞 关注
 

回复
举报

33

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
首先,你应该明白的是,你的主函数一直在运行,那么P2=table[0];和P2=table[5*i-6+j];也一直在运行,你相信他们之间不会有影响。你想要保存你的值,就一定要将他们区分开来,有键按下才改变P2的值,无键则不改变。
此帖出自51单片机论坛
 
个人签名小草眼中的世界!
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

主函数是一直在运行!但是有while(P3==0x0F);没按键按下的时候P3==0x0F是恒成立的吧!程序不往后执行了吧!不知道我这样理解对不对!非常感谢你的回答!

此帖出自51单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

4
 
非常感谢inintrovert 的回答,就像你说的“你想要保存你的值,就一定要将他们区分开来,有键按下才改变P2的值,无键则不改变”,好像是真是这地方的问题!我在改下程序试试看!再次感谢inintrovert的回答!
此帖出自51单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表