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

合集下载

基于51单片机的红外遥控设计-毕业设计论文

基于51单片机的红外遥控设计-毕业设计论文

基于51单片机的红外遥控设计摘要很多电器都采用红外遥控,那么红外遥控的工作原理是什么呢?本文将介绍其原理和设计方法。

红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。

常用的红外遥控系统一般分发射和接收两个部分。

红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的,在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9 kHz≈38kHz。

也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。

接收端的输出状态大致可分为脉冲、电平、自锁、互锁、数据五种形式。

“脉冲”输出是当按发射端按键时,接收端对应输出端输出一个“有效脉冲”,宽度一般在100ms左右。

一般情况下,接收端除了几位数据输出外,还应有一位“数据有效”输出端,以便后级适时地来取数据。

这种输出形式一般用于与单片机或微机接口。

除以上输出形式外,还有“锁存”和“暂存”两种形式。

所谓“锁存”输出是指对发射端每次发的信号,接收端对应输出予以“储存”,直至收到新的信号为止;“暂存”输出与上述介绍的“电平”输出类似。

关键词:80c51单片机、红外发光二极管、晶振目录第一章1、引言 (3)2、设计要求与指标 (3)3、红外遥感发射系统设计 (4)4、红外发射电路设计 (4)5、调试结果及分析 (9)6、结论 (10)第二章1、引言 (10)2、设计要求与指标 (11)3、红外遥控系统设计 (11)4、系统功能实现方法 (15)5、红外接收电路 (16)6、软件设计 (17)7、调试结果及分析 (18)8、结论 (19)参考文献附录绪论人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。

其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。

比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。

基于51单片机的红外接收发送器

基于51单片机的红外接收发送器

机电信息工程学院单片机系统课程设计报告系:电子工程系专业:通信工程班级:051班设计题目:红外收发器学生姓名:王建茶李晓艳指导教师:董玉华李厚杰李婷杨亚宁完成日期:2008年3月21日目录一、设计任务和性能指标 (1)1.1设计任务 (1)1.2性能指标 (1)二、设计方案 (1)三、系统硬件设计 (2)3.1 红外发射模块设计 (2)(一)单片机的最小系统 (2)(二)键盘电路 (4)(三)红外线发射编码 (4)3.2 红外接收模块设计 (4)(一)红外接收器设计 (4)(二)显示电路的设计 (5)(三)键盘接口的设计 (5)四、系统软件设计 (5)五、调试及性能分析 (8)5.1调试步骤 (8)5.2性能分析 (8)六、心得体会 (9)参考文献 (10)附录 (10)1程序清单 (10)2硬件原理图 (17)一、设计任务和性能指标1.1设计任务红外遥控技术是一种利用红外线进行点对点通信的技术,其相应的软件和硬件技术都已比较成熟。

它是把红外线作为载体的遥控方式。

在现代电子工程应用中,红外线常常被用做近距离视线范围内的通讯载波,最典型的应用就是家电遥控器。

使用红外线做信号载波的优点很多:成本低、传播范围和方向可以控制、不产生电磁辐射干扰,也不收干扰等等。

因此被广泛地应用在各种技术领域中。

红外线遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点,特别是室内遥控的优先遥控方式。

同时,由于采用红外线遥控器件时,工作电压低,功耗小,外围电路简单,因此它在日常工作生活中的应用越来越广泛。

1.2性能指标1.基本要求(1)能够实现利用红外线实现无线数据的收发;(2)能够将发送的数据或接收的数据进行显示,或根据接收的命令执行相应的功能。

2. 选做(1)所发送的数据利用PC机进行控制;(2)能够实现的数据通信采用一对多的主从模式;(3)能够实现远程的参数数据传送,如实现远程抄表、温度、湿度等。

单片机基于51单片机的温度传感器设计

单片机基于51单片机的温度传感器设计

