单片机温度传感器及无线传输

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通信与测控系统课程设计

报告

一、课程设计目的及要求

①通过一个具体的项目实例,熟悉项目开发的流程,学习与通信相关的测控系统开发,包括基本知识、技术、技巧

②锻炼硬件编程能力(C51),积累编程经验,形成代码风格,理解软件层次结构

③常用外围器件(接口)的操作、驱动

一、实习主要任务

①采集远端温度信息,无线收集,上位机显示信息

②硬件配置:51系统板、DS18B20、无线数传模块IA4421、数码管

③编程、调试,完成作品

二、硬件电路的原理框图

图一、AT89S51、数码管硬件原理图

图二、IA4421硬件原理图图三、DS18B20硬件原理图最终实现的功能:

三、软件设计及原理

1、读主程序流程图

主程序代码:

#include

#include

#include

#include

#include

#include

#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=110;y>0;y--);

}

uint aa;

uchar wei_1,wei_2,wei_3,v,wei_4,wei_5,wei_6;

uint shuju;//得到的温度值

uchar temp[2]={0,0}; //存放DS18B20的温度寄存器值

uint value = 0;

sbit DQ=P3^3; //数据线

void ReadSerialNumber(void);

uchar sn1,sn2,sn3,sn4,sn5,sn6,sn7,sn8; //存放DS18B20的64位序列号void ow_reset(void);

void tmstart (void);

void ReadSerialNumber(void);

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();

ia4421();

n=wei_4;

wei_4<<=4;

txdata[4]=wei_5|wei_4;

if(m==50)

{m=0;

UART_Init();

P1=0xfc;

txdata[0]=0x2d;

txdata[1]=0xd4;

txdata[2]=0xfa;

txdata[3]=0x01;

ia442xinit();

spirevtwobyte();

spisendcommand(0x8288);

txregframe();

}

P2=0xff;

P0=table[n];

P2_4=0;

delay1s();

P2_4=1;

P0=table[wei_5];

P2_5=0;

delay1s();

P2_5=1;

P0=~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 seconds) //延时

{

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 ready, 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); // wait for rest of timeslot

相关文档
最新文档