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"
|
2024-01-15 20:30:02 +08:00
|
|
|
|
#include "time0.h"
|
2023-12-29 00:57:13 +08:00
|
|
|
|
|
2024-01-15 20:30:02 +08:00
|
|
|
|
int HH=0, MM=0, SS=0;
|
|
|
|
|
int temp_value=0;
|
2023-12-29 00:57:13 +08:00
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* 函 数 名 : main
|
|
|
|
|
* 函数功能 : 主函数
|
|
|
|
|
* 输 入 : 无
|
|
|
|
|
* 输 出 : 无
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
void main(void)
|
2024-01-15 20:30:02 +08:00
|
|
|
|
{
|
2023-12-29 00:57:13 +08:00
|
|
|
|
u8 i=0;
|
|
|
|
|
u8 temp_buf[5];
|
|
|
|
|
|
|
|
|
|
uart_init(0XFA);//波特率为9600
|
|
|
|
|
ds18b20_init();//初始化DS18B20
|
2024-01-15 20:30:02 +08:00
|
|
|
|
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-14 23:11:38 +08:00
|
|
|
|
// printf("temp = %.1f\n", 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;
|
|
|
|
|
}
|
2024-01-15 20:30:02 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void time0(void) __interrupt (1) //定时器0中断函数
|
|
|
|
|
{
|
|
|
|
|
static u16 i;//定义静态变量i
|
|
|
|
|
TH0=0XFC; //给定时器赋初值,定时1ms
|
|
|
|
|
TL0=0X18;
|
|
|
|
|
i++;
|
|
|
|
|
if(i==1000)
|
|
|
|
|
{
|
|
|
|
|
i=0;
|
|
|
|
|
LED1=!LED1;
|
|
|
|
|
|
|
|
|
|
SS ++;
|
|
|
|
|
if (SS == 60){
|
|
|
|
|
SS = 0;
|
|
|
|
|
MM ++;
|
|
|
|
|
}
|
|
|
|
|
if(MM == 60){
|
|
|
|
|
MM = 0;
|
|
|
|
|
HH ++;
|
|
|
|
|
}
|
|
|
|
|
printf("%02d:%02d:%02d temp = %.1f\r\n", HH, MM, SS, temp_value/10.0);
|
|
|
|
|
}
|
2023-12-29 00:57:13 +08:00
|
|
|
|
}
|