未来展望
技术升级
智能化发展
应用拓展
安全性考虑
随着技术的进步,未来可以 采用更高精度的温度传感器 ,提高系统的监测和控制精 度。同时,可以采用更先进 的单片机,提高数据处理速 度和控制效果。
未来可以增加更多的人工智 能算法,如神经网络、模糊 控制等,以实现更智能的温 度调控。此外,可以通过增 加传感器种类和数量,实现 对环境因素的全面监测与调 控。
03
02
传感器接口
将DS18B20温度传感器与单片机相 连,实现温度信号的采集。
通讯接口
通过UART串口通讯,实现单片机与 上位机之间的数据传输。
04
软件设计
温度采集
通过DS18B20温度传感器采集 温度信号,并转换为数字信号 。
数据显示
将处理后的温度数据通过 LCD1602液晶显示屏实时显示 出来。
温度传感器选择
选用常用的DS18B20温度传感器, 具有测量精度高、抗干扰能力强等优 点。
显示模块
选用LCD1602液晶显示屏,用于实 时显示温度值。
通讯接口
采用UART串口通讯,实现单片机与 上位机之间的数据传输。
硬件设计
01
电源电路
为单片机和传感器提供稳定的电源 。
显示接口
将LCD1602液晶显示屏与单片机相 连,实现温度的实时显示。
它能够检测环境中的温度变化,并将 其转换为电信号或其他可测量的物理 量,以便进一步处理和控制。
温度传感器的工作原理
温度传感器通常由敏感元件和转换电路组成。敏感元件负责 感知温度变化,而转换电路则将温度变化转换为电信号。
常见的温度传感器工作原理有热电效应、热电阻、热敏电阻 等。
温度传感器的分类

基于51单片机的红外遥控器设计

基于51单片机的红外遥控器设计

天津职业大学二○一五~二○一六学年第1学期电子信息工程学院通信系统综合实训报告书课程名称:通信系统综合实训班级:通信技术(5)班学号:1304045640 1304045641 1304045646姓名:韩美红季圆圆陈真真指导教师:崔雁松2015年11月17日一、任务要求利用C51单片机设计开发一套红外线收发、显示系统。

具体要求:●编写相关程序(汇编、C语言均可);●用Proteus绘制电路图并仿真实现基本功能;●制作出实物二、需求分析(系统的应用场景、环境条件、参数等)现在各种红外线技术已经源源不断进入我们的生活中,在很多场合发挥着作用。

机场、宾馆、商场等的自动门,会在人进出时自动地开启和关闭。

原来,在自动门的一侧有一个红外线光源,发射的红外线照射到另一侧的光电管上,红外线是人体察觉不到的。

当人走到大门口,身体挡住红外线,电管接收不到红外线了。

根据设计好的指令,触发相应开关,就把门打开了。

等人进去后,光电管又可以接到红外线,恢复原来的线路,门又会自动关闭。

因此这种光电管被称为“电眼”,在许多自动控制设备中大显身手。

在家庭中,许多电子设备如彩色电视、空调、冰箱和音响等,都使用了各种“红外线遥控器”。

利用它我们可以非常方便的转换电视频道或设定空调的温度档次。

三、概要设计(系统结构框图/系统工作说明流程图)红外线收发、显示系统硬件由以下几部分组成:红外遥控器,51单片机最小系统,接收放大器一体集成红外接收头,LED灯显示电路。

红外线接收是把遥控器发送的数据(已调信号)转换成一定格式的控制指令脉冲(调制信号、基带信号),是完成红外线的接收、放大、解调,还原成发射格式(高、低电位刚好相反)的脉冲信号。

这些工作通常由一体化的接收头来完成,输出TTL兼容电平。

最后通过解码把脉冲信号转换成数据,从而实现数据的传输。

红外遥控系统电路框图四、详细设计(Proteus电路图、程序流程图、源程序清单)1)Proteus电路图:2)程序流程图:程序是首先初始化红外接收端口,然后检测是否接收红外信号,如果接收到红外信号就调用接收子程序,然后就通过L 额度LED 显示当前按键的结果,如图所示:程序流程图3)源程序清单:#include<reg51.h> //头文件#define uchar unsigned char //这里用"uchar"代替"unsigned char","uchar"用来定义无符号字符型数。

