找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1505|回复: 1
打印 上一主题 下一主题
收起左侧

键盘矩阵 列判断不出,哪里错的

[复制链接]
跳转到指定楼层
楼主
ID:101968 发表于 2016-4-15 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include"hl52_h.c"
#define uchar unsigned char
void delay(int q)
{
                while(q)
                {
                --q;
        }
}

void scan()
{

   int table ;
   int i,k,hkey,lkey;
   uchar code number[50]={
   0X3f,0X06,0X5b,0X4f,0,0,0,0,0,0,
   0X66,0X6d,0X7d,0X07,0,0,0,0,0,0,
   0X7f,0X6f,0X77,0X7c,0,0,0,0,0,0,
   0X39,0X5e,0X79,0X71,0,0,0,0,0,0, } ;
   P3=0X0f;
  if(P3!=0X0f)                         // 行正列负电频,行P3.0起,列P3.4起
  delay(10);
                      i=P3&0x0f;                  //判断行 ,列取与操作,全部统一。行是低4位。
                          switch(i)
                          {
                          case 0X0e  :                //行1
                                hkey= 0;
                                break;
                          case 0X0d:                    //行2
                                hkey=1;
                                        break;
                         case  0X0b:                    //行3
                                hkey=2;
                                        break;
                     case  0X07:                //行4
                                hkey=3;
                                        break;      
                      }
                 k=P3&0Xf0;                               //列判断 列初始负。
                         switch(k)
                         {
                    case  0X10:
                                lkey=0;
                                        break;
                        case  0X20:
                                lkey=1;
                                        break;
                        case  0X80:
                                lkey=2;
                                        break;
                        case  0Xf0:
                                lkey=3;
                                        break;

                         }
                while(P3!=0X0f)
                {
                 delay(10 );
                }
          table=hkey*10+lkey;
          DU=1;
          //P0=0Xff ;   测试用
         P0=number[table];
          DU=0;
          WEI=1;
          P0=0X00;
          WEI=0;

       
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:101968 发表于 2016-4-15 11:24 | 只看该作者
每行只显示一个数字。哪里错了  高手 版主 帮帮忙
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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