我的项目需要同时读取水温和水位,但是为什么我两个同时读取时 DS18B20的反映速度会比 只读取一个的时候慢?请各位指教、
以下是代码:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "ds18b20.h"
#include "adc.h"
int main(void)
{
u8 t=0;
u16 adcx;
float temp;
short temperature;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为 115200
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
Adc_Init();
POINT_COLOR=RED; //设置字体为红 {MOD}
LCD_ShowString(30,50,200,16,16,"YO MAN");
LCD_ShowString(30,70,200,16,16,"WELCOME");
while(DS18B20_Init()) //DS18B20初始化
{
LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
delay_ms(200);
LCD_Fill(30,130,239,130+16,WHITE);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
POINT_COLOR=BLUE;//设置字体为蓝 {MOD}
LCD_ShowString(30,150,200,16,16,"Temp: . C");
LCD_ShowString(30,170,200,16,16,"ADC_CH0_VAL:");
LCD_ShowString(30,190,200,16,16,"ADC_CH0_VOL:0.000V");
while(1)
{
if(t%10==0) //每100ms读取一次
{
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
LCD_ShowChar(30+40,150,'-',16,0); //显示负号
temperature=-temperature; //转为正数
}else LCD_ShowChar(30+40,150,' ',16,0); //去掉负号
LCD_ShowNum(30+40+8,150,temperature/10,2,16); //显示正数部分
LCD_ShowNum(30+40+32,150,temperature%10,1,16); //显示小数部分
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
LED1=!LED1;
}
adcx=Get_Adc_Average(ADC_Channel_1,10);
LCD_ShowxNum(156,170,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,190,adcx,1,16,0);//显示电压值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,190,temp,3,16,0X80);
LED0=!LED0;
delay_ms(250);
}
}
一周热门 更多>