51单片机-毕业设计基于单片机设计的红外线遥控器

51单片机-毕业设计基于单片机设计的红外线遥控器

ping primary school fire safety systems to e nha nce fire safety, prote ction of public property and t he life and property safety of teacher s and students, school fire safety into day-to-day ma nagement, is devel opi ng the following fire safety system. 1, strengt hen fire safety educati on of the whole school. Accordi ng to the re quireme nts of the Fire S ervices A ct, so t hat everyone has of keeping fire control safety, pr otecting fire control facilities, fire preve ntion, reports of fire学生毕业设计(论文)报告系别:专业:班号:学生姓名:学生学号:设计(论文)题目:基于单片机设计的红外线遥控器指导教师:设计地点:起迄日期:ping primary school fire safety systems to e nha nce fire safety, prote ction of public property and t he life and property safety of teacher s and students, school fire safety into day-to-day ma nagement, is devel opi ng the following fire safety system. 1, strengt hen fire safety educati on of the whole school. Accordi ng to the re quireme nts of the Fire S ervices A ct, so t hat everyone has of keeping fire control safety, pr otecting fire control facilities, fire preve ntion, reports of fire常州信息职业技术学院电子与电气工程学院毕业设计论文毕业设计(论文)任务书专业电子信息工程班级电子085 姓名傅浩一、课题名称:基于单片机设计的红外线遥控器二、主要技术指标:1.遥控距离:0~10m2.额定工作电压:直流3V(普通5号干电池2节);红外光平均辐照度≥40μW/cm2;指向性(辐照度为20μW/cm2)≥30度3.欠压条件下(直流2.4v):红外光平均辐照度≥20μW/cm2,指向性(辐照度为10μW/cm2)≥30度三、工作内容和要求:1.以AT89C2051单片机作为核心,综合应用了单片机中断系统、定时器、计数器等知识,应用红外光的优点2.遥控发射器通过对红外光发射频率的控制来区别不同的操作3.遥控接收器通过对红外光接收频率的识别,判断出控制操作,来完成整个红外遥控发射、接收过程四、主要参考文献:[1] 梅丽凤,王艳秋,张军等. 单片机原理及接口技术,北京:清华大学出版社,2004年.[2] 戴峻峰,付丽辉. 多功能红外线遥控器的设计,传感器世界.2002,8(12):16~18.[3] 李光飞,楼然苗,胡佳文等. 单片机课程设计实例指导,北京:北京航空航天出版社,2004年.[4] 苏长赞. 红外线与超声波遥控,北京:人民邮电出版社.1995年.学生(签名)2010 年 5 月7 日指导教师(签名)2010 年5 月10 日教研室主任(签名)2010 年5 月10 日系主任(签名)2010 年5 月12 日ping primary school fire safety systems to e nha nce fire safety, prote ction of public property and t he life and property safety of teacher s and students, school fire safety into day-to-day ma nagement, is devel opi ng the following fire safety system. 1, strengt hen fire safety educati on of the whole school. Accordi ng to the re quireme nts of the Fire S ervices A ct, so t hat everyone has of keeping fire control safety, pr otecting fire control facilities, fire preve ntion, reports of fire毕业设计(论文)开题报告设计(论文)题目基于单片机设计的红外线遥控器一、选题的背景和意义:随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。

基于51单片机的红外遥控课程设计

基于51单片机的红外遥控课程设计

目录第一章设计简介 (2)第二章系统方案 (2)一、设计方案对比 (2)二、方案设计 (4)第三章硬件设计 (4)一、红外遥控器 (4)二、红外接收模块部分 (6)第四章软件设计 (7)一、红外遥控器软件设计 (7)二、红外接收模块软件设计 (10)三、程序代码 (10)第五章测试及分析 (10)第六章结论 (10)第七章参考文献 (11)附录一(程序代码): (12)第一章设计简介本设计分为红外遥控器与红外接收模块两部分。

