标题:
仿真DS18B20温度计 RES485传到从机,再在lcd1602显示出来
[打印本页]
作者:
51黑ff
时间:
2016-9-12 00:27
标题:
仿真DS18B20温度计 RES485传到从机,再在lcd1602显示出来
0.png
(20.06 KB, 下载次数: 61)
下载附件
2016-9-12 00:26 上传
0.png
(69.48 KB, 下载次数: 88)
下载附件
2016-9-12 00:25 上传
全部资料下载:
DS18B20 RES485 液晶1602 显示.rar
(98.88 KB, 下载次数: 29)
2016-9-12 00:27 上传
点击文件名下载附件
下载积分: 黑币 -5
主机程序:
#include<main.h>
#include<DS18B20.h>
void delay(uint x)
{
uchar m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/***
**函数名:UART_init()
**功能: 串口初始化
****/
void UART_init()
{
TMOD=0x20;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;
en=1; //485一直在写
}
/***
**函数名:UART_sent()
**功能: 串口发送一个字节
****/
void UART_sent(uchar date)
{
SBUF=date;
while(!TI);
TI=0;
}
void main()
{
int ans;
uchar flag;
UART_init();
while(1)
{
DS18B20_start_change(); //开始读温度
delay(1000);
ans=DS18B20_read_date();
/******判断是否为负温度******/
if(ans<0)
{
ans=-ans;
flag=1;
}
else
flag=0;
if(flag==1) //负温度,发送‘-’
UART_sent('-');
else
UART_sent('+'); //正温度,发送‘+’
UART_sent( ( uchar )ans);
}
}
复制代码
从机程序:
#include<main.h>
#include<1602.h>
#include<ds1302.h>
uchar time[]={40,59,23,25,7,3,12}; //2012年7月25日 23:59: 40
uchar code tab1[]="20 - - ";
uchar code tab2[]="Temp: : :";
uchar flag;
uchar wendu;
void delay(uint x)
{
uint m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/****
******* 串口初始化函数
*****/
void uart_init()
{
TMOD=0x20; //9600bps
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;
ES=1;
EA=1;
UART_EN=0; //串口一直处于接收状态
}
void main()
{
lcd_init();
uart_init();
lcd_write_str(0x84,tab1);
lcd_write_str(0xc0,tab2);
DS1302_set_time(&time);
while(1)
{
DS1302_read_time(&time);
lcd_write_time(0x86,time[6]); //年
switch(time[5]) //星期
{
case 1: lcd_write_str(0x8F,"MON");break;
case 2: lcd_write_str(0x8F,"TUE");break;
case 3: lcd_write_str(0x8F,"WED");break;
case 4: lcd_write_str(0x8F,"THU");break;
case 5: lcd_write_str(0x8F,"FRI");break;
case 6: lcd_write_str(0x8F,"SAT");break;
case 7: lcd_write_str(0x8F,"SUN");break;
}
lcd_write_time(0x89,time[4]); //月
lcd_write_time(0x8c,time[3]); //日
lcd_write_time(0xc9,time[2]); //时
lcd_write_time(0xcc,time[1]); //分
lcd_write_time(0xcf,time[0]); //秒
if(flag==1) //显示负温度
{
lcd_write_com(0xc5);
lcd_write_date('-');
lcd_wendu(0xc6,wendu);
}
else //显示正温度
{
// lcd_write_com(0xc5);
// lcd_write_date(' ');
lcd_wendu(0xc5,wendu);
lcd_write_com(0xc7);
lcd_write_date(' ');
}
}
}
/****
******* 串口中断服务程序函数
*****/
void ser() interrupt 4
{
static uchar string[2],i;
if(RI)
{
RI=0;
string[i++]=SBUF;
if(i>1)
i=0;
if(string[0]=='-')
{
flag=1; //负温度
}
else
{
flag=0;
}
wendu=string[1];
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1