|
大佬幫忙看一下
單片機(jī)源程序如下:
#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; // 設(shè)置定時(shí)器1為工作方式2,8位自動(dòng)重裝載
TH1 = 0xFA; // 波特率9600,定時(shí)器1初始值
TL1 = 0xFA; // 波特率9600,定時(shí)器1初始值
TR1 = 1; // 啟動(dòng)定時(shí)器1
SCON = 0x50; // 設(shè)置串口為模式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; //讀出來(lái)的全是正數(shù)
temp_buf[4] = 0x40; //顯示負(fù)號(hào)
}
else temp_buf[4] = 0x00; //正數(shù)不顯示符號(hào)
temp_buf[0] = gsmg_code[received_data/1000]; //千位 串口發(fā)送的數(shù)據(jù)
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]; //個(gè)位
//temp_buf[1] = gsmg_code[temp_value/1000]; //百位 溫度數(shù)據(jù)
temp_buf[5] = gsmg_code[temp_value%1000/100]; //十位
temp_buf[6] = gsmg_code[temp_value%1000%100/10]|0x80; //個(gè)位和小數(shù)點(diǎn)
temp_buf[7] = gsmg_code[temp_value%1000%100%10]; //一位小數(shù)
smg_display(temp_buf,1); //數(shù)碼管全部打開(kāi)
}
}
// 串口接收中斷處理函數(shù)
void Serial_Receive() interrupt 4
{
if(RI) // 接收中斷標(biāo)志位
{
RI = 0; // 清除接收中斷標(biāo)志位
received_data = SBUF; // 將接收到的數(shù)據(jù)賦值給received_data變量
}
} |
|