红外遥控器包括矩阵键盘、增强型51单片机(STC11L04E)、红外发射电路组成。

单片机扫描矩阵键盘后,将按键状态进行信源编码与信道编码,载波(38k脉冲)后由红外发射器发射。

红外接收模块部分由传统51单片机、数码管、一体化红外接收头组成。

一体化红外接收头将信号进行限幅放大、带通滤波、解调、积分、整形后输出解调信号至单片机,并由单片机输出解调信号。

第二章系统方案一、设计方案对比红外遥控器部分2.1.1 主控芯片方案一:HT6222方案二:STC11L04E分析:传统红外遥控器芯片HT6222具有性价比高、功能强大、稳定可靠、使用简单等特点,但该芯片难以零购。

STC11L04E为增强型51单片机,控制灵活(载波频率可调、通信协议可变更、用户码可变换)、价格较HT6222稍贵。

STC11L04E最大的特别是低功耗,功作电压低3.3V,易于应用于移动设备。

结论:由于STC11L04E单片机的灵活性以及学习性(可增强我们对一个完整通信系统的理解)。

因此我们采用方案二。

2.1.2 矩阵键盘方案一:3*6*2.5 贴片轻触开关方案二:6*6*6 直插轻触开关分析:3*6*2.5贴片轻触开关虽然体积小巧、美观,但与6*6*6直插轻触开关对比,在制板布线上较繁锁。

结论:综上,我们采用6*6*6直插轻触开关,使得整体布线简单,可布单面版,简化制板流程。

2.1.3电源模块方案一:钮扣电池CR2032方案二:可充电锂电池18650分析:可充电锂电池18650容量大,节能环保(可多次利用),但体积大。

基于51单片机的红外遥感器设计 徐伟

基于51单片机的红外遥感器设计 徐伟

基于51单片机的红外遥感器设计徐伟发表时间:2018-08-06T15:23:30.767Z 来源:《电力设备》2018年第10期作者:徐伟[导读] 摘要:红外遥控器在许多电子设备的控制中得到广泛的应用,对红外遥控器的设计展开研究具有十分重要的意义。

(广东鼎华科技股份有限公司广东佛山 528000)摘要:红外遥控器在许多电子设备的控制中得到广泛的应用,对红外遥控器的设计展开研究具有十分重要的意义。

本文基于51单片机,设计实现了一种红外遥控器,该设计简洁灵活,以期能为其他红外遥感器的设计提供借鉴。

关键词:红外遥控器;设计方案;仿真随着现代技术的快速发展以及人们生活水平的日益提供,家用电器走进家家户户,而红外遥控器以其抗干扰能力强、低功耗、稳定可靠等优点,被广泛应用于家用电器的控制中,并为人们的日常生活带来了极大的便利。

基于此,笔者介绍了一种红外遥控器的设计。

1.总体设计方案1.1 任务解析红外遥控是一种无线、非接触控制技术,其中红外遥控器作为外部控制信号的发送端,通过按下不同的按键来控制发送不同的控制码值,进而控制单片机(接收端)进行相应的响应。

本设计设计一种基于单片机的红外遥控器电路,选用51系列单片机的控制芯片,选用普通电视遥控器作为红外发射电路,红外接收选用1838B 接收头,实现6 路以上的遥控控制。

使用C 语言进行代码设计,编写红外遥控器的接收代码以及发送程序代码;在k e i l 软件上进行运行、调试、以及检测,结合p r o t u e s 软件对硬件电路进行电路功能验证,进行仿真运行;最终将所设计编写的接收端的代码程序下载到电路开发板中进行验证。

模拟红外遥控器的按键码值的发送编写发送端程序代码,将用户的用户码转化为十六进制的码值,并在LCD 屏上进行按键值以及发送的码值显示;模拟红外遥控器的按键码值的接收编写接收程序代码,将接收的码值显示在LCD 屏上,并且可以显示对应按下的按键值。

基于51单片机的红外遥控

基于51单片机的红外遥控

