基于51单片机的红外发射接收温度传感装置

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

2015年高校联盟电子制作大赛题目

(数字类)

技术报告

队长:黄文杰

学号:2014212652

学院:自动化学院

队员:李嘉伟

学号:2014212650

学院:自动化学院

唐泓

学号:2014212640

学院:自动化学院

题目名称:简易红外光数字通信装置

1、设计题目:单片机应用系统设计

基于单片机的——简易红外光数字通信装置

2、总体要求:

本次大赛设计内容从主办方所给的题目出发,参赛者应了解单片机实际的应用系统,并自学红外信号编码,弄清结构和功能,结合单片机课程知识及其他相关课程知识,充分发挥自己的想象力和创造力,实现主办方题目要求并适当发挥,团队合作完成本次比赛。

3、具体要求:

1)确定应用系统功能参数

2)设计合理的电路原理图

3)Proteus仿真原理图

4)制作电路板并检测

5)设计程序

6)电路板调试运行

7)技术报告

单片机技术报告

一、项目简介

单片机被广泛应用于仪器仪表、工业自动控制、家用电器、医用设备、办公自动化设备、安全监控等领域,涵盖了人类生活的方方面面。

二、系统功能描述

这是一款基于STC89C52RC单片机的简易红外光数字通信装置。它可以分为六个部分:

(1)红外功能,可以红外传送数据

(2)音阶功能,在发射板上按动七个音阶,在接收板上可以响出duorai mi fasuonai xi 七个音阶

(3)温度检测,在发射板上可以检测温度,在接收板上可以显示温度,每隔0.5秒更新一次温度。

三、设计思路

红外模块设计思路:

1:对输入的数据进行编码。

2:对编码进行脉冲调制。

3:信号放大后,通过发射管发送38khz信号。

4:接收信号,进行解码。

5:让 51 对信号进行处理(显示,统计,分析)。

音阶模块设计思路:

1:计算音阶响应相应延时

2:建立延时数组,按键控制取数组里的值。

3:用延时控制发出不同声音

温度模块设计:

1:温度测出数据,读取温度感应数据,计算成十进制

数。

2:在数码管上显示十进制数

3:延时控制发射更新温度数据

四、程序部分

1.红外部分,红外部分分为,发射和接收部分,发射部分,通过定时器0

产生38k载波,通过定时器1发送信号。接收部分,通过外部中断(下

降沿触发)接收信号,通过定时器计算两个下降沿之间的时间来确定收

到的是0还是1。

2.音阶部分:按键1~7,每次按键按下,发送控制数据,控制接收蜂鸣器根

据不同频率发出不同声音。

3.温度部分:发射端温度传感器,测出温度,通过计算得到温度具体数值,

发送数据,接收端,根据接收的数据,显示在数码管上。

#include

#define uchar unsigned char

#define uint unsigned int

ucharm,inform;

uint temp; // variable of temperature // sign of the result positive or negative

sbit DS=P0^3;

sbit IR_OUT=P1^1;

sbit key1=P2^4;

sbit key2=P2^5;

sbit key3=P2^6;

sbit key4=P2^7;

sbit key5=P2^0;

sbit key6=P2^1;

sbit key7=P2^2;

sbit key8=P2^3;

/*--------三个延迟函数的定义-------*/

void delay_ms(uintms)

{

uinti,j;

for(i=0;i<120;i++)

{

for(j=0;j

}

}

void delay(uint count) //delay

{

uinti;

while(count)

{

i=200;

while(i>0)

i--;

count--;

}

}

/*——————————温度传感器函数定义——————————————————*/

void dsreset(void) //send reset and initialization command

{

uinti;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

//------------------------------------------------------------

bit tmpreadbit(void) //read a bit

{

uinti;

bit dat;

DS=0;i++; //i++ for delay

DS=1;i++;i++;

dat=DS;

i=8;while(i>0)i--;

return (dat);

}

//--------------------------------------------------------------------- uchartmpread(void) //read a byte date

{

uchari,j,dat;

dat=0;

for(i=1;i<=8;i++)

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT 里

}

相关文档
最新文档