单片机温度传感器及无线传输_第1页
单片机温度传感器及无线传输_第2页
单片机温度传感器及无线传输_第3页
单片机温度传感器及无线传输_第4页
单片机温度传感器及无线传输_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、通信与测控系统课程设计报告 一、课程设计目的及要求通过一个具体的项目实例,熟悉项目开发的流程,学习与通信相关的测控系统开发,包括基本知识、技术、技巧锻炼硬件编程能力(C51),积累编程经验,形成代码风格,理解软件层次结构常用外围器件(接口)的操作、驱动1、 实习主要任务采集远端温度信息,无线收集,上位机显示信息硬件配置:51系统板、DS18B20、无线数传模块IA4421、数码管编程、调试,完成作品2、 硬件电路的原理框图图一、AT89S51、数码管硬件原理图 图二、IA4421硬件原理图 图三、DS18B20硬件原理图最终实现的功能:3、 软件设计及原理1、读主程序流程图主程序代码:#inc

2、lude<reg52.h>#include<IA4421.h>#include<absacc.h>#include<intrins.h>#include<math.h>#include<xianshi.h>#define uint unsigned int#define uchar unsigned char unsigned char m; unsigned char n;void zhuanhuan();void delay_led(uint z) uint x,y; for(x=z;x>0;x-) for(y=

3、110;y>0;y-);uint aa;uchar wei_1,wei_2,wei_3,v,wei_4,wei_5,wei_6;uint shuju;/得到的温度值uchar temp2=0,0; /存放DS18B20的温度寄存器值uint value = 0;sbit DQ=P33; /数据线void ReadSerialNumber(void);uchar sn1,sn2,sn3,sn4,sn5,sn6,sn7,sn8; /存放DS18B20的64位序列号void ow_reset(void);void tmstart (void);void ReadSerialNumber(voi

4、d);void Read_Temperature(void);void write_byte(char);uint read_byte(void);void delay_18B20(uint);/void baojing();/*主函数*/void main() m=0; /init_led();/初始化子程序 tmstart (); delay_18B20(50); /*等待转换结束*/ while(1) m+; Read_Temperature(); delay_18B20(50); tmstart(); delay_18B20(50); /*等待转换结束*/ zhuanhuan(); i

5、a4421(); n=wei_4; wei_4<<=4; txdata4=wei_5|wei_4; if(m=50) m=0; UART_Init();P1=0xfc;txdata0=0x2d;txdata1=0xd4;txdata2=0xfa;txdata3=0x01;ia442xinit();spirevtwobyte();spisendcommand(0x8288); txregframe(); P2=0xff; P0=tablen; P2_4=0; delay1s(); P2_4=1; P0=tablewei_5; P2_5=0; delay1s(); P2_5=1; P0

6、=0x80; P2_6=0; delay1s(); P2_6=1; P0=0x39; P2_7=0; delay1s(); P2_7=1; /*转换*/void zhuanhuan() aa=shuju; wei_1=aa/100000; wei_2=aa/10000%10; wei_3=aa/1000%100%10; wei_4=aa/100%1000%100%10; wei_5=aa/10%10000%1000%100%10; wei_6=aa/1%100000%10000%1000%100%10;/*延时函数*/=18b20程序=*/void delay_18B20(uint secon

7、ds) /延时 for(;seconds>0;seconds-);/* 18b20程序*/=复位 = void ow_reset(void) uchar presence; DQ = 0; /pull DQ line low delay_18B20(44); /至少480微秒, leave it low for 501us DQ = 1; / allow line to return high? delay_18B20(3); / wait for presence18b20 36us presence = DQ; / get presence signal / 0= DS18B20 r

8、eady, 1= busy /if(!presence)P1_0=0; delay_18B20(12); / wait for end of timeslot/=从总线上读取一个字节=uint read_byte(void) uchar i; for (i=8;i>0;i-) value>>=1; DQ = 0; / pull DQ low to start timeslot _nop_();_nop_();_nop_();_nop_(); DQ = 1; / then return high if(DQ) value|=0x80; delay_18B20(4); / wai

9、t for rest of timeslot return(value);/=向18B20写一个字节=void write_byte(char val) uchar i,j; for (i=8; i>0; i-) / writes byte, one bit at a time DQ = 0; / pull DQ low to start timeslot j+; /*延时4us*/ DQ = val&0x01; delay_18B20(8); / hold value for remainder of timeslot DQ = 1; j+; val>>=1; /=

