這個程序一運行,溫度就不會改變,每次都需要重新按一次rest按鈕,溫度才會改變,怎么去解決這個問題
單片機源程序如下:
#include "string.h"
#include "stm32f10x.h"
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "tftlcd.h"
#include "beep.h"
#include "key.h"
#include "ds18b20.h"
#include "24l01.h"
#include "spi.h"
u8 waring[] = {10,35};
u8 *p = waring;
u8 data[200];
int main(void)
{
u8 key,mode;
u8 t1=0;
u16 t2=0;
u8 tmp_buf[1];
float temperature;
int tmp;
NRF24L01_Init();
LED_Init();
KEY_Init();
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LCD_Init();
BEEP_Init();
POINT_COLOR=RED;
LCD_ShowString(30,80,lcddev.width,lcddev.height,16,"4 ZU ZY PCC LXK YQK");
while(DS18B20_Init())
{
LCD_ShowString(30,100,lcddev.width,lcddev.height,16,"DS18B20 Error");
delay_ms(200);
LCD_Fill(30,100,100,66,WHITE);
delay_ms(200);
}
LCD_ShowString(30,100,lcddev.width,lcddev.height,16,"DS18B20 OK!");
while(NRF24L01_Check())
{
LCD_ShowString(30,120,lcddev.width,lcddev.height,16,"NRF24L01 Error");
delay_ms(200);
LCD_Fill(30,120,239,120+16,WHITE);
delay_ms(200);
}
LCD_ShowString(30,120,lcddev.width,lcddev.height,16,"NRF24L01 OK");
POINT_COLOR=BLUE;
LCD_ShowString(30,150,lcddev.width,lcddev.height,16,"xiaxian:");
LCD_ShowString(30,170,lcddev.width,lcddev.height,16,"shangxian:");
while(1)
{
if(t1%10==0)
{
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
LCD_ShowChar(30+80,190,'-',16,0);
temperature = -temperature;
}
else LCD_ShowChar(30+80,190,' ',16,0);
sprintf((char *)data,"temperature:%.2f",temperature);
LCD_ShowString(30,190,lcddev.width,lcddev.height,16,data);
LCD_ShowNum(30+80+8,150,waring[0],2,16);
LCD_ShowNum(30+80+8,170,waring[1],2,16);
}
t1++;
if(t1==20)
{
t1=0;
LED0 = !LED0;
}
delay_ms(10);
tmp = (int)temperature;
if((tmp<=waring[0]) || (tmp >= waring[1]))
{
BEEP = !BEEP;
LED1 = 1;
}
else
{
BEEP = 0;
LED1 = 0;
}
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
mode=0;
break;
}else if(key==KEY1_PRES)
{
mode=1;
break;
}
t2++;
if(t2==100)LCD_ShowString(10,210,lcddev.width,lcddev.height,16,"KEY0:RX_Mode KEY1:TX_Mode");
if(t2==200)
{
LCD_Fill(10,210,240,210+16,WHITE);
t2=0;
}
delay_ms(5);
}
LCD_Fill(10,210,240,210+16,WHITE);
POINT_COLOR=BLUE;
if(mode==0)
{
LCD_ShowString(30,210,lcddev.width,lcddev.height,16,"NRF24L01 RX_Mode");
LCD_ShowString(30,230,lcddev.width,lcddev.height,16,"Received DATA:");
NRF24L01_RX_Mode();
while(1)
{
if(NRF24L01_RxPacket(tmp_buf)==0)
{
if((tmp<=waring[0]) || (tmp >= waring[1]))
{
LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wendubaojin");
}
else
{
LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wenduzhengchang");
}
}else delay_us(100);
t2++;
if(t2==10000)
{
t2=0;
LED0=!LED0;
}
};
}else//TXģʽ
{
LCD_ShowString(30,210,lcddev.width,lcddev.height,16,"NRF24L01 TX_Mode");
NRF24L01_TX_Mode();
while(1)
{
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
LCD_ShowString(30,230,lcddev.width,lcddev.height,16,"Sended DATA:");
if((tmp<=waring[0]) || (tmp >= waring[1]))
{
LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wendubaojin");
}
else
{
LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wenduzhengchang");
}
key=mode;
for(t2=0;t2<32;t2++)
{
key++;
if(key>('~'))key=' ';
tmp_buf[t2]=key;
}
mode++;
if(mode>'~')mode=' ';
tmp_buf[0]=0;
}else
{
LCD_Fill(0,230,lcddev.width,230+16*3,WHITE);
LCD_ShowString(30,230,lcddev.width-1,32,16,"Send Failed ");
};
LED0=!LED0;
delay_ms(1500);
};
}
}
}
|