找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助,单片机矩阵按键按下任意键都显示的0000

[复制链接]
跳转到指定楼层
楼主
  1. 仿真按下任意键都是0000而不是按键输入的数字。
复制代码
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit P17=P1^7;
  5. sbit P16=P1^6;
  6. sbit P15=P1^5;
  7. sbit P14=P1^4;
  8. uint count=0,num=0,k;
  9. uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  10. //*****************延时子程序***************************
  11. void delay(uint i)
  12. {
  13.    uint j;
  14.    for(;i>0;i--)
  15.    for(j=0;j<125;j++);
  16. }
  17. //**************矩阵键盘扫描子程序***********************
  18. uint keyscan()
  19. {
  20.    uchar temp,keynum;
  21.    P1=0xff;
  22.    P17=0;//**************扫描第一行**********************
  23.    temp=P1;
  24.    temp&=0x0f;
  25.    if(temp!=0x0f)
  26.    {
  27.       delay(10);
  28.           temp=P1;
  29.           temp&=0x0f;
  30.           if(temp!=0x0f)
  31.           {
  32.              temp=P1;
  33.              temp&=0x0f;
  34.                  switch(temp)
  35.                  {
  36.                     case 0x0e:keynum=0;break;
  37.                         case 0x0d:keynum=1;break;
  38.                         case 0x0b:keynum=2;break;
  39.                         case 0x07:keynum=3;break;
  40.                  }
  41.                  while(temp!=0x0f)
  42.                  {
  43.                     temp=P1;
  44.                 temp&=0x0f;
  45.                  }
  46.           }
  47.    }
  48.    P1=0xff;
  49.    P16=0;//**************扫描第二行**********************
  50.    temp=P1;
  51.    temp&=0x0f;
  52.    if(temp!=0x0f)
  53.    {
  54.       delay(10);
  55.           temp=P1;
  56.           temp&=0x0f;
  57.           if(temp!=0x0f)
  58.           {
  59.              temp=P1;
  60.                  temp&=0x0f;
  61.                  switch(temp)
  62.                  {
  63.                     case 0x0e:keynum=4;break;
  64.                         case 0x0d:keynum=5;break;
  65.                         case 0x0b:keynum=6;break;
  66.                         case 0x07:keynum=7;break;
  67.                  }
  68.                  while(temp!=0x0f)
  69.                  {
  70.                     temp=P1;
  71.                 temp&=0x0f;
  72.                  }
  73.           }
  74.    }
  75.    P1=0xff;
  76.    P15=0;//**************扫描第三行**********************
  77.    temp=P1;
  78.    temp&=0x0f;
  79.    if(temp!=0x0f)
  80.    {
  81.       delay(10);
  82.           temp=P1;
  83.           temp&=0x0f;
  84.           if(temp!=0x0f)
  85.           {
  86.              temp=P1;
  87.                  temp&=0x0f;
  88.                  switch(temp)
  89.                  {
  90.                     case 0x0e:keynum=8;break;
  91.                         case 0x0d:keynum=9;break;
  92.                         case 0x0b:keynum=10;break;
  93.                         case 0x07:keynum=11;break;
  94.                  }
  95.                  while(temp!=0x0f)
  96.                  {
  97.                     temp=P1;
  98.                 temp&=0x0f;
  99.                  }
  100.           }
  101.    }
  102.    P1=0xff;
  103.    P14=0;//**************扫描第四行**********************
  104.    temp=P1;
  105.    temp&=0x0f;
  106.    if(temp!=0x0f)
  107.    {
  108.       delay(10);
  109.           temp=P1;
  110.           temp&=0x0f;
  111.           if(temp!=0x0f)
  112.           {
  113.              temp=P1;
  114.                  temp&=0x0f;
  115.                  switch(temp)
  116.                  {
  117.                     case 0x0e:keynum=12;break;
  118.                         case 0x0d:keynum=13;break;
  119.                         case 0x0b:keynum=14;break;
  120.                         case 0x07:keynum=15;break;
  121.                  }
  122.                  while(temp!=0x0f)
  123.                  {
  124.                     temp=P1;
  125.                 temp&=0x0f;
  126.                  }
  127.           }
  128.    }
  129.    return keynum;
  130. }
  131. //********************显示子程序*************************
  132. void Display(uint num)
  133. {
  134.    uint ge,shi,bai,qian;
  135.    qian=num/1000;
  136.    P0=table[qian];
  137.    P2=0xfe;
  138.    delay(10);
  139.    P2=0xff;
  140.    bai=num%1000/100;
  141.    P0=table[bai];
  142.    P2=0xfd;
  143.    delay(10);
  144.    P2=0xff;
  145.    shi=num%100/10;
  146.    P0=table[shi];
  147.    P2=0xfb;
  148.    delay(10);
  149.    P2=0xff;
  150.    ge=num%10;
  151.    P0=table[ge];
  152.    P2=0xf7;
  153.    delay(10);
  154.    P2=0xff;
  155. }

  156. void Init(void)
  157. {
  158.    EA=1;//**************开总中断
  159.    EX1=1;//*************开外部中断0
  160.    IT1=0;//*************设置为电平触发方式
  161. }
  162. //*********************主程序***************************
  163. void main(void)
  164. {  
  165.   uint i,count1;
  166.   Init();
  167.    while(1)
  168.    {   
  169.       count=keyscan();   //调用扫键子程序
  170.       Display(num);
  171.    }
  172. }
  173. //*********************END******************************


  174. //*********************中断子程序************************
  175. void Init1() interrupt 2
  176. {  
  177.    count=keyscan();
  178.    num=num*10+count;
  179.    if(num>9999)
  180.      num=num%10;
  181. }//**********

复制代码


51hei浏览器截图20200426152123.png (89.26 KB, 下载次数: 72)

51hei浏览器截图20200426152123.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:489443 发表于 2020-4-26 16:18 | 只看该作者
硬件连线有没有错误
回复

使用道具 举报

板凳
ID:332444 发表于 2020-4-26 16:29 | 只看该作者
回复

使用道具 举报

地板
ID:718936 发表于 2020-4-26 16:48 | 只看该作者
harry1 发表于 2020-4-26 16:18
硬件连线有没有错误

连线没啥问题
回复

使用道具 举报

5#
ID:213173 发表于 2020-4-26 17:58 | 只看该作者
//*********************主程序***************************
void main(void)
{  
//        uint i,count1;
        Init();
        while(1)
        {   
                count=keyscan();   //调用扫键子程序
//                Display(num);
                Display(count); //显示键值
        }
}
回复

使用道具 举报

6#
ID:718936 发表于 2020-4-26 19:32 | 只看该作者
wulin 发表于 2020-4-26 17:58
//*********************主程序***************************
void main(void)
{  

改了之后,能显示出,但只能显示0--15 无法显示四位数
回复

使用道具 举报

7#
ID:70069 发表于 2020-4-26 22:24 | 只看该作者
void main(void)
{  
  uint i=0,count1=0;
  Init();
   while(1)
   {   
      count1=keyscan();   //调用扫键子程序

      Display(i);       
        if(count1!=0)
        {i=i*10+count1;}
      if(i>9999)
        i=i%10;       
   }
}
回复

使用道具 举报

8#
ID:739736 发表于 2020-4-28 00:10 | 只看该作者
图中连线没有是问题的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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