uart_temp/src/main.c

97 lines
2.5 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];
int HH=0, MM=0, SS=0;
2023-12-29 00:57:13 +08:00
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);
// 串口打印
2024-01-14 23:11:38 +08:00
// if(pre_temp_value != temp_value){
// pre_temp_value = temp_value;
// printf("temp = %.1f\n", temp_value/10.0);
// }
2023-12-29 01:33:22 +08:00
// delay
if(temp_value != 0) {
SS ++;
if (SS == 60){
SS = 0;
MM ++;
}
if(MM == 60){
MM = 0;
HH ++;
}
delay_ms(1000);
printf("%02d:%02d:%02d temp = %.1f\r\n", HH, MM, SS, temp_value/10.0);
}
2023-12-29 00:57:13 +08:00
}
}
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;
}
}