全部资料下载:
DS18B20 RES485 液晶1602 显示.rar
(98.88 KB, 下载次数: 29)
主机程序:
- #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];
- }
- }
复制代码
|