uart_temp/src/main.c

80 lines
2.2 KiB
C
Raw Normal View History

2023-12-29 00:57:13 +08:00
/**************************************************************************************
PRECHIN
www.prechin.net
DS18B20温度传感器实验
线
DS18B20温度传感器
***************************************************************************************/
#include "public.h"
#include "smg.h"
#include "ds18b20.h"
#include "uart.h"
#include "stdio.h"
/*******************************************************************************
* : main
* :
* :
* :
*******************************************************************************/
void main(void)
{
u8 i=0;
int pre_temp_value=0;
int temp_value=0;
u8 temp_buf[5];
uart_init(0XFA);//波特率为9600
ds18b20_init();//初始化DS18B20
while(1)
{
i++;
if(i%50==0)//间隔一段时间读取温度值,间隔时间要大于温度传感器转换温度时间
temp_value=ds18b20_read_temperture()*10;//保留温度值小数后一位
// 数码管显示
if(temp_value<0)//负温度
{
temp_value=-temp_value;
temp_buf[0]=0x40;//显示负号
}
else
temp_buf[0]=0x00;//不显示
temp_buf[1]=gsmg_code[temp_value/1000];//百位
temp_buf[2]=gsmg_code[temp_value%1000/100];//十位
temp_buf[3]=gsmg_code[temp_value%1000%100/10]|0x80;//个位+小数点
temp_buf[4]=gsmg_code[temp_value%1000%100%10];//小数点后一位
smg_display(temp_buf,4);
// 串口打印
if(pre_temp_value != temp_value){
pre_temp_value = temp_value;
printf("temp = %f\n", temp_value/10.0);
}
}
}
void uart(void) __interrupt (4) //串口通信中断函数
{
u8 rec_data;
if(RI)
{
RI = 0; //清除接收中断标志位
rec_data=SBUF; //存储接收到的数据
SBUF=rec_data; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志?
}
if(TI)
{
TI = 0;
busy = 0;
}
}