微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我是新手,请教大家一个小小的问题…………谢谢大家

我是新手,请教大家一个小小的问题…………谢谢大家

时间:10-02 整理:3721RD 点击:
我想控制按键k1-k7依次亮数码管的a-g灯,我写的程序
#include<reg52.h>
main(void)
{
    unsigned char table[]={0xfe,0xfd,0xfb,0xf7,
                           0xef,0xdf,0xbf};
    while(1)
     {
      switch (P3)
              {
                 case 0xfe:P1=table[0];break;
                 case 0xfd:P1=table[1];break;
                 case 0xfb:P1=table[2];break;
                 case 0xf7:P1=table[3];break;
                 case 0xef:P1=table[4];break;
                 case 0xdf:P1=table[5];break;
                 case 0xbf:P1=table[6];break;
                 default:break;
              }
        }
}
结果变成按键2-8显示我想要的结果了、、、、、

看你硬件怎么接法了。

看看是不是原理图看错了

#include<reg52.h>
sbit k1=P1^0;
sbit k2=P1^1;
          .
          .
          .
          .
sbit k7=P1^6;
void main()
{
  while (1)
  {
          if (k1=0;)//有的是低电平有效
        P2=0x01;  //高电平有效
        if(k1=0)
        P2=0x02;
         
         ...
         if(k7=0)
         P2=0x40;
  }
}
简单实用的方法

#include<reg52.h>
main(void)
{
    unsigned char table[]={0xfe,0xfd,0xfb,0xf7,
                           0xef,0xdf,0xbf};
    while(1)
     {
      switch (P3)     //按键的键码值
              {
                 case 0xfe:P1=table[0];break;
                 case 0xfd:P1=table[1];break;
                 case 0xfb:P1=table[2];break;
                 case 0xf7:P1=table[3];break;
                 case 0xef:P1=table[4];break;
                 case 0xdf:P1=table[5];break;
                 case 0xbf:P1=table[6];break;
                 default:P1=0xff;break;  //把所有的LED灯熄灭
              }
        }
}
这个 程序没有消抖,在对实时性要求不高的场合可以用

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top