基于51单片机的红外发射接收温度传感装置
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015年高校联盟电子制作大赛题目
(数字类)
技术报告
队长:黄文杰
学号:2014212652
学院:自动化学院
队员:李嘉伟
学号:2014212650
学院:自动化学院
唐泓
学号:2014212640
学院:自动化学院
题目名称:简易红外光数字通信装置
1、设计题目:单片机应用系统设计
基于单片机的——简易红外光数字通信装置
2、总体要求:
本次大赛设计内容从主办方所给的题目出发,参赛者应了解单片机实际的应用系统,并自学红外信号编码,弄清结构和功能,结合单片机课程知识及其他相关课程知识,充分发挥自己的想象力和创造力,实现主办方题目要求并适当发挥,团队合作完成本次比赛。
3、具体要求:
1)确定应用系统功能参数
2)设计合理的电路原理图
3)Proteus仿真原理图
4)制作电路板并检测
5)设计程序
6)电路板调试运行
7)技术报告
单片机技术报告
一、项目简介
单片机被广泛应用于仪器仪表、工业自动控制、家用电器、医用设备、办公自动化设备、安全监控等领域,涵盖了人类生活的方方面面。
二、系统功能描述
这是一款基于STC89C52RC单片机的简易红外光数字通信装置。它可以分为六个部分:
(1)红外功能,可以红外传送数据
(2)音阶功能,在发射板上按动七个音阶,在接收板上可以响出duo rai mi fa suo nai 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
uchar m,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(uint ms)
{
uint i,j;
for(i=0;i<120;i++)
{
for(j=0;j } } void delay(uint count) //delay { uint i; while(count) { i=200; while(i>0) i--; count--; } } /*——————————温度传感器函数定义——————————————————*/ void dsreset(void) //send reset and initialization command { uint i; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } //------------------------------------------------------------ bit tmpreadbit(void) //read a bit { uint i; bit dat; DS=0;i++; //i++ for delay DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); } //--------------------------------------------------------------------- uchar tmpread(void) //read a byte date { uchar i,j,dat; dat=0; for(i=1;i<=8;i++)