52单片机的串口通信和函数返回值之间奇怪问题

2020-01-30 14:09发布


sbit key_1 = P0^0;       
sbit key_2 = P0^1;       
sbit key_3 = P0^2;   
sbit key_4 = P0^3;       
sbit key_5 = P0^4;  
sbit key_6 = P0^5;

void main(void)
{        uchar i=0,min=12,sec=0,s_24=24,s0_1;
    timer_init();
        uart_init();
        while(1)
        {        
        min=count/10/60;
        sec=count/10%60;
        s0_1=count%10;        
        display(min,sec,s0_1,s_24);        //七位数码管显示函数( min,sec,s0_1,s_24)
        send_uart(sec);
        s_24=key_pro7();
        }
}

void send_uart(uchar dat)
{
  SBUF=dat;
  while(!TI);
  TI=0;
}
void uart_init()
{
    TMOD|=0x20;//设置定时器1为工作方式2
        TH1=0xfd;//设置串口通信的波特率为9600
        TL1=0xfd;
        TR1=1;//开启定时器1
        SM0=0;
        SM1=1;
}
                                 
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0
         delay(10) ;  //延时20毫秒,消除抖动干扰
                  if(!key_1)
         {
                // while(!key_1);        // 松手检测
                 return 1;
          }                                         

       
}

不知道为什么send_uart(sec);函数在主函数时,s_24=key_pro7(); 也在主函数时,s_24的数值的变化就变成sec的变化;
我怀疑是函数返回值储存的寄存器和uart储存的寄存器发生冲突,不知是否是因为这个问题。希望得到大家的帮助!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。