微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用52单片机学习板上的2个按键,4个数码管,实现以下功能:

用52单片机学习板上的2个按键,4个数码管,实现以下功能:

时间:10-02 整理:3721RD 点击:
用52单片机学习板上的2个按键,4个数码管,实现以下功能:
1. 不按按键,数码管灭;
2. 按下第1个按键,数码管显示“dlnu”;再按一下第1个按键,数码管显示“xtxy”;再按一下第1个按键,数码管显示“dzxx”;再按第1个键,显示“dlnu”.....,依次循环;
3.按下第2个按键,数码管灭。

求大神们教教我

把你想显示的那三个字符串的编码变成三个数组,记住按下的次数,依次显示就ok了,很简单

编了 但是按下按键有显示但是松手就只有最后一个字母了,求大神帮解决

有两种可能,一种是按键发生了抖动,第二种是你按键状态没有记录OK,配套的程序也出了问题。

小编上传你的程序看看

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^4;
sbit s2=P3^5;
uchar code u1[]={0x5e,0x38,0x37,0x3e};
uchar code u2[]={0x76,0x78,0x76,0x6e};
uchar code u3[]={0x5e,0x5b,0x76,0x76};
uchar code u4[]={0xfb,0xf7,0xef,0xdf};
uint i,j,x;
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void display()
{        if(x==1)
        {        
                for(i=0;i<4;i++)
                {
                        wela=1;
                        P0=0xff;
                        wela=0;
                        wela=1;
                        P0=u4;
                        wela=0;
                        dula=1;
                        P0=u1;
                        dula=0;
                        delay(5);
                }
         }
         if(x==2)
        {  for(i=0;i<4;i++)
                {        wela=1;
                        P0=0xff;
                        wela=0;
                        wela=1;
                        P0=u4;
                        wela=0;
                        dula=1;
                        P0=u2;
                        dula=0;
                        delay(5);
       
                }
         }
         if(x==3)
        {  for(i=0;i<4;i++)
                {        wela=1;
                        P0=0xff;
                        wela=0;
                        wela=1;
                        P0=u4;
                        wela=0;
                        dula=1;
                        P0=u3;
                        dula=0;
                        delay(5);
                }
         }
         if(x==4)
         {
                 x=1;
         }
}
void main()
{         x=1;
        while(1)
        {
                if(s1==0)
                {          delay(10);
                          if(s1==0)
                          {          while(!s1)
                                    display();
                                  x++;
                          }
        }
                if(s2==0)
                {          delay(10);
                          if(s2==0)
                          {          while(!s2)
                                            wela=1;
                                        P0=0xff;
                                        wela=0;
                          }
                }        
        }
}

这是要给你写出来吗?

大致上扫了一眼,是主程序的问题!没仔细看,明日来答。

能写出来当然是非常感激,不方便稍微指点一下也行

我也是来学习的

把显示函数从读键程序中移出来。

那就是你的显示程序有问题

调了,不管用啊 能不能详细说说

void main()
{         x=1;
        while(1)
        {
               display();
                if(s1==0)
                {          delay(10);
                          if(s1==0)
                          {          while(!s1)
                                    
                                  x++;
                          }
        }
                if(s2==0)
                {          delay(10);
                          if(s2==0)
                          {          while(!s2)
                                            wela=1;
                                        P0=0xff;
                                        wela=0;
                          }
                }         
        }
}

这样按键后就不能变化了额

而且不按之前应该是不亮的

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^4;
sbit s2=P3^5;
uchar code u1[]={0x5e,0x38,0x37,0x3e};
uchar code u2[]={0x76,0x78,0x76,0x6e};
uchar code u3[]={0x5e,0x5b,0x76,0x76};
uchar code u4[]={0xfb,0xf7,0xef,0xdf};
uint i,j,x;
bit biaozhi=0;           //设一个标志
void delay(uint z)
{
        uint a,y;//避免与全局变量重名,否则可能产生未知的错误
        for(a=z;a>0;a--)
                for(y=110;y>0;y--);
}
void display()
{            if(biaozhi)//根据标志显示
        {  
        if(x==1)
        {         
                for(i=0;i<4;i++)
                {
                        wela=1;
                        P0=0xff;
                        wela=0;
                        wela=1;
                        P0=u4;
                        wela=0;
                        dula=1;
                        P0=u1;
                        dula=0;
                        delay(5);
                }
         }
         if(x==2)
        {  for(i=0;i<4;i++)
                {        wela=1;
                        P0=0xff;
                        wela=0;
                        wela=1;
                        P0=u4;
                        wela=0;
                        dula=1;
                        P0=u2;
                        dula=0;
                        delay(5);
        
                }
         }
         if(x==3)
        {  for(i=0;i<4;i++)
                {        wela=1;
                        P0=0xff;
                        wela=0;
                        wela=1;
                        P0=u4;
                        wela=0;
                        dula=1;
                        P0=u3;
                        dula=0;
                        delay(5);
                }
         }
         if(x==4)
         {
                 x=1;
         }
      }
}
void main()
{         x=1;
        while(1)
        {                      display();
                if(s1==0)
                {          display();
                          if(s1==0)
                          {          while(!s1)
                                    display();
                                    biaozhi=1;
                                  x++;
                          }
        }
                if(s2==0)
                {          delay(10);
                          if(s2==0)
                          {          while(!s2)
                                            wela=1;
                                        P0=0xff;
                                        wela=0;
                          }
                }         
        }
}
仅是一种思路,并未实际验证,供参考。

真心感谢!

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

网站地图

Top