欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    多级通信测温系统程序单片机.doc

    • 资源ID:4145056       资源大小:41.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    多级通信测温系统程序单片机.doc

    附1:源程序代码一、主机#include<stc10f08.h>#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; 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 display(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-) display(tmp); beep=1; P2=0xff; i=s; while(i-) display(tmp); void deal(uint t) if(t<=50) warn(10); if(t>50&&t<=300) warn(50); if(t>300) 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; 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; 二、 B从机#include <stc10f08.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P22;sbit 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);/延时>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<8;i+) DQ=0; dat>>=1; DQ=1;/给脉冲 if(DQ) dat|=0x80;/读1 / 读0右移处理 delay(20);/15us内读完一个数 return(dat); /*函数名称:void WriteOneChar(uchar dat)返回值:无参数: uchar dat作用:写1820一个字节*/*写DS18B20*/写0 60us读完,写1 30us 内读完void WriteOneChar(uchar dat) uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DQ=0; i+;i+;i+; DQ=1; i=15;while(i>0)i-; else DQ=0; /write 0 i=15;while(i>0)i-; DQ=1; i+;i+;i+; /*函数名称:int ReadOneTemperature(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(); WriteOneChar(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; beep=0; led=0; while(i-) display(ReadOneTemperature(); beep=1; led=1; i=s; while(i-) display(ReadOneTemperature(); void deal(uint t) if(t<=50) warn(10); if(t>50&&t<=300) warn(50); if(t>300) 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(ReadOneTemperature(); 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; 三、 C从机#include <stc10f08.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P22;sbit 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);/延时>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<8;i+) DQ=0; dat>>=1; DQ=1;/给脉冲 if(DQ) dat|=0x80;/读1 / 读0右移处理 delay(20);/15us内读完一个数 return(dat); /*函数名称:void WriteOneChar(uchar dat)返回值:无参数: uchar dat作用:写1820一个字节*/*写DS18B20*/写0 60us读完,写1 30us 内读完void WriteOneChar(uchar dat) uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DQ=0; i+;i+;i+; DQ=1; i=15;while(i>0)i-; else DQ=0; /write 0 i=15;while(i>0)i-; DQ=1; i+;i+;i+; /*函数名称:int ReadOneTemperature(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(); WriteOneChar(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; beep=0; led=0; while(i-) display(ReadOneTemperature(); beep=1; led=1; i=s; while(i-) display(ReadOneTemperature(); void deal(uint t) if(t<=50) warn(10); if(t>50&&t<=300) warn(50); if(t>300) 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(ReadOneTemperature(); com_int(void) interrupt 4 if(RI) RecData=SBUF; RI=0; if(RB8=1) if(RecData='c') SM2=0; tmpchange(); comm(ReadOneTemperature(); display(ReadOneTemperature(); deal(ReadOneTemperature(); SM2=1; else SM2=1;

    注意事项

    本文(多级通信测温系统程序单片机.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开