原本程序
#include "sys.h"
#include "led.h"
#include "usart.h"
#include "IIC.h"
#include "oled.h"
#include "30205.h"
char dis0[16];int wendu_beep=37 ;int tiwen;
int main()
{
double tem ; //摄氏度
delay_init();
max_init ();
LED_Init();
uart1_init(9600);
YHGUI_Config(); //OLED初始化
YHGUI_DispString(0,0,"体表温度监测系统",16,1); //OLED显示初始化
NVIC_Configuration(); //=====中断优先级分组,其中包含了所有的中断优先级的配置,方便管理和一次性修改。
while(1)
{
if((int)tiwen>wendu_beep){beep=1;delay_ms(50);beep=0;}
sprintf(dis0,"温度:%d℃ ",(int)tiwen);
YHGUI_DispString(0,16,dis0,16,1); //显示
sprintf(dis0,"阈值:%d℃ ",wendu_beep);
YHGUI_DispString(0,32,dis0,16,1); //显示
tem = GetTemperature1();
if( tem>1)
tiwen=tem;
printf("#S#%d#%d#1#1#",(int)tiwen,(int)wendu_beep);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
delay_ms(1000);
}
}
void USART1_IRQHandler(void) //串口1中断服务程序//接收中断
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
if(Res == 'A')wendu_beep=wendu_beep+1;
if(Res == 'B')wendu_beep=wendu_beep-1;
}
}
是可以正常输出整数温度的,但是改成sprintf(wjk, "温度:%.1f℃", tiwen); float tiwen; 就出现-0.0的跳变。
视频如下:
尝试过将float tiwen改成double和%.1g℃也都不行。
求解答
最后,我们,设置了个条件,将温度为0跳过。但是实际问题却没有解决。