10、读取温度=void Read_Temperature(void) int k,i; int temple; /*存放读取的温度值 将其除以16即为得到的值*/ ow_reset(); k+; /延时4us write_byte(0xCC); /Sk_nop_();ip ROM k+; /延时4us write_byte(0xBE); / read register k+;k+; /延时8us temp0=read_byte(); /读取低字节 temp1=read_byte(); /读取高字节 /if(!(temp0&0x80) /*当低位寄存器第八位为0时*/ / i=temp1;

11、i<<=8; /*把b放到高八位上去*/ i|=temp0; /*将a放到底八位上去*/ i&=0x07ff; if( (temp1&0x08) temple=i+1; /如果为负温则去除其补码 / FWD=0; /*表示温度为负数*/ else temple=i; / FWD=1; /*表示温度为正数*/ /temple=temp1*0x100+temp0; shuju=temple*10/16;/以下是读取器件序列号的子程序,需要读取序列时可在程序中调用;/调用时确保总线中只有一只器件,若有多个器件时则读取出来的号码无效;/将读取出来的序列号填到前面的数组中即可

12、使用;/平时可以将此子程序删除以节约空间。/读取器件序列号子程序/void ReadSerialNumber(void) ow_reset(); /复位 delay_18B20(1); /延时 write_byte(0x33); /发送读序列号子程序 sn1=read_byte(); /读取第一个序列号,应为16H; sn2=read_byte(); /读取第二个序列号,应为10H; sn3=read_byte(); / sn4=read_byte(); / sn5=read_byte(); / sn6=read_byte(); / sn7=read_byte(); / sn8=read_by

13、te();/=初始化=void tmstart (void) ow_reset(); /复位 delay_18B20(1); /延时 / ReadSerialNumber(); write_byte(0xCC); /跳过序列号命令,对所有器件有效 write_byte(0x44); /发转换命令 44H,/=报警=/*void baojing() if(aa>=250) FM=0; else FM=1; 2、温度传感器DS18B20功能简介:美国DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地

14、组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。DS18B20测量温度范围为-55+125。在-10+85范围内,精度为±0.5。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。工作原理:DS18B20采用串行单总线,单总线即只有一根数据线,系统中的数据交换、控制都由这根线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线。单总线通常要求外接一个约为4.7kW的上拉电阻,这样,当总线闲置时,其状态为高电平。主机和从机之间的通信可通过3个步骤完

15、成,分别为初始化One-Wire器件、识别One-Wire器件和交换数据。由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问One-Wire器件都必须严格遵循单总线命令序列,即初始化、ROM命令、功能命令。如果出现序列混乱,One-Wire器件将不响应主机(搜索ROM命令、报警搜索命令除外)。 程序流程图部分程序:/*读取ds18b20当前温度*/unsigned char ReadTemperature(void)unsigned char tt2;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x4E

16、); /写入"写暂存器"命令,修改TH和TL和分辩率配置寄存器 /先写TH,再写TL,最后写配置寄存器WriteOneChar(TH);/写入想设定的温度报警上限WriteOneChar(TL);/写入想设定的温度报警下限WriteOneChar(RS);/写配置寄存器,格式为0 R1 R0 1,1 1 1 1/R1R0=00分辨率娄9位,R1R0=11分辨率为12位delay_18B20(80); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneC

17、har(0x44); / 启动温度转换delay_18B20(80); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(80);tt0=ReadOneChar(); /读取温度值低位tt1=ReadOneChar(); /读取温度值高位T=(tt0&0xf0)>>4)|(tt1&0x0f)<<4) ;return(T); 3、 无线数

18、传模块IA4421功能简介:IA4421 是全集成的一颗单晶片低功耗,多频道的FSK 收发器,在无须申请注册的 433M、868M、915M 频段的设计应用完全符合 FCC 和ETSI 认证相关规定。IA4421 收发器是EZradio产品线的一部分。是一个很有弹性低成本、高集成度在生产中无需统调的产品。内部集成包括有高频功率放大器(PA)低噪声放大器(LNA)、I/Q 转换混频器,基带滤波器,放大器、I/Q 解调器。所需的RF 功能都集成。仅需要一个晶振和几颗退藕电容。工作原理:IA4421采用SPI总线协议,SPI接口是Motorola 首先提出的全双工同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Ma

温馨提示

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

评论

0/150

提交评论