基于51单片机的红外遥控红外遥控是无线遥控的一种方式,本文讲述的红外遥控,采用STC89C52单片机,1838红外接收头和38k红外遥控器。

1838红外接收头:红外遥控器:原理:红外接收的原理我不赘述,百度文库上不少,我推荐个网址,这篇文章写得比较清楚,也比较全面,我主要讲下程序的具体意思,在了解原理的基础上,我们知道,当我们在遥控器上每按下一个键,遥控器上的红外发射头都会发出一个32位的编码(32位编码分成4组8位二进制编码,前16位为用户码和用户反码,后16位为数据码和数据反码,用户码表示遥控器类型,数据码表示按键编码),不同的键对应不同的编码,红外接收头接收到这个编码后,发送给单片机,再进行相关操作。

源程序1:(这个程序的功能是将用户码和用户反码,数据码和数据反码显示在1602液晶上,因为遥控器买回来是不会说明按键对应什么码值,所以先自己测试,确定每个按键的码值)#include<reg52.h>#include<stdio.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char#define _Nop() _nop_()#define TURE 1#define FALSE 0/*端口定义*/sbit lcd_rs_port = P3^5; /*定义LCD控制端口*/sbit lcd_rw_port = P3^6;sbit lcd_en_port = P3^4;#define lcd_data_port P0///////////////////////////////////void delay1 (void)//关闭数码管延时程序{int k;for (k=0; k<1000; k++);}////////////////////////////////////uchar code line0[16]={" user: "};uchar code line1[16]={" data: "};uchar code lcd_mun_to_char[16]={"0123456789ABCDEF"};unsigned char irtime;//红外用全局变量bit irpro_ok,irok;unsigned char IRcord[4];//用来存放用户码、用户反码、数据码、数据反码unsigned char irdata[33];//用来存放32位码值void ShowString (unsigned char line,char *ptr);//////////////////////////////////////////////void Delay(unsigned char mS);void Ir_work(void);void Ircordpro(void);void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数{irtime++;}void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数{static unsigned char i;static bit startflag;if(startflag){if(irtime<63&&irtime>=33)//引导码TC9012的头码i=0;irdata[i]=irtime;irtime=0;i++;if(i==33){irok=1;i=0;}}else{irtime=0;startflag=1;}}void TIM0init(void)//定时器0初始化{TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00;//reload valueTL0=0x00;//initial valueET0=1;//开中断TR0=1;}void EX0init(void){IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2)EX0 = 1; // Enable EX0 InterruptEA = 1;}void Ircordpro(void)//红外码值处理函数(关键函数){unsigned char i, j, k=1;unsigned char cord,value;for(i=0;i<4;i++){//处理4个字节for(j=1;j<=8;j++){ //处理1个字节8位cord=irdata[k];value=value>>1;if(cord>7) value=value|0x80; //大于某值为1k++;}IRcord[i]=value;value=0;}irpro_ok=1;//处理完毕标志位置1}///////////////////////////////////////////void lcd_delay(uchar ms) /*LCD1602 延时*/{uchar j;while(ms--){for(j=0;j<250;j++){;}}}//////////////////////////////////////////////void lcd_busy_wait() /*LCD1602 忙等待*/{lcd_rs_port = 0;lcd_rw_port = 1;lcd_en_port = 1;lcd_data_port = 0xff;_Nop();_Nop();_Nop();_Nop();while (lcd_data_port&0x80);lcd_en_port = 0;}///////////////////////////////////////////////void lcd_command_write(uchar command) /*LCD1602 命令字写入*/ {lcd_busy_wait();lcd_rs_port = 0;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = command;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();lcd_en_port = 1;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();lcd_en_port = 0;}/////////////////////////////////////////void lcd_system_reset() /*LCD1602 初始化*/{lcd_delay(20);lcd_command_write(0x38);lcd_delay(100);lcd_command_write(0x38);lcd_delay(50);lcd_command_write(0x38);lcd_delay(10);lcd_command_write(0x08);lcd_command_write(0x01);lcd_command_write(0x06);lcd_command_write(0x0c);}//////////////////////////////////////////////////void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/ {x_pos &= 0x0f; /* X位置范围0~15 */y_pos &= 0x01; /* Y位置范围0~ 1 */if(y_pos==1) x_pos += 0x40;x_pos += 0x80;lcd_command_write(x_pos);lcd_busy_wait();lcd_rs_port = 1;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = lcd_dat;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();lcd_en_port = 1;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();lcd_en_port = 0;}void main(void){uchar i;lcd_system_reset(); /* 初始化LCD1602 */lcd_data_port = 0xff;for(i=0;i<16;i++) lcd_char_write(i,0,line0[i]);for(i=0;i<16;i++) lcd_char_write(i,1,line1[i]);EX0init(); // Enable Global Interrupt FlagTIM0init();while(1){//主循环if(irok){Ircordpro();irok=0;}if(irpro_ok){ /*遥控成功接收*/lcd_char_write(8,0,lcd_mun_to_char[IRcord[0]/0x10]);lcd_char_write(9,0,lcd_mun_to_char[IRcord[0]%0x10]);lcd_char_write(11,0,lcd_mun_to_char[IRcord[1]/0x10]);lcd_char_write(12,0,lcd_mun_to_char[IRcord[1]%0x10]);lcd_char_write(8,1,lcd_mun_to_char[IRcord[2]/0x10]);lcd_char_write(9,1,lcd_mun_to_char[IRcord[2]%0x10]);lcd_char_write(11,1,lcd_mun_to_char[IRcord[3]/0x10]);lcd_char_write(12,1,lcd_mun_to_char[IRcord[3]%0x10]);}//将码值显示在液晶上}}源程序2:(在知道了按键编码的基础上,我们便可以加入判断,判断哪个键被按下,进而执行相关操作)我只修改main函数,其他与源程序1相同sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;sbit led5=P1^4;//发光二极管控制端定义void main(void){uchar i;lcd_system_reset(); /* 初始化LCD1602 */lcd_data_port = 0xff;for(i=0;i<16;i++) lcd_char_write(i,0,line0[i]);for(i=0;i<16;i++) lcd_char_write(i,1,line1[i]);EX0init(); // Enable Global Interrupt FlagTIM0init();while(1){//主循环if(irok){Ircordpro();irok=0;}if(irpro_ok){ /*遥控成功接收*/switch(IRcord[2])//为什么判断IRcord[2],因为这个里面存放的是数据码{case 0x0c: led1=0;//按0键,灯1亮break;case 0x18: led2=0; //按1键,灯2亮break;case 0x5e: led3=0; //按2键,灯3亮break;case 0x08: led4=0; //按3键,灯4亮break;case 0x1c: led5=0; //按4键,灯5亮break;}}}}附连接图。

  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)音阶功能,在发射板上按动七个音阶,在接收板上可以响出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<reg52.h>#define uchar unsigned char#define uint unsigned intuchar m,inform;uint temp; // variable of temperature // sign of the result positive or negativesbit 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<ms;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 delayDS=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++){j=tmpreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}//---------------------------------------------------------------------------void tmpwritebyte(uchar dat) //write a byte to ds18b20{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //write 1{DS=0;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0; //write 0i=8;while(i>0)i--;DS=1;i++;i++;}}}void tmpchange(void) //DS18B20 begin change{dsreset();delay(1);tmpwritebyte(0xcc); // address all drivers on bustmpwritebyte(0x44); // initiates a single temperature conversion }uint tmp() //get the temperature{float tt;.uchar a,b;dsreset();delay(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);a=tmpread();b=tmpread();temp=b;temp<<=8; //two byte compose a int variable temp=temp|a;tt=temp*0.0625;temp=tt*10+0.5;return temp;}void readrom() //read the serial{uchar sn1,sn2;dsreset();delay(1);tmpwritebyte(0x33);sn1=tmpread();sn2=tmpread();}/*--------温度传感器函数定义-----------*///T1 13us产生一次中断用于产生38K载波//T0 方式1 16位用于定时void Init_Timer(){TMOD=0x21; //T0 mode 1 T1 mode 2 TH1=256-13; //定时产生13us//特殊TL1=TH1;ET1=1;EA=1;}//发送引导码发送方:9ms高电平4.5ms低电平void Send_Start_Bit() //TR1的值=发送的电平{//9ms 1TH0=(65536-9000)/256;TL0=(65536-9000)%256;TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;//4.5ms 0TH0=(65536-4500)/256; TL0=(65536-4500)%256; TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}//发送0void Send_Bit_0() {//0.565ms 1TH0=(65536-565)/256;TL0=(65536-565)%256; TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;//0.565ms 0TH0=(65536-565)/256; TL0=(65536-565)%256; TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}//发送1void Send_Bit_1()//0.565ms 1TH0=(65536-565)/256; TL0=(65536-565)%256; TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;//1.685ms 0TH0=(65536-1685)/256; TL0=(65536-1685)%256; TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}void Send_over() //发送一个结束码,因为最后一个位只有遇到下降沿才能读取(发射端的上升沿){//0.500ms 1 //小于0.5ms 接收端很难识别到TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;//0.500ms 0TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}void keyscan(){if(key1==0){delay_ms(5);if(key1==0){m=1;while(!key1);}}if(key2==0){delay_ms(5);if(key2==0){m=2;while(!key2);}}if(key3==0){delay_ms(5);if(key3==0){m=3;while(!key3);}}if(key4==0){delay_ms(5);if(key4==0){m=4;while(!key4);}}if(key5==0){delay_ms(5);if(key5==0){m=5;while(!key1);}}if(key6==0){delay_ms(5);if(key6==0){m=6;while(!key6);}}if(key7==0){delay_ms(5);if(key7==0){m=7;while(!key7);}}if(key8==0){delay_ms(5);if(key8==0){m=8;while(!key8);}}switch(m){case 1:inform=0x7e;break;case 2:inform=0x18;break;case 3:inform=0x3c;break;case 4:inform=0x42;break;case 5:inform=0xe7;break;case 6:inform=0x5a;break;case 7:inform=0x99;break;case 8:inform=0x24;break;default:break;}}void Send_Char(uchar inform,uchar flag) //发送一字节8位{uchar i,j1,j2,j3,j4;j1=flag;j2=0x41;j3=inform;j4=0x20;Send_Start_Bit();for(i=0;i<8;i++){if(j1&0x01)Send_Bit_1();elseSend_Bit_0();j1=j1>>1;//先发射低位}for(i=0;i<8;i++) {if(j2&0x80) Send_Bit_0(); elseSend_Bit_1(); j2=j2<<1;//先发射低位}for(i=0;i<8;i++) {if(j3&0x01) Send_Bit_1(); elseSend_Bit_0(); j3=j3>>1;//先发射低位}for(i=0;i<8;i++) {if(j4&0x80)Send_Bit_0();elseSend_Bit_1();j4=j4<<1;//先发射低位}Send_over();//结束符}void T1_ISR() interrupt 3 {IR_OUT=~IR_OUT;}void delay_send() {uchar i,j;for(i=120;i>1;i--)for(j=500;j>1;j--){keyscan();if(m)Send_Char(inform,0);m=0;}}void main(){Init_Timer();while(1){m=0;IR_OUT=0;tmpchange();if(tmp()>250){inform=0x7e;Send_Char(inform,0);}delay_send();Send_Char(tmp(),0xff);}}#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit IR=P3^2; //红外接口标志sbit Beep=P2^0;sbit A1=P2^1;sbit A2=P2^2;sbit A3=P2^3;/*------------------------------------------------全局变量声明------------------------------------------------*/uchar irtime;//红外用全局变量bit irpro_ok,irok; //是否进行接收和是否接受完毕uchar IRcord[4];uchar irdata[33];uchar Th1,Tl1; //分别给TH0,TH1赋值uchar key=0;uchar code KeyCode[]={0XFF,0XFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B, 0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05, 0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,};uchar code table[]={0x5f,0x06,0x9b,0x97,0xc6,0xd5,0xdd,0x07,0xdf,0xd7}; uchar code table1[]={0x7f,0x26,0xbb,0xb7,0xe6,0xf5,0xfd,0x27,0xff,0xf7}; /*------------------------------------------------函数声明------------------------------------------------*/void Ir_work(void);void Ircordpro(void);//音阶函数声明void PlayKey(void);void DisPlay(void);void delay_ms(uchar ms){uchar i,j;for(i=0;i<120;i++)for(j=0;j<ms;j++);}/*------------------------------------------------定时器0初始化------------------------------------------------*/void TIM0init(void)//定时器初始化{TMOD=0x12;//定时器0工作方式2,TH0是重装值,TL0是初值,定时器1工作方式1TH0=0x00; //重载值TL0=0x00; //初始化值ET0=1; //开中断TR0=1;ET1=1;}/*------------------------------------------------外部中断0初始化------------------------------------------------*/void EX0init(void){IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1; //使能外部中断EA = 1; //开总中断}/*------------------------------------------------定时器0中断处理------------------------------------------------*/void tim0_isr (void) interrupt 1 using 1{irtime++; //用于计数2个下降沿之间的时间}/*------------------------------------------------定时器1中断处理------------------------------------------------*/void time1() interrupt 3{TH1=Th1;TL1=Tl1;Beep=~Beep;}/*------------------------------------------------外部中断0中断处理------------------------------------------------*/void EX0_ISR (void) interrupt 0 //外部中断0服务函数{static unsigned char i; //接收红外信号处理static bit startflag; //是否开始处理标志位if(startflag){if(irtime<63&&irtime>=33)//引导码TC9012的头码,9ms+4.5msi=0;irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1irtime=0;i++;if(i==33){irok=1;i=0;}}else{irtime=0;startflag=1;}}/*------------------------------------------------键值处理------------------------------------------------*/void Ir_work(void)//红外键值散转程序{switch(IRcord[2])//判断第三个数码值{case 0x7e:key=1;break;//1 显示相应的按键值case 0x18:key=2;break;//2case 0x3c:key=3;break;//3case 0x42:key=4;break;//4case 0xe7:key=5;break;//5case 0x5a:key=6;break;//6case 0x99:key=7;break;//7case 0x24:key=8;break;//8default:break;}irpro_ok=0;//处理完成标志}void ledisplay()uchar bai,shi,ge;bai=IRcord[2]/100; shi=IRcord[2]%100/10; ge=IRcord[2]%10;A1=0;P0=table[bai];delay_ms(5);P0=0x00;A1=1;A2=0;P0=table1[shi]; delay_ms(5);P0=0x00;A2=1;A3=0;P0=table[ge];delay_ms(5);P0=0x00;A3=1;}/*------------------------------------------------红外码值处理------------------------------------------------*/void Ircordpro(void)//红外码值处理函数{unsigned char i, j, k;unsigned char cord,value;k=1;for(i=0;i<4;i++) //处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k];if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差value|=0x80;if(j<8){value>>=1;}k++;}IRcord[i]=value;value=0;}irpro_ok=1;//处理完毕标志位置1}//————————————音阶处理函数————————————————————————————//void PlayKey(void) //按键播放程序{if(key==0)return;else{Th1=KeyCode[key*2];Tl1=KeyCode[key*2+1];TR1=1;delay_ms(187);TR1=0;key=0;}}/*------------------------------------------------主函数------------------------------------------------*/void main(void){EX0init(); //初始化外部中断TIM0init();//初始化定时器while(1)//主循环{if(irok) //如果接收好了进行红外处理{Ircordpro();irok=0;}if(irpro_ok){if(IRcord[0]>125){ledisplay();}else{Ir_work();PlayKey();}}}}五、Proteus仿真发射proteus图接收proteus图:六、结束语通过这个比赛,真的时对自己思维的一次很大的挑战,算法想不出来,焊接后不能实现功能。

相关文档
最新文档