uart_temp/src/main.c

104 lines
2.6 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"
#include "time0.h"
2023-12-29 00:57:13 +08:00
int HH=0, MM=0, SS=0;
2024-01-15 21:03:15 +08:00
int send_tmp = 0;
2023-12-29 00:57:13 +08:00
/*******************************************************************************
* : main
* :
* :
* :
*******************************************************************************/
void main(void)
{
2023-12-29 00:57:13 +08:00
u8 i=0;
u8 temp_buf[5];
2024-01-15 21:03:15 +08:00
int temp_value = 0;
2023-12-29 00:57:13 +08:00
uart_init(0XFA);//波特率为9600
ds18b20_init();//初始化DS18B20
time0_init();//定时器0中断配置
2023-12-29 00:57:13 +08:00
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-15 21:03:15 +08:00
if(send_tmp == 1) {
send_tmp = 0;
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;
}
}
void time0(void) __interrupt (1) //定时器0中断函数
{
static u16 i;//定义静态变量i
TH0=0XFC; //给定时器赋初值定时1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
2024-01-15 21:03:15 +08:00
send_tmp = 1;
SS ++;
if (SS == 60){
SS = 0;
MM ++;
}
if(MM == 60){
MM = 0;
HH ++;
}
}
2023-12-29 00:57:13 +08:00
}