大佬幫忙看一下
單片機源程序如下:
#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變量
}
} |