




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..智能红外遥控暖风机设计学生:XX指导XX内容摘要:本论文的设计将涉及到单片机主控电路的设计,液晶显示的驱动,红外遥控技术的设计实现,温度的检测以及控制。这几个的设计都是日常生活生产中比较典型的应用模块。例如在智能化家用电器的应用方面:如洗衣机、空调、电视机、录像机、微波炉、电冰箱、电饭煲,红外遥控暖风机以及各种视听设备等等。通过这些设计的过程,我们将系统地学习单片机在日常生产中的设计应用的方法,旨在锻炼自己的运用理论知识转换成实际应用的的能力。单片机遥控暖风机控制系统设计是个系统的项目开发,每个环节的设计,每个模块的设计都将直接影响整个项目的开发进程。通过论文的设计我们将学会对项目的模块化设计的开发方法。关键词:红外遥控红外编码解码单片机Designforvendingmachine'sPLCsystemAbstract:Thispaperwillbeinvolvedinthedesignofthesinglechipmicrocomputertocontrolcircuitdesign,liquidcrystaldisplaydriver,infraredremotecontroltechnologydesignandimplementation,temperaturetestingandcontrol.Theseafewofthedesignaredailylifeistypicalapplicationinproductionmodule.Forexampleintheintelligenthouseholdappliancesapplication:suchaswashingmachine,airconditioning,television,video,microwaveoven,refrigerators,electriccooker,infraredremotecontrolheaterandvariousaudio-visualequipmentandsoon.Throughthedesignprocess,wewillsystemtostudythemicrocomputerinthedailyproductiondesignapplicationmethod,isdesignedtodeveloptheirowntheoryknowledgeconversionintoactualapplicationability.Singlechipmicrocomputercontrolsystemdesignisaremotecontrolheatersystemprojectdevelopment,eachlinkofthedesign,thedesignofeachmodulewilldirectlyaffectthewholeprojectdevelopmentprocess.Throughthedesignofthepaperwewilllearntotheprojectofthemodulardesignmethodofthedevelopment.Keywords:InfraredremotecontrolInfraredcodinganddecodingSingle-chipmicrocomputer.目录TOC\o"1-3"\h\u18185前言 1172941系统分析 194271.1需求分析 1156051.2需求分析的标准 2162381.3功能性分析 269941.4设计目标 2209681.5系统整体结构 3130081.6开发工具介绍 360912系统设计 4206572.1系统设计的原则 4127152.2系统设计的方法 4251343硬件系统的详细设计4130623.1键盘输入模块 4172253.2红外控制系统模块 5195343.3红外接收处理器电路 9320653.4液晶显示模块 11230614软件系统设计 14147224.1键盘扫描的流程图 15109234.2定时器的流程图 1554554.3主程序的流程图 1555604.4主程序的编写 1690735结束语 397572参考文献 40....智能红外遥控暖风机设计前言本文利用高温超导热霸做制热材料,利用80C51单片机实现主要电路的处理和控制。此外还利用各种智能芯片完成相应的辅助功能,应用高级C语言编程软件,完成单片机的事务处理和中断控制。应用软件的设计减少硬件的设计的复杂度和减少开发系统的成本。本文应用硬件和软件的有机结合,实现暖风机的智能控制。温度的采集和处理,液晶显示的控制,红外遥控的控制实现和键盘的输入是本文主要研究的内容。1系统分析1.1需求分析为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对所开发的项目需求进行深入的理解是开发工作获得成功的前提条件。需求分析的任务还不是确定系统完成它的工作,而是仅仅确定系统必须完成哪些工作,也就是对目标系统提出完整,准确,清晰,具体的要求。需求分析是整个项目开发最重要的步骤。需求分析如果做得不到位,以后的开发进程必定受到影响,甚至出现返工或没有在计划的时间内完成开发的任务。1.2需求分析的标准对于硬件的开发和设计,首先要做的工作就是做好需求分析。开发人员要从实际的情况出发,完全考虑普通用户的使用习惯和使用的要求,尽量做到所开发的产品能完全满足用户的需求。并且使产品尽可能地超出现有的同类或延长使用的周期。对不同的控制对象,硬件设计的具体要求有所不同,但是基本的标准大体是一样的:满足用户的要求:硬件设计要满足用户的实际要求,使用的方法要符合用户的使用习惯。性能需求:指系统要满足的定时约束,响应时间,信息量,安全性。可靠性和可用性需求:系统的可靠性与可用性密切相关,它量化用户的使用程度1.3功能性分析红外遥控液晶暖风机系统主要的功能是在一定的范围实现内无线控制暖风机,并且将温度的数值实时地显示在液晶屏幕上。使暖风机可以完成如下的功能:电热丝加热。暖风机分档加热,可以满足复杂环境的暖风热度的要求。吹风/散热风扇。开机后风扇将电热丝加热的空气吹出,形成热风;关机时电热丝停止加热,30S后停止风扇,防止局部受热,设备老化。可控制摇头。控制暖风机的摇头,可以自主地对各个方向吹暖风。液晶实时显示温度。利用液晶显示屏显示实时工作的暖风机吹风温度。可以遥控。利用红外遥控器读对暖风机进行遥控控制。LED报警。当温度高于某个设定值时候,LED报警启动。1.4设计目标红外遥控液晶暖风机系统是具有实际使用功能的家庭日常用品设备。系统的实际目标是利用现代的语言开发技术,利用现在集成芯片技术的广泛应用。利用软件的辅助开发,降低硬件设计的难度,节约开发产品的劳动力,降低产品的开发成本和减少开发周期。使产品具有更大的市场价值。本系统应达到以下目标:在硬件方面:硬件设计是系统开发比较重要的步骤。硬件设计的合理科学对软件的编写起到促进作用。如果硬件设计顺利科学地完成,那么软件的调试必将大大减少时间。硬件设计主要还是考虑在芯片的选型方面。根据系统的要求,选择满足要求的芯片。此外尽量选择自己熟知的芯片。硬件的设计一定达到简化电路的设计。尽量降低系统的复杂度。对整个流程进行合理的,有效的划分,使系统的后期维护更加方便。在软件方面:软件的编写一定实现模块化的编程。开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块的独立性。换句话说,希望设计这样的软件结构,使得每个模块完成一个独立的特定的字功能,并且和其他的模块之间的关系很简单。这就是软件设计的最终目标,也是软件设计所能达到的质量要求。其外,要求运用现在流行的开发语言,保证软件的可读性和可维护性。1.5系统整体结构图1.5-1系统整体结构示意图1.6开发工具介绍对于红外遥控液晶暖风机系统,开发的工具的选取同样的重要。首先应考虑软件的调式环境和硬件的电路设计和仿真。本系统软件的开发使用的工具有Keiluvision2集成开发环境。uvision1是16位的软件,连接实际上是DOS命令行的,不能在windowsNT和windows2000上使用。后来KEIL公司推出新的32位的软件,可以运行在windowsNT,windows2000,windowsME,windows9X。uvision2IDE基于Windows的开发平台,包含一个高效的编辑器,一个项目管理器和一个MAKE工具。uvision2支持所有的KeilC51工具,包含C编译器,宏汇编器,连接/定位器,目标代码到HEX转换器。KeilC51编译器具有如下一些优越性:C51源程序经过优化编译后的代码,其效率接近与汇编语言生成的代码.支持851系列单片机,提供对所有外围硬件部件的操作。无论在有无工作寄存器区转换的情况下,C51都能产生快速中断代码。支持多种衍生单片机产品上的双数据指针及高速算术单。能够在整个应用程序中执行全局寄存器优化。所有应用工具均可产生详细警告信息和错误信息,帮助用户处理难以寻找的问题。支持再入功能和寄存器的独立代码,便于中断服务程序和多任务应用程序的执行。采用分组方式执行代码分组和调式,用户程序代码可以轻松突破64K空间的限制。本系统还使用Easy51Pro编辑器。使用串口通讯,芯片自动判别,编程过程中的擦除、烧写、校验各种操作完全由编程器上的监控芯片89C51控制,不受PC配置及其主频的影响,因此烧写成功率高可以达到100%,烧写速度很快并且烧写速度和微机的档次无关。2.采用57600高速波特率进行数据传送,编程速度可以和一般并行编程器相媲美,经测试,烧写一片4KROM的AT89C51仅需要9.5S,而读取和校验仅需要3.5S4.软件界面友好,菜单、工具栏、快捷键齐全,全中文操作,提供加密功能,可以保护您的创作产权。5.功能完善,具有编程、读取、校验、空检查、擦除、加密等系列功能;6.40pin和20pin锁紧插座,所有器件全部以第一脚对齐,无附加跳线,对于DIP封装芯片无需任何适配器;7.采用优质锁紧插座,和接触不良等问题彻底说再见,可烧写40脚单片机芯片和20脚单片机芯片8.改进的烧写深度确保每一片C51系列芯片的反复烧写次数都能达到1000以上!内部数据至少保存10年。9.因为采用了9针传口通讯随时随地想烧就烧。此外还使用到单片机开发板和PROTELSE等软件。在整个系统开发过程中,使用的应用软件很多,都是专业性比较强的应用软件。对自己的学习,对自己的知识的积累很大的帮助。2系统设计2.1系统设计的原则为了使开发的系统在后期阶段易于维护,并且安全可靠,需要遵循一系列的硬件设计原则,才能保障系统的正常完成预期的开发目标。适应性原则:适应性是系统开发必须遵循的最基本原则。包括两方面,一是要适应用户的要求,二是要主动适应现在的技术环境。递进原则:红外遥控液晶暖风机系统是复杂的系统设计,因此只能先做一个总体规划,然后分步实施,递进发展。节约原则:红外遥控液晶暖风机系统设计以降低硬件成本为目标,发挥硬件和软件相结合的设计理念。可靠性原则:系统开发始终坚持可靠性的原则,开发出性能稳定的硬件系统和软件系统。2.2系统设计的方法系统设计主要分为硬件系统设计和软件系统设计。硬件系统是设计涉及到硬件电路的设计和优化,电器电路的设计一定遵循系统设计原则。选择满足功能要求的硬件部件。硬件系统的设计是模块化设计,最终将各个模块联合在一起,构成一个完整的电路。3硬件系统的详细设计3.1键盘输入模块在单片机应用系统中,通常应具有人机对话的功能,能随时发出各种控制命令和数字输入以及报告应用系统的运行状态与运行的结果。数据或命令的输入方式有多种,有红外扫描输入,语言输入,光电输入等的个。其中键盘输入是应用最广泛的一种。键盘输入方便快捷,而且价格低廉。键盘可以分为独立式和矩阵式两类,每一类按其编码的方法又分为编码和非编码两类。单片机系统中普遍使用非编码式键盘,这类键盘主要解决以下几个问题:①键的识别;②如何消除键的抖动;③键的保护。独立式按键接口电路配置灵活,软件结构简单,但每个按键必须占一根I/O口线。在按键数较多时,I/O线浪费较大,故只在按键数量不多时才采用这种按键电路。在此电路中按键输入部采用低电平有效,上拉电阻保证了按键断开时,I/O口线有确定的高电平。当I/O口内部有上拉电阻时,外电路可以不配置上拉电阻。通过I/O口连接。将每个按键的一端接到单片机的I/O口,另一端接地,这是最简单的方法,如下图所示是实验板上按键的接法,四个按键分别接到P3.0、P3.1、P3.2和P3.3,并在P1口接有8个发光二极管。对于这种键程序可以采用不断查询的方法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。采用中断方式:各个按键都接到一个与非上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做相应的处理。在键盘中的按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍容量,而且线数越多区别越明显。比如多加一条线就可以构成20个按键。所以按键较多时候,采用矩阵方法做键盘是合理的。矩阵式结构的键盘显然要复杂一些,识别也要复杂一些。P1.4~P1.7做输出线,P1.1~P1.3做输入线。列线所接的I/O口则作为输入。这样,当按键没有按下时候,所有的输出端都是高电平,代表无按键按下。行线输出是低电平,一旦有按键按下,输入线就会被拉低,这样,通过读入线的状态就可以知道是否有按键被按下。行扫描法又称为逐行扫描查询法,是一种最常用的按键识别方法,如流程如下。判断键盘中有无按键按下:将全部行线P1.1~P1.3置低电平,然后检测列线的饿状态。只要有一列电平为低,则表示键盘中键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有的列线均为高电平,则键盘中无键按下。判断闭合键所在的位置:在确认有按键按下时候,即可进入确定具体闭合键的过程。其方法是依次将行线置为低电平,即在置某根行线为低电平,其他线为高电平。在确定某根行线位置为低电平后,在逐行检测列线的电平状态。若某列为低,则该列线与置为低电平线交叉处的按键就是闭合的按键。本系统要求有6个按键输入,由于输入按键少,所以选择独立式和矩阵式相差无几。考虑在实现时候软件设计的复杂度,本系统运用独立式的键盘输入方式。3.2红外控制系统模块红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。通用红外遥控系统由发射和接收两大部分组成。应用编/解码专用集成电路芯片来进行控制操作。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。图3.2-1红外线遥控系统框图红外控制系统中的红外发送电路采用NB9148,它是用作通用红外遥控发射器的CMOS大规模集成电路,与NB9149相配完成10个功能控制;与NB9159相配完成18个功能控制;可发射的指令达75个,其中63个是完成连续的指令,可多键组合;12个单发指令,只能单键使用。内部结构主要部分功能描述:振荡电路内含CMOS反相器及自偏置电阻,外接陶瓷振荡器或LC串联谐振回路即可组成振荡器。当振荡频率设定为455KHz时,则发射载波频率为38KHz。只有当按键操作时才会产生振荡,以次降低功耗。键输入通过K1~K6输入和T1~T3 的时序输出可连接6*3键盘矩阵,在T1这列内的6个键可以任意多键组合成63个状态,输出连续发射处于T2和T3这两列的键均只能单键使用,且每按一次只能发射一组控制脉冲。若一列上的数键同时按下,其优先次序为K1,K2,K3,K4,K5,K6。在同一K线上的键多键功能,若同时按下数键,其优先次序为T1,T2,T3。图3.2-2键输入示意图发送命令的格式发送命令由12位组成,其中C1~C3是用户码,用来确定不同的模式。每种组合有3个状态:01。10。11。而00状态不用。H,S1和S2是代表连续发送或单次发送的码,D1~D6是状态发送的数据玛。发送命令由12位码组成。其中C1-C3是用户码,用来确定不同的模式,C1和C2的组合与接收电路NB9150相配,C1和C2与接收电路NB9149相配。每种组合有三个状态:01、10和11,而00状态不用。"0”与"1”的识别
正脉冲的占空比为1/4时,代表"0”图3.2-3正脉冲的示意图无论是0还是1被发射时,正脉冲都是被调制在38KHz的,载波的占空比为1/3。这样有利于减少功耗。图3.2-4正脉冲示意图基本发送波形每发送周期按C1,C2,C3,H.1,S1,S2,D1,D2,D3,D4,D5,D6的次序串行发送,总长度为48a,其中a等于每个码期的1/4。图3.2-5波形序列示意图3.3红外接收处理器电路控制系统不采用与其配套的接收电路,采用通用的红外接受器接受到调制后的方波脉冲序列,然后由单片机处理并进行相应的控制。单片机的电源采用5V,而由红外接受器接收到的由NB9148发出的经过检波去除8KHz载波后的方波信号的高电平为5V,正好相匹配。如下图所示,由发光接收元件接收的信号经放大,检波去除38KHZ载波到信号输入端。接收信号输入电路内含斯密特触发器对接信号进行整形。图3.3-1元件连接示意图接收信号编码的判断根据9148的编码规则,从编码表中可以看出,接收到的12位编码中,最后6位只有一个。每个循环组成一个编码组,这样每组有6个指令码,第一组1~6是连续发送的编码,7~12是第一组单发的编码,13~18则是第二组单发编码。具体实施控制的其他外围电路可以根据需要添加。光电放大电路光电放大电路如图所示图3.3-2光电放大电路振荡电路发射信号的时间检测和内部工作时钟都由此振荡电路决定。应用NB9149时,只需要简单地在单端振荡端并联R和C到地,即可产生稳定的振荡。振荡电路如下图所示图3.3-3振荡电路示意图3.4液晶显示模块液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就显示黑色,这样即可显示出图形。液晶显示器具有厚度薄,适于大规模集成电路直接驱动,易于显示全彩色显示的特点,目前已经被广泛应用在各个领域。线段的显示点阵图形式液晶由M*N个显示单元组成,假设LCD显示屏有64行,128列,每8列对应一个1字节的8位,即每行由16个字节,共128个点组成,屏上64*16个显示单元与显示RAW区1024字节相对应,每一字节的内容和显示屏上相对应位置的明暗对应。例如屏的第一行的亮暗由RAW区的000H~00FH的16字节的内容决定,当〔000=FFH时,则屏上的左上角显示一条亮线,长度为8个点;当〔3FGH=FFH时,则屏上的右下角显示一条短亮线;当〔000H=FFH,〔001H=00H,〔002H=FFH,〔003H=00H,……<00E>=FFH,<00FH>=00H时,则在屏的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。在小规模点阵液晶显示模块上使用液晶显示驱动控制器组成液晶显示驱动控制系统是非常有益的。这使得液晶显示模块的硬件电路简单化,从而降低模块的成本。但是这也是同时提高了对软件功能的要求,也就是说,许多显示功能如光标,字符库,闪烁等都需要由软件编制而成。HD61203和HD61202就是这类液晶显示驱动控制器件套件。他们必须配套使用,通常有12864和19264两种规格。HD61202的电特性:HD61202是带显示存储器的图形液晶显示列驱动控制器,它的特性是内置64*64位的显示存储器,显示屏上各个象素的显示状态与显示存储器的各位数据一一对应,显示存储器的数据直接作为图形显示的驱动信号。显示数据为"1”,相应的像素点显示;显示数据"012864液晶模块共有两片HD61202作为列驱动器。CSA跟HD61202〔1的CS1相连,CSB跟HD61202〔2的CS1相连,因此CSA,CSB选通组合信号CSACSB=01选通〔1,CSACSB=10选通〔2。在12864中,两片HD61202的ADC均接高电平,RST也接高电平,这样在使用12864时就不必考虑着两个引脚的作用。内置的HD61202图形液晶显示模块与单片机的连接方式有两种,一种为直接访问方式,一种为间接访问方式直接访问方式硬件电路直接访问方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在单片机总线上,单片机以访问存储器或I/O设备的方式操作液晶显示模块的工作。直接访问方式的接口实用电路如图所示。在图中,单片机80C51通过高位地址A11〔P2。3控制CSB,A10<P2.2>控制CSA,以选通液晶显示屏上各个区的控制器HD61202;同时80C51用地址A9〔P2。1作为R/W信号控制数据总线的数据流向;用地址A8〔P2。0作为D/I信号控制寄存器的选择;E信号由80C51的P2。7产生。这样就实现了单片机对内置HD61202图形液晶显示模块的电路连接。电位器用于显示对比度高的调节。间接方式访问硬件电路:间接控制方式是单片机通过自身的或系统中的并行接口与液晶显示模块连接,如8031的P1和P3口或8255等并行接口芯片以及像74LS373类锁存器等。单片机通过对这些接口的操作,以达到对液晶显示模块的控制。这种方式的特点是电路简单,控制时序由软件实现,可以实现高速单片机与液晶显示模块的接口。实用电路如图所示。在图中电路中以8031的P1口作为数据口,P3.0〔RxD为CSA,P3.1<TxD>为CSB,P3.2<INT0>为D/I,P3.3<>INT1>为R/W和P3.4<T0>为E等信号。由于在BUSY和REST状态时,除读指令外,其他指令均不产生作用,因此在程序中,对HD61202进行操作前都要"判忙",以确定是否可以对液晶进行操作。初始化部分,先送先显示指令,关闭所有显示,然后开显示指令,为显示做准备,最后设置起始行。清屏部分,先进行页地址设计,之后进行列地址操作,分别清除左右半屏,即对RAM进行擦除操作。3.5温度检测与控制 由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。数字温度传感器DS18B20的测温范围为一55~+125C,精度为0.5C,测量的温度值用912位数字表示,最大转换时间为750ms,温度超标报警的上、下限值,DS18B20的转换分辨率均可由用户设定,并能长期保存。DS18B20的另一特点是在没有外部电源下操作的能力,电源由总线为高电平时DQ脚上的上拉电阻提供<寄生供电模式>,此时VCC脚接地。也可用传统方式供电,即将外部电源接在VCC脚上即可。CPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。温度检测处理芯片有上图两种封装模式,本文应用前者封装模式。3.6继电器控制电路继电器控制电路包括电热丝开关和暖风机功能继电器控制电路。如图3.6-1所示:图3.6-1继电器控制电路示意图暖风机功能继电器控制电路的基本组成包括:应用两组继电器,分别控制风扇的转动和摇头控制开关。三极管为NPN型三极管,其集电极与继电器的开关相连,提供开启继电器必须的电流。基极与单片机的管脚相连,因此,继电器的开启电流实际是由单片机控制的。4软件系统设计系统的软件设计包括红外信号的处理程序,键盘的输入处理程序,温度的采集和处理程序还有液晶显示的驱动程序。软件系统开发的基本流程包括系统的功能分析,功能模块的划分,流程图和最终的代码编写。4.1键盘扫描的流程图图4.1-1键盘扫描的流程图4.2定时器的流程图图4.2-1定时器的流程图4.3主程序的流程图图4.3-1主程序的流程图4.4主程序的编写#include<reg51.h>#include<intrins.h>sbitRST=P2^0;sbitCLK=P2^1;sbitDQ=P2^2;sbitTSOR=P2^3;sbitALERT=P2^4;sbitRS=P2^7;sbitRW=P2^6;sbitEN=P2^5;staticunsihnedchartemp1,temp2;//温度值的整数部分,小数部分staticunsihnedcharpos,posset;//数字电位器电位值,设定值staticunsihnedcharmin,sec;//分钟,秒staticunsihnedcharcount;//中断计时T0staticunsihnedcharminset;//设定的分钟数staticunsihnedcharstatus1,status2;//状态标志bitstop,timeover;//定时停止,结束staticcharline0[]="00:00”staticcharline1[]="cw";#defineREGINT0x06//红外线间隔UnsighnedcharbdataMessage;//定义存放消息标志的可位寻址字节sbitRedMsg=Message^0;//红外遥控消息sbitRedRead=Message^1;//位接收过程标志sbitRedBit=Message^2;//接收到的位值sbitRSend=Message^3;//红外接收中重新发送标志unsighedcharbdataRedDatal,RedDataH;/*存放遥控的字数据,低4位存放接收到的位的位移,高12位从低到高存放接收到的位*//*RedDataH字节低6位代表指令,只有一个1,C1~C3是用户码,H表示连续,S1,S2分别表示第一,第二组单发*/sbitRedData0=RedDataL^4;//C1sbitRedData1=RedDataL^5;//C2sbitRedData2=RedDataL^6;//C3sbitRedData3=RedDataL^7;//HsbitRedData11=RedDataH^0;//D6sbitRedData10=RedDataH^1//D5sbitRedData9=RedDataH^2;//D4sbitRedData8=RedDataH^3;//D3sbitRedData7=RedDataH^4;//D2sbitRedData6=RedDataH^5;//D1sbitRedData5=RedDataH^6;//S2sbitRedData4=RedDataH^7;//S1unsighnedcharbdataState;//状态字节sbitRedControl=State^6;//遥控状态unsighnedchardataRedCon,Timer;unsighnedintnTimer;//定时整形参数voidinitinterupt<>;voidkeyboarddelay<>;//键盘输入函数/*LCD驱动函数*/voiddelayl<>;voiddelays<>;voidwritecommand<unsignedcharc>;voidwritedata<unsignedcharc>;voidshowchar<unsignedcharpos,unsignedcharc>;voidshowstring<unsignedcharline,char*ptr>;voidinitlcd<>;/*键盘程序*/unsignedchargetkey<>;/*温度传感器驱动*/voiddelay15<>;voiddelay60<>;voiddelay100ms<>;voidwrite0ts<>;voidwrite1ts<>;bitreadts<>;voidresets<>;voidwitebts<unsignedcharbyte>;unsignedcharreadbts<>;voidgettempts<>;/*主程序*/voidmain<>{charcodestr1[]={"HELLOWORLD!"}charcodestr2[]={"2007-5-31unsignedcharI;sp=0x50;alert=0;tsor=1;delayl<>;initlcd<>;delayl<>;showstring<0,str1>;showstring<1,str2>;for<i=0;i<15;i++>delay100ms<>;initinterupt<>;minset=10;posset=0;min=minset;pos=posset;sec=0;count=0;P1=0xF0;satatus1=0;status2=0;stop=1;timeover=0;changepos<0,255-pos,255-pos>;inits<>;while<1>{gettempts<>;line1[0]=0x20;i=temp1;if<i>9>alert=1;if<i>9>{line1[0]=0x31;i-=100;}line1[1]=i/10+0x30;line[2]=i%10+0x30;line1[4]=temp2+0x30;of<timeover>{for<;pos>0;pos-->{changepos<0,255-pos,255-pos>;nop<>;nop<>;}timeover=0;posset=0;}if<pos>posset>{for<;pos>posset;pos-->{changepos<0,255-pos,255-pos>;nop<>;nop<>;elseif<pos<posset>{for<;pos<posset;pos++>{changepos<0,255-pos,255-pos>;nop<>;nop<>;}changepos<0,255-pos,255-pos>;}i=pos;line1[9]=0x20;if<i>99>{line1[9=i/100+0x30;i=i%100;}line1[10]=i/10+0x30;line1[11]=i/10+0x30;showstring<1,line1>;line0[5]=min/10+0x30;line0[6]=min%10+0x30;line0[8]=sec%10+0x30;line0[9]=sec%10+0x30;showstring<0,line0>;delay100ms<>;}}voidinitinterupt<>{TOMD=0x21;TL1=0xFD;TH1=0xFD;PX0=1;EA=1;ES=1;PCON=0;TR1=1;SCON=0X50;TL0=0x00;TH0=0x4C;EX0=1;IT0=1;}voidkayboarddelay<>{
unsignedcharI,j;i=0x40;j=0xFF;while<i-->while<j-->;}int0_process<>interrupt0using0{unsignedcharkeyunsignedcharkeyboard[]="TP’;unsignedcharstep[3]={1,2,5};EA=0;key=getkey<>;switch<key>{case0;stop=!stop;min=minset;sec=0;break;case1:case2:case3:if<stop>{minset+=step[key-1];if<minset>60>minset=0;min=minset;}break;case5;case6;case7;if<stop>minset+=step[key-5];if<minset>60>minset=0;min=minset;}break;case9:case10:case11:posset+=step[key-9];break;case13:case14:case15:posset-=step[key-123];break;default;break;} TR0=!stop;keyboarddelay<>;P1=0Xf0;EA=1;}timer0_process<>interrupt1using0{EA=0;TR0=0;TL0=0x00;TH0=0x4C;count++;if<count==20>{
if<sec==0>{if<min==0>timeover=1;else{min--;sec=59;}}elsesec--;count=0;}TR0=1;EA=1;}voiddelay<>{unsignedcharI,j;i=0Xf0;j=0xFF;while<i-->while<j-->;}voiddelays<>{unsignedchari;i=0x1F;while<i-->;}voidwritecommand<unsignedcharc>{delays<>;EN=0;RS=0;RS=0;RW=0;nop<>;EN=1;P0=C;EN=0;}voidwritedata<unsignedcharc>{
delays<>;EN=0;RS=1;RW=0;nop<>;EN=1;P0=C;EN=0;RS=0;}voidshowcahr<unsignedcharpos,unsignedcharc>{unsignedcharp;if<pos>=0x10>p=pos+0Xb0;elsep=pos+0x80;writecommand<p>;writedata<c>;}voidshowstring<unsignedcharline,char*ptr>{unsignedchari,j;l=line<<4;for<i=0;i<16;i++>showchar<i++;*<ptr+i>>;}voidinitlcd<>{delayl<>;writecommand<0x38>;writecommand<0x38>;writecommand<0x06>;writecommand<0x0c>;writecommand<0x01>;writecommand<0x80>;}unsignedchargetkey<>{unsignedk,t,i,j;k=P1;k=k&0xF0;i=0;while<<k&0x01>&&i<4>{i++;k=k>>1;}k=0x01;j=0;while<j<4>{
P1=0Xff^k;nop<>;t=p1;t=t^0Xff;t=t&0xf0;if<t>{break;j++;k=k<<1;}k=j*4+i;returnk;}voidchangepos<bitsel,unsignedcharpos,unsignedcharpos2>{unsignedchari;RST=0;DQ=0;CLK=0;RST=1;DQ=sel;nop<>;CLK=1;nop<>;CLK=0;for<i=0;i<8;i++>{if<pos1&0x80>DQ=1;elseDQ=0;nop<>;CLK=1;nop<>;CLK=0;pos1=pos1<<1;}for<i=0;i<8;i++>{if<pos2&0x80>DQ=1;elseDQ=0;nop<>;CLK=1;nop<>;CLK=0;pos2=pos2<<1;}RST=0;}voiddelay100ms<>{unsignedchari,j,k;for<i=0;i<8;i++>for<j=0;j<25;j++>for<k=0;k<250;k++>;}voiddelay15<>{unsignedchari;for<i=0;i<8;i++>;}voiddelay60<>{unsignedchari;for<i=0;i<30;i++>;}voidwrite0ts<>{TSOR=1;TSOR=0;delay15<>;delay15<>;delay15<>;dealy15<>;TSOR=1;nop<>;nop<>;}voidwrite1ts<>{TSOR=1;TSOR=0;nop<>;nop<>;nop<>;nop<>;nop<>;nop<>;delay15<>;delay15<>;delay15<>;}bitreadts<>{bitb;TSOR=1;TSOR=0;nop<>;nop<>;nop<>;nop<>;TSOR=1;nop<>;nop<>;nop<>;nop<>;nop<>;b=TSOR;delay15<>;delay15<>;delay15<>;nop<>;nop<>;returnb;}voidresetts<>{unsignedchari;TSOR=1;TSOR=0;for<i=0;i<8;i++>delay60<>;TSOR=1;while<TSOR>;for<i=0;i<8;i++>delay60<>;}voidwritebts<unsignedcharbyte>{unsignedchari;for<i=0;i<8;i++>{if<byte&0x01>write1ts<>;elsewrite0ts<>;byte=byte>>1;}}unsignedcharreadbts<>{unsignedchari,j;bitb;j=0;for<i=0;i<8;i++>{b=readts<>;if<b>j+=1;j=cror<j,1>;}returnj;}voidinits<>{reset<>;writebts<0xcc>;writebts<0x4E>;writebts<0x64>;writebts<0x8A>;writebts<0x1F>;}voidgettempts<>{reset<>;writebts<0xcc>;writebts<0x44>;delay100ms<>;reset<>;writebts<0xcc>;writebts<0xBE>;temp2=readbts<>;temp1=readbts<>;readbts<>;readbts<>;readbts<>;readbts<>;readbts<>;readbts<>;readbts<>;temp1=temp1<<4;temp1+=<temp2&0xf0>>>4;temp2=<temp2&0x0f>?5:0;}voidhongwai<>{
IEN0=0x14;//打开INT1中断WDRST=0x1E;//看门狗清零WDRST=0xE1;WDCON=0x12;//40~90ms看门狗TCON=0x12;//定时器1工作,INT1低电平触发TMOD=0x23;//定时器0扩展成两个8位定时器T00和T01用于同步控制if<<WDCON&0x30>!=0x30>//看门狗陷阱复位时无需初始化{Messge=0;//无消息State=0;//正常复位无任何状态}while<1>//消息循环{WDRST=0x1E;//看门狗清零WDRST=0xE1;EX1=RedContol;//设计遥控中断INT1if<RedMsg>//执行遥控责令{EX1=0;//在占领没有执行完之前不能重复中断switch<RedDataH>//这里加入红外指令的控制过程{case0x82://channel1break;case0xA0://channel2Break;}EX1=1;RedataL=0;//复位红外数据RedataH=0;//复位红外数据RedMsg=0;//复位红外遥控消息}}}voidContr0<void>interrupt1using3//定时器T00中断,最大定时37ms{if<Timer!=0>//检测定时器T00的扩展高位{Timer--;return;}}/*INT1用于红外解码状态遥控解码数据处理,nTmer=1定时152~291us*/voidinte1<>interrupt2using2;{for<nTimer=8;Time1>1;nTimer-->;//使处理周期达到51机器周期=27。7usif<RedRead>//0信号宽度为420us,1信号宽度1260us,周期1680usRedRead++;esle//开始计数或者重新发送时开始计数{RedBit=0;//复位接收位RedCon=0;//复位载波计数RedRead=1;//置位位接收标志if<!ET1>//首次接收时没有启动定时器T01接受第一位{TF1=0;//复位定时器T01益出标志ET1=1;//启动T01定时RedDataL=0;//复位红外数据RedDataH=0;//复位红外数据RSend=0;//复位重新发送标志}}}voidContr1<void>interrupt3using3//定时器T01中断,最大定时9。1S{if<nTimer!=0>//检测定时器T01的扩展高位{nTimer--;return;}ET1=0;//关闭T01中断if<RedRead>//红外接收状态{
if<<RedData;&0xF>==12>//第一阶段接收已经结束{RSend=1;//置位重新发送标志以便校检RedDataL&=0xf0;//复位位指针以便校检}if<RedCon>27-REDINT&&RedCon<27+REDINT>RedBit=1;elseRedBit=0;//低电平计数9表示027表示1if<RSend>//检验重复发送的数据是否与第一次符合{switch<RedDataL&0xf>{case0://检验重复发送的第1位数据if<RedBit!=ReData0>gotoRClear;break;case1://检验重复发送的第2位数据if<RedBit!=ReData1gotoRClear;break;case2://检验重复发送的第3位数据if<RedBit!=ReData2>gotoRClear;break;case3://检验重复发送的第4位数据if<RedBit!=ReData3>gotoRClear;break;case4://检验重复发送的第5位数据if<RedBit!=ReData4>gotoRClear;break;case5://检验重复发送的第6位数据if<RedBit!=ReData5>gotoRClear;break;case6://检验重复发送的第7位数据if<RedBit!=ReData6>gotoRClear;break;case7://检验重复发送的第8位数据if<RedBit!=ReData7>gotoRClear;break;case8://检验重复发送的第9位数据if<RedBit!=ReData8>gotoRClear;break;case9://检验重复发送的第10数据if<RedBit!=ReData9>gotoRClear;break;case10://检验重复发送的第11位数据if<RedBit!=ReData10>gotoRClear;break;case11://检验重复发送的第12位数据if<RedBit!=ReData11>gotoRCle
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年电力系统新技术试题及答案
- 2025【合同协议范本】石材购销合同
- 2025专业版果园承包合同协议书
- 2025【设备租赁合同范本】设备租赁合同示例
- 预案编制与管理(隋旭)
- 2025个体工商户与金融机构借款合同协议
- 福建师范大学《古文字学与古代汉语》2023-2024学年第一学期期末试卷
- 河北正定师范高等专科学校《第二外语(日)(三)》2023-2024学年第二学期期末试卷
- 郑州西亚斯学院《台词表演I》2023-2024学年第二学期期末试卷
- 贵州警察学院《转化医学与职业发展》2023-2024学年第二学期期末试卷
- 《营养与肥胖》课件
- 绿色生态中小学生校服
- 全宋词目录完整版本
- 支付宝解除账户支付申请书
- 桂林电子科技大学国防科技泄密事件报告表
- 单原子催化剂
- 特许经营管理手册范本(餐饮)
- 手术室护理实践指南之术中保温(手术科培训课件)术中低体温的预防
- 市场管理能力笔试测试题
- 学习探究诊断 化学 必修二
- 八年级道德与法治下册 (公民基本义务) 课件
评论
0/150
提交评论