大佬帮忙看一下
单片机源程序如下:
#include "public.h"
#include "ds18b20.h"
#include "smg.h"
u8 received_data;
void main()
{
u8 i = 0;
int temp_value;
u8 temp_buf[8];
ds18b20_init();
TMOD |= 0x20; // 设置定时器1为工作方式2,8位自动重装载
TH1 = 0xFA; // 波特率9600,定时器1初始值
TL1 = 0xFA; // 波特率9600,定时器1初始值
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式1,允许接收
PCON = 0X80; //波特
EA = 1; // 允许全局中断
ES = 1; // 允许串口中断
while(1)
{
i++;
if(i%50 == 0)
{
temp_value = ds18b20_read_temperature()*10;
}
if(temp_value<0)
{
temp_value = -temp_value; //读出来的全是正数
temp_buf[4] = 0x40; //显示负号
}
else temp_buf[4] = 0x00; //正数不显示符号
temp_buf[0] = gsmg_code[received_data/1000]; //千位 串口发送的数据
temp_buf[1] = gsmg_code[received_data%1000/100]; //百位
temp_buf[2] = gsmg_code[received_data%1000%100/10]; //十位
temp_buf[3] = gsmg_code[received_data%1000%100%10]; //个位
//temp_buf[1] = gsmg_code[temp_value/1000]; //百位 温度数据
temp_buf[5] = gsmg_code[temp_value%1000/100]; //十位
temp_buf[6] = gsmg_code[temp_value%1000%100/10]|0x80; //个位和小数点
temp_buf[7] = gsmg_code[temp_value%1000%100%10]; //一位小数
smg_display(temp_buf,1); //数码管全部打开
}
}
// 串口接收中断处理函数
void Serial_Receive() interrupt 4
{
if(RI) // 接收中断标志位
{
RI = 0; // 清除接收中断标志位
received_data = SBUF; // 将接收到的数据赋值给received_data变量
}
} |