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储存的寄存器发生冲突,不知是否是因为这个问题。希望得到大家的帮助!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
uchar key_pro7(void)
{
if(!key_1) // key1==0
delay(10) ; //延时20毫秒,消除抖动干扰
if(!key_1)
{
// while(!key_1); // 松手检测
return 1;
}
}
一看就是有问题的啊
编译时是有一个警告,但是我是这个函数的警告!说真的我真不明白错在哪里,还请多多指教!
请阁下多多指教!
uchar key_pro7(void)
{
if(!key_1) // key1==0
delay(10) ; //延时20毫秒,消除抖动干扰
if(!key_1)
{
// while(!key_1); // 松手检测
return 1;
}
}
-----------------------------------------------------------
if(!key_1) 不成立的话 没有明确的返回啊。。不知道机器执行的时候会给你返回个什么值哦
试试
uchar key_pro7(void)
{
if(!key_1) // key1==0
delay(10) ; //延时20毫秒,消除抖动干扰
if(!key_1)
{
// while(!key_1); // 松手检测
return 1;
}
return 0;
}
一周热门 更多>