多级通信测温系统程序单片机_第1页
多级通信测温系统程序单片机_第2页
多级通信测温系统程序单片机_第3页
多级通信测温系统程序单片机_第4页
多级通信测温系统程序单片机_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、附1:源程序代码一、主机#include#define uchar unsigned char#define uint unsigned intsbit beep=p35;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar recdata;uchar tmp;uint wei;sbit h1=p36;sbit l1=p05;sbit l2=p06;sbit l3=p07;void uart_int() tmod=0x21;

2、th1=0xfd; tl1=0xfd; scon=0xd0; th0=(65535-45872)/256; tl0=(65536-45872)%256; ea=1; tr1=1; tr0=1; et0=1; es=1; ea=1; ti=0; void delay(uint num) while(num-); void key() h1=0; if(l1=0) delay(10); if(l1=0) recdata=b; wei=11; while(!l1); if(l2=0) delay(10); if(l2=0) recdata=c; wei=12; while(!l2); void di

3、splay(uint temp)/显示程序 uchar a1,a2,a2t,a3; a1=temp/100; a2t=temp%100; a2=a2t/10; a3=a2t%10; p1=tablewei; p0=0xfe; delay(50); p1=tablea1;/显示十位 p0=0xfd; delay(50); p1=tablea2|0x80;/显示个位 p0=0xfb; delay(50); p1=tablea3;/显示分位 p0=0xf7; delay(50); void warn(uint s) uchar i; i=s; beep=0; p2=0x00; while(i-) d

4、isplay(tmp); beep=1; p2=0xff; i=s; while(i-) display(tmp); void deal(uint t) if(t50&t300) warn(10); void putc_to(uchar c) sbuf=c; while(ti=0) ti=0; void main() p1m0=0xff; p1m1=0x00; uart_int(); while(1) key(); display(tmp);tb8=1; putc_to(recdata);deal(tmp); com_int(void) interrupt 4 if(ri) tmp=sbuf;

5、 ri=0; void intt0() interrupt 1 uchar miao,a,num; th0=(65535-45872)/256; tl0=(65536-45872)%256; num+; if(num=20) num=0; miao+;if(miao=5) miao=0; a+; if(a=1) recdata=b; wei=11; if(a=2) recdata=c; wei=12; a=0; 2、 b从机#include #define uchar unsigned char#define uint unsigned intsbit dq=p22;sbit beep=p23

6、;sbit led=p20;uchar recdata; unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint num) while(num-);/*函数名称:void init_ds18b20(void)返回值:无参数:无作用:初始化18b20*/ void init_ds18b20(void) char x=0; dq=1; delay(10);/稍作延时 dq=0; delay(800);/延时480

7、us 540us dq=1; /拉高总线 15-60us delay(50); x=dq;/读总线状态 为0复位成功,为1则不成功 delay(30); dq=1;/释放总线/*函数名称:uchar readonechar(void)返回值:uchar dat参数: 无作用:读1820一个字节*/uchar readonechar(void) uchar i; uchar dat=0; for(i=0;i=1; dq=1;/给脉冲 if(dq) dat|=0x80;/读1 / 读0右移处理 delay(20);/15us内读完一个数 return(dat); /*函数名称:void write

8、onechar(uchar dat)返回值:无参数: uchar dat作用:写1820一个字节*/*写ds18b20*/写0 60us读完,写1 30us 内读完void writeonechar(uchar dat) uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 dq=0; i+;i+;i+; dq=1; i=15;while(i0)i-; else dq=0; /write 0 i=15;while(i0)i-; dq=1; i+;i+;i+; /*函数名称:int readonetemperature(void)返

9、回值:int t参数: 无作用:读温度值*/void tmpchange(void) /ds18b20 begin change init_ds18b20(); delay(1); writeonechar(0xcc); / address all drivers on bus writeonechar(0x44); / initiates a single temperature conversionint readonetemperature(void) /*读取温度值*/ 每次读写均要先复位 uint a,b,t; float tep; init_ds18b20(); writeonec

10、har(0xcc);/发跳过rom命令 writeonechar(0xbe);/读寄存器,共九字节,前两字节为转换值 a=readonechar(); /a存低字节 b=readonechar(); /b存高字节 t=b; t=8;/高字节转换为10进制 t=t|a; tep=t*0.0625;/转换精度为0.0625/lsb t=tep*10+0.5;/保留1位小数并四舍五入*后面除10还原正确温度值) return(t);void display(uint temp)/显示程序 uchar a1,a2,a2t,a3; a1=temp/100; a2t=temp%100; a2=a2t/10

