2701|3

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

矩阵键盘扫描显示,编译通过,但实验板上没有效果,困惑呀!!! [复制链接]

1芯积分

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay10ms();
void delay(uint t);
void display(uint num,uchar weishu);
uchar keyscan();
sbit wei=P2^7;
sbit duan=P2^6;
uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code duanma[]={    0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void main()
{
   while(1)
    {
       if(keyscan()!=16)
      display(keyscan(),1);
 }
  


}

 void delay(uint t)
{
   while(t--)
    ; 
}
 
void display(uint num,uchar weishu)
{ uchar i;
  while(1)
  {
   for(i=0;i<weishu;i++) 
    {
      P0=0xff;    //很重要,用来每次显示前的各段清除
  duan=1;
  duan=0;
   
   
   
    P0=weima;
    wei=1;
    wei=0;
    if(num<=9)
      P0=duanma[num];
    else if(num<=99)
      {
     switch (i)
       {
      case 0: P0=duanma[num/10];break;
      case 1: P0=duanma[num%10];break;
    }
   }
  else if(num<=999)
    {  switch (i)
     { case 0: P0=duanma[num/100];break;
    case 1: P0=duanma[num/10%10];break;
    case 2: P0=duanma[num%10]; break;
        }
    }
  else if(num<=9999)
    { 
       switch (i)
     
   {case 0: P0=duanma[num/1000];break;
    case 1: P0=duanma[num/100%10];break;
    case 2: P0=duanma[num/10%10];break;
    case 3: P0=duanma[num%10];break;
    }
    }
  duan=1;
  duan=0;
  delay(300);
 }
   }


void delay10ms()
{
  unsigned char i,j;
  for(i=20;i>0;i--)
  for(j=248;j>0;j--);
}
uchar keyscan()
{ uchar templ,temph,key;
  P3=0x0f;
  temph=P3;
  if(temph!=0x0f)
    {
    delay10ms();
    temph=P3;
    if(temph!=0x0f)
       {
      temph=P3;
      P3=0xf0;
      templ=P3;
      while(P3!=0xf0);
      key=templ|temph;
      switch (key)
      {
      case 01111110 : return 0;break;
      case 10111110 : return 1;break;
      case 11011110 : return 2;break;
      case 11101110 : return 3;break;
      case 01111101 : return 4;break;
      case 10111101 : return 5;break;
      case 11011101 : return 6;break;
      case 11101101 : return 7;break;
      case 01111011 : return 8;break;
      case 10111011 : return 9;break;
      case 11011011 : return 10;break;
      case 11101011 : return 11;break;
      case 01110111 : return 12;break;
      case 10110111 : return 13;break;
      case 11010111 : return 14;break;
      case 11100111 : return 15;break;

      }
    }
  
 }
  return 16;
}

此帖出自51单片机论坛

最新回复

貌似程序跑飞了!  详情 回复 发表于 2011-12-2 09:50
点赞 关注
 

回复
举报

535

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
板子有没有连接错误,一般买得板子有跳线什么得,你懂得。看看,程序我明天再看吧!早上手机看了累死了!
此帖出自51单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

_Justin

编译是只要你的语法没有问题就能通过编译,但是要程序跑起来那就另说了,还得调试的。。。
又看了看,发现你的程序有点问题吧,能编译通过我感觉真的很疼!
1.在void display()这个函数中,你把P0=weima;至少知道点是那个wei吧
2.在主函数中,你的display(keyscan(),1);这里明明定义就一个位数,下面的那个for(i=0;i 3.就是keyscan()函数中了,我猜你用的是矩阵键盘吧,要是这样的话。。。。。。似乎就不会了吧!

[ 本帖最后由 _Justin 于 2011-10-24 16:20 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

4
 
貌似程序跑飞了!
此帖出自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
快速回复 返回顶部 返回列表