怎样实现两个功能的切换?

2019-07-15 15:44发布

这是代码部分:
//**头文件的声明**//
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int//宏定义

//**声明子函数**//
void delayms(uint);
void led();
void segment7();
uint Key_Scan();

unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
                                 0x7F ,0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};

sbit k1 = P3^7;
uint count=0;
/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数,包含用开关切换功能函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main()
{
while(1)
{
         if(count%2)
         segment7();
         else
         led();
}
}

/*******************************************************************************
* 函 数 名         : led
* 函数功能                   : led流水灯,4s完成8个LED灯的闪烁
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void led()
{
  unsigned char LED;
  LED = 0x01;          //即:0000 0001   低电平点亮
  while (1)
        {
             P2 = LED;
                 delayms(480);
                 LED = LED << 1;    //点亮下一个LED "<<"为左移位,右边补上0,即:0000 0001->0000 0010
                  if (P2 == 0x00)        //当它全亮的时候,重新赋值
                 {
                         LED = 0x01;          // 0000 0001
                 }
                                    
        }
}

/*******************************************************************************
* 函 数 名         : segment7
* 函数功能                   : 7段数码管(cc极)的动态显示
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void segment7()
{
        unsigned char i = 0;
        while(1)
        {
                for(i=0;i<16;i++)
                {
                         P0=DIG_CODE;
                         delayms(480);
            }                                
    }

}

/*******************************************************************************
* 函 数 名         : Key_Scan
* 函数功能                   : 按键消抖,并输出键值
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
uint Key_Scan()
{
    if (k1==0)
        {
         delayms(10);
         if (k1==0)
         {
                 while(!k1);
                 delayms(10);
                 while(!k1);
                 count++;
         }        
        }
        return count;
}
/*******************************************************************************
* 函 数 名         : delayms
* 函数功能                   : 延时函数,sec为多少,就延迟多少毫秒。
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void delayms(uint sec)//自定义的延迟函数
          {
                  uint i,j;
                  for(i=sec;i>0;i--)//sec为多少,就延迟多少毫秒。
                      for(j=110;j>0;j--);  
          }
这个是原理图
1.PNG

用按键不能切换LED灯和数码管,,求助。。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。