11、; a3=a2t%10; p1=table11; p0=0xfe; delay(800); p1=tablea1;/显示十位 p0=0xfd; delay(800); p1=tablea2|0x80;/显示个位 p0=0xfb; delay(800); p1=tablea3;/显示分位 p0=0xf7; delay(1);void warn(uint s) uchar i; i=s; beep=0; led=0; while(i-) display(readonetemperature(); beep=1; led=1; i=s; while(i-) display(readonetemper

12、ature(); void deal(uint t) if(t50&t300) warn(10); void init_com(void) tmod=0x20; pcon=0x00; scon=0xf0; th1=0xfd; tl1=0xfd; tr1=1; es=1; ea=1; ps=1; void comm(uint a) sbuf=a; while(!ti); ti=0;void main() p1m1=0x00; p1m0=0xff; init_com(); while(1) tmpchange(); display(readonetemperature(); deal(readon

13、etemperature(); com_int(void) interrupt 4 if(ri) recdata=sbuf; ri=0; if(rb8=1) if(recdata=b) sm2=0; tmpchange(); comm(readonetemperature(); display(readonetemperature(); deal(readonetemperature(); sm2=1; else sm2=1; 3、 c从机#include #define uchar unsigned char#define uint unsigned intsbit dq=p22;sbit

14、beep=p23;sbit led=p20;uchar recdata; unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint num) while(num-);/*函数名称:void init_ds18b20(void)返回值:无参数:无作用:初始化18b20*/ void init_ds18b20(void) char x=0; dq=1; delay(10);/稍作延时 dq=0; delay(800

15、);/延时480us 540us dq=1; /拉高总线 15-60us delay(50); x=dq;/读总线状态 为0复位成功,为1则不成功 delay(30); dq=1;/释放总线/*函数名称:uchar readonechar(void)返回值:uchar dat参数: 无作用:读1820一个字节*/uchar readonechar(void) uchar i; uchar dat=0; for(i=0;i=1; dq=1;/给脉冲 if(dq) dat|=0x80;/读1 / 读0右移处理 delay(20);/15us内读完一个数 return(dat); /*函数名称:vo

16、id writeonechar(uchar dat)返回值:无参数: uchar dat作用:写1820一个字节*/*写ds18b20*/写0 60us读完,写1 30us 内读完void writeonechar(uchar dat) uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 dq=0; i+;i+;i+; dq=1; i=15;while(i0)i-; else dq=0; /write 0 i=15;while(i0)i-; dq=1; i+;i+;i+; /*函数名称:int readonetemperatur

17、e(void)返回值:int t参数: 无作用:读温度值*/void tmpchange(void) /ds18b20 begin change init_ds18b20(); delay(1); writeonechar(0xcc); / address all drivers on bus writeonechar(0x44); / initiates a single temperature conversionint readonetemperature(void) /*读取温度值*/ 每次读写均要先复位 uint a,b,t; float tep; init_ds18b20(); w

18、riteonechar(0xcc);/发跳过rom命令 writeonechar(0xbe);/读寄存器,共九字节,前两字节为转换值 a=readonechar(); /a存低字节 b=readonechar(); /b存高字节 t=b; t=8;/高字节转换为10进制 t=t|a; tep=t*0.0625;/转换精度为0.0625/lsb t=tep*10+0.5;/保留1位小数并四舍五入*后面除10还原正确温度值) return(t);void display(uint temp)/显示程序 uchar a1,a2,a2t,a3; a1=temp/100; a2t=temp%100; a2=a2t/10; a3=a2t%10; p1=table11; p0=0xfe; delay(800); p1=tablea1;/显示十位 p0=0xfd; delay(800); p1=tablea2|0x80;/显示个位 p0=0xfb; delay(800); p1=tablea3;/显示分位 p0=0xf7; delay(1);void warn(uint s) uchar i; i=s;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论