本帖最后由 华仔stm32 于 2022-6-8 15:47 编辑
//蜂鸣器报警
void warn(uint s)
{
uchar i;i=s;
dula=0;wela=0;
beep=0;
while(i--)
{
display(getTmpValue());
}
beep=1;
P1=0XFF;
i=s;
while(i--)
{
display(getTmpValue());
}
}
我看了一下你的这个函数,是亲自写的还是借鉴网上面的。这种有多个任务的,建议你呀,先去看一下“状态机”,你这一个while()阻塞式的等待,运用到实际工程中是很不科学的。
建议你这么做:
sta_temp (定义三个状态,0,低温,1、正常,2、高温)
sta_beep (0、关闭,1,开启)
然后:
H_temp =20度
L_temp = 10度
int temp;
get_temp()
{
temp = getTmpValue()
if(temp>H_temp)
sta_temp = 2;
esle if (temp
sta_temp =0;
else
sta_temp = 1;
}
main()
{
//获取温度
get_temp();
//更新蜂鸣器状态
switch (sta_temp)
case 低温:
sta_beep = 1
case 正常:
sta_beep = 0
case 高温:
sta_beep = 1
//显示温度
display(temp)
}
要按状态机的思路都写,少用while()去阻塞式的写程序。最好学习一下定义时,达到一定时间,去获取温度,其余时间用来判温度的状态,根据状态来更新蜂鸣器的状态。希望对你有帮助。
本帖最后由 华仔stm32 于 2022-6-8 15:47 编辑
//蜂鸣器报警
void warn(uint s)
{
uchar i;i=s;
dula=0;wela=0;
beep=0;
while(i--)
{
display(getTmpValue());
}
beep=1;
P1=0XFF;
i=s;
while(i--)
{
display(getTmpValue());
}
}
我看了一下你的这个函数,是亲自写的还是借鉴网上面的。这种有多个任务的,建议你呀,先去看一下“状态机”,你这一个while()阻塞式的等待,运用到实际工程中是很不科学的。
建议你这么做:
sta_temp (定义三个状态,0,低温,1、正常,2、高温)
sta_beep (0、关闭,1,开启)
然后:
H_temp =20度
L_temp = 10度
int temp;
get_temp()
{
temp = getTmpValue()
if(temp>H_temp)
sta_temp = 2;
esle if (temp
sta_temp =0;
else
sta_temp = 1;
}
main()
{
//获取温度
get_temp();
//更新蜂鸣器状态
switch (sta_temp)
case 低温:
sta_beep = 1
case 正常:
sta_beep = 0
case 高温:
sta_beep = 1
//显示温度
display(temp)
}
要按状态机的思路都写,少用while()去阻塞式的写程序。最好学习一下定义时,达到一定时间,去获取温度,其余时间用来判温度的状态,根据状态来更新蜂鸣器的状态。希望对你有帮助。
举报