遥控定时插座论文.doc
山东大学(威海)机电与信息工程学院挑战杯课题名称 遥控定时插座 专 业 测控技术与仪器 班 级 10级 学 号 201000800011 姓 名 胡旭东 2013年 3 月 20 日目录1摘要.32. 前言.43.市场前景.53.1 宏观环境分析. .53.2 微观环境分析53.3遥控定时插座与传统插座优劣势比较.53.4遥控定时插座市场营销策略.54.系 统 设 计.74.1系统设计任务.74.2系统设计方案选择.74.2.1单片机芯片的选择.74.2.2显示模块选择.74.2.3继电器选择.84.2.4按键的选择.84.2.5红外遥控控制方案选择.85.硬件电路设计及工作原理.95.1主控制器MSP430.95.2升压电路105.3LCD显示电路125.4红外遥控电路165.5继电器电路186.软件设计.186.1计时程序的编写196.2 LCD显示电路的编写.216.3 主程序的编写.257.系统调试.277.1电路设计前期工作277.2软件部分的调试277.3设计结果287.4设计中存在的不足及其改进288. 结 束 语.299.参考文献29附录1 程序.301.摘 要随着家用电器的越来越普及和人们生活节奏的加快,人们对电器的依赖性进一步提高,对电器的定时需求也进一步增大。定时开关插座可对路灯、广告灯、电饭煲、饮水机、水族箱、电热水器、电热毯、抽水机排气扇空调机、防盗器、台灯等多数用电器进行定时控制。本设计主要是解决普通家电的智能化控制,主要描述一个遥控定时插座的设计与制作。该定时插座可以弥补现实生活中普通插座功能的不足,能够通过外设按键或遥控器设置插座的供电时间,使外接电器可以按照一定规律工作,既可以达到智能控制的目的,又在很大程度上起到节能的作用。关键词MSP430;定时;插座;红外遥控;继电器;LCD1602AbstractThis paper mainly describes the design and production of a timing socket. The timing socket could compensate for the shortage of the common socket .It also could set any timding in a day and six grouds of fast timing by the key.At the same time,it could also be remotly controlled through infrared remote control so that home applianes could work according to certain rules.In this way, it can achieve the purpose of being intelligently controlled and will largely save the electric energy. Key WordsMSP430; Timing; Socket; Infrared; relay; LCD16022.前 言电,是现代人生活中,不可或缺的能源。近年来地球气候日益变暖,国家也越来越提倡节能减排、绿色环保,节约用电正作为一个新的方面纳入议题,各种节能、节电产品层出不穷,这在一定程度上也促进了我国节能环保事业的发展,然而,这些产品的节电程度如何,怎样在已有的基础上进一步做到节电,这仍旧是我们不断追求的。根据对现今市场上已经存在的节电设备以及对部分用电产品的考查,我们提出了定时插座的想法,解决某些特殊原因给我们的生活或工作带来一些困扰和遗憾。比如:家中的水塔忘记抽水而造成生活的一时不便;学校的起床广播因值班人员睡过头而推迟广播;家中的鱼缸因太久没有供氧造成鱼儿缺氧死亡;许多球迷或者新闻爱好者因为错过了开机时间而与精彩球赛或者新闻擦肩而过;夏天里风扇的定时时间过短(一般为1个小时),不便于晚上分段定时使用等等。而上面的这些问题都可以通过定时开关插座的定时功能得到解决。定时插座可对任何电器进行定时控制,方便我们的日常生活。3.市 场 前 景3.1 宏观环境分析 近年来,随着我国科学发展观的贯彻执行,绿色的发展理念正在被越来越多控制能源消费总量,改善环境质量,维护人民健康。在倡导节能减排的宏观经济环境下,遥控定时插座一经推广,必然会受到企业的支持,因而有着广阔的发展前景。3.2 微观环境分析随着人们文化素质的不断提升,绿色消费理念在人们的脑海中逐渐萌芽。遥控定时插座在节能的同时也能减少消费者的电费支出,因而与传统的插座相比,遥控定时插座有着巨大的优势。3.3遥控定时插座与传统插座优劣势比较优势劣势遥控定时插座节电可保护电池,延长电池寿命能够实现远距离遥控成本相对较高传统插座成本相对较低费电损害电池无法远距离遥控3.4遥控定时插座市场营销策略在电器普及的今天,插座作为一种日常生活用品,存在于家家户户。因而我们所研发的遥控定时插座的目标消费者为普通老百姓。任何需要插座的人都是我们的潜在顾客。针对改进的新产品,我们设计了如下市场营销策略。3.4.1产品策略 我们所研发的遥控定时插座属于在原有普通插座上加以改进而来的新产品。与传统插座相比,该款插座可以定时断电,减少了电能的损耗,延长了电器的电池寿命。同时,其附带的遥控板也可以实现远程控制,为消费者带来了巨大的便利性。为了是其能够在市场上顺利的得意推广,我们认为应该在保证以上功能的前提下提高产品质量,增强产品的安全性,并尽可能的将其打造成一个插座行业的知名品牌。3.4.2价格策略在定价时,我们采用成本定价和竞争导向定价相结合的定价方法,在考虑成本、保证利润的前提下,尽量缩小与普通插座的价格差别。虽然我们所研发的遥控定时插座在成本上会高于普通插座,但是因为它属于日常消费品,有着众多的目标顾客和巨大的市场空间,因而可以通过大规模标准化批量生产减少其成本,尽量缩短其与普通插座的价差。3.4.3分销策略 在分销渠道的选择上,我们会利用普通插座的分销渠道,如各个商店、超市、小卖店等,做到只要有普通插座的地方就有遥控定时插座。3.4.4 促销策略 在新产品刚推入市场时,我们会选择公共关系和广告等促销策略。通过权威部门对节能减排的呼吁和在电视上做一些公益广告来达到初期扩大产品知名度的需要。4.系 统 设 计4.1系统设计任务 设计一个以单片机MSP430控制的定时开关插座,要求能控制一路220V/10A的插座,使其可以在24小时内能预先设定定时范围,控制用电器具的自动关闭,同时还能通过红外遥控随时控制插座的开关,从而达到方便、智能、节电的目的。4.2系统设计方案选择4.2.1单片机芯片的选择与其余厂家的MCU比较可得,MSP430是一款非常低功耗的单片机。MSP430 单片机具有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。首先,MSP430 系列单片机的电源电压采用的是1.8-3.6V 电压。因而可使其在1MHz 的时钟条件下运行时,芯片的电流最低会在165A左右,RAM 保持模式下的最低功耗只有0.1A。其次,独特的时钟系统设计。在 MSP430 系列中有两个不同的时钟系统:基本时钟系统、锁频环(FLL 和FLL+)时钟系统和DCO数字振荡器时钟系统。可以只使用一个晶体振荡器(32768Hz),也可以使用两个晶体振荡器。由系统时钟系统产生 CPU 和各功能所需的时钟。并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。由于系统运行时开启的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共有一种活动模式(AM)和五种低功耗模式(LPM0LPM4)。在实时时钟模式下,可达2.5A ,在RAM 保持模式下,最低可达0.1A .4.2.2显示模块选择采用LCD1602液晶显示。LCD1602液晶能够同时显示16*02即32个字符,1602液晶显示模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等。4.2.3继电器选择采用SONGLE SRD-05VDC-SL-C继电器。该继电器最大可以耐压交流250V,最大可通过10A的交流电流。继电器输出一般都是弱电控制的强电,普通继电器相当于一个单刀双掷开关,控制外部电路的有三个管脚,不通控制电流时(默认状态)中间管脚接通一个左边管脚,通入控制电流时中间管脚接通右边管脚,继电器的吸合是要电流作用于电磁铁,由于这个电流不小,所以单靠单片机I/O口是不足以使继电器吸合的,应该加一个驱动(起功率放大作用,给继电器提供足够的电流),再单片机用I/0口来控制驱动。故在电路中起着自动调节、安全保护、转换电路等作用,实现小电压控制大电压的目的。4.2.4WiFi模块的选择 由于自主开发wifi模块成本较高,所以采用市场上已有的wifi模块TI CC3200方案:采用TI方案,品质和供货均有保证,基于ARM Cortex-M4内核,运行频率高达80MHz;超低功耗:在网功耗低至3.5mA,深度休眠最低25uA;插座采用无线通信与联网,然后数据通过云端进行控制,手机通过联网来进行管理。在传统插座端集成无线通信模组,连接到家里的路由器,通过路由器把数据分享到小米云端,手机通过登录小米云端进行控制。开放SDK:TI CC3200是一颗强大的MCU,可以直接用内部资源而省掉外部的单片机,支持用户根据TI的SDK自行开发,后期也支持利用“有人”封装的SDK二次开发;超小尺寸:只有一个拇指大小,18.22*26.65*2.8(mm);高速UART:波特率最高支持3M bps;Simplelink:一键联入Wi-Fi网络;4.2.5红外遥控控制方案选择本系统采用已编码的38kHz红外遥控器发射接收模块,介于自制红外编码发送接收模块的设计复杂,成本也会增加不少,因而采用已编码完成的红外遥控器和红外接收管实现红外控制的目的。5.硬件电路设计及工作原理 定时插座系统在未设置任何定时的时候显示界面00:00:00,通过App应用可设置在24小时内的定时模式,控制插座的开关,从而控制外部电器的工作与否。红外遥控要实现的就是通过App应用控制定时开关插座的定时功能。 总体的硬件电路框图如下图所示:MSP430内部时钟计时模块继电器模块红外接收模块液晶显示模块WiFi网络模块5V稳压模块5.1主控制器MSP430MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。这些特点保证了可编制出高效率的源程序。 运算速度快MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如 FFT 等)。 超低功耗内部时钟计时模块:·8031中的计数器除了可以作为计数之用外,还可以用作时钟,时钟的用途当然很大,如打铃器,电视机定时关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢? 一个闹钟,我将它定时在1个小时后闹响,换言之,也可以说是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间的确十分相关。那么它们的关系是什么呢?那就是秒针每一次走动正好是1秒。 图1 MSP430单片机引脚图5.2升压电路当前3.3V供电的系统已经十分常见了,并且差不多超过了5V供电系统的应用,而5V系统依然存在,这就造成了现在许多系统中出现3.3V供电和5V供电同时存在的现象,这也就给我们提出了对3.3V和5V两种电平进行相互转换的课题。3.3V向5V的转换因为3.3V和5V系统的逻辑电平是统一的,所以大多数场合是不需要做转换。但是在一些特殊的场合,特别是一些需要5V驱动的场合,就必须要求实现3.3V向5V的完全转换。比较简单的分离电路如下: 图2 电压转换电路图从图中我们可以看出,关键在于二极管的应用。当逻辑低电平,即3.3IN = 0V时,二极管导通,5OUT = 0.6V符合要求,这是不难理解的。关键是当逻辑高电平,即3.3IN = 3.3V时,二极管能截至吗?如果能截至则5OUT = 5V。因为我们平常受发光二极管点亮需要几mA电流的影响,当我们一算导通电流是(5-3.3-0.6)/10K = 0.11mA时,则会认为此时电流太小二极管是不会导通的,即此时二极管是截至的。但是,如果我们翻一下模电的书,我们就会发现,二极管根本不存在导通电流这样一个概念,只是存在正向导通电压这样的特性。这其实要从二极管的基本概念和构造说起,二极管在物理上是一个PN结,PN结之间只要加上超过门槛值的正向电压就可以出现电子的流动。这一点,我们从二极管的伏安特性曲线上也可以看出。 图3 二极管I-V曲线普通的二极管比如IN4148的正向导通电压为1V,也就是说只要在二极管的正负极加上的正向电压超过1V则二极管就会导通。在上面的系统中5-3.3-0.6 = 1.1 1V。因此,当3.3IN = 3.3V时,图中的二极管肯定会导通的,输出 3.3V <= 5OUT <= 3.9V。那么,我们上面的电路不能实现3.3V向5V的转换了吗?通过上面的分析,我们可以发现用普通的二极管是肯定不能实现的,但是我们忘了我们还有另外一种熟悉的二极管,就是我们上面曾经提到过的发光二极管,它的基本物理结构和普通二极管是一样的,但是由于其要实现发光,这样它的正向导通电压至少要为1.7V,所以在这个电路中,我们只要把普通二极管换成发光二极管,当3.3IN = 3.3V时,发光二极管的正向电压小于正向导通电压1.7V,因此截至,这样5OUT = 5V。最终符合了我们的要求。5.3LCD显示电路本设计采用的是LCD1602字符型液晶显示器。LCD液晶显示器是一种低功耗的显示器件,它广泛应用于工业控制、消费电子及便携式电子产品中。它不仅省电,而且能够显示大量的信息,如文字、曲线、图形、动画等,其功能比数码管强大得多。LCD1602液晶显示模块可同时显示16*2即32个字符,内部含有的字符发生存储器里面存储了160个不同的点阵字符图形,包括阿拉伯数字、英文字母的大小写、常用的符号和日文的片假名等,每个字符都有一个固定的代码,比如大小写英文字母的A的代码是01000001B(41H),显示模块在显示A时就把地址41H中的点阵字符图像显示出来,我们就能看到屏幕显示字母A了。图4 为1602字符型液晶显示器实物图1602LCD 分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图所示:图5 为1602LCD 尺寸图5.3.1引脚功能说明1602LCD 采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表所示:表1:引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端12D5Data I/O5R/W读/写选择端13D6Data I/O6E使能信号14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极第1脚:VSS 为地电源。第2脚:VDD 接5V 正电源。第3脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度。第4脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和R/W 共同为低电平时可以写入指令或者显示地址,当RS 为低电平R/W 为高电平时可以读忙信号,当RS 为高电平R/W 为低电平时可以写入数据。第6脚:E 端为使能端,当E 端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。5.3.2 LCD1602的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如下表所示:表2:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H 位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM 地址设置。指令8:DDRAM 地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。5.3.3 LCD1602 的RAM 地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,下图是1602的内部显示地址。图6 为1602LCD 内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”5.4网络控制电路这里使用的是已编码完成的红外遥控器如图7和对应的红外线接收管如图8所示 图7 红外遥控器 图3 1838T红外接收管 键盘编码调制LED解码解调光/电放大遥控发射器遥控接收器 图9 红外遥控系统框图如图9为红外遥控系统框图。遥控器的每个按键都已经经过编码,当发射器拨键开关拨到ON档时,即有遥控码发出(可以发送任意数字暂定为发送0AAH(二进制:10101010B),这种遥控码具有以下特征:采用脉宽调制的串行码,刚开始发送38K码5ms来判定发射码开始标志,以脉宽为1.5ms、间隔0.5ms、周期为2ms的组合表示二进制的“1”;以脉宽为0.5ms、间隔1.5ms、周期为2ms的组合表示二进制的“0”。解码的关键是如何识别“0”和“1”,从位的定义我们可以发现接收判定“0”、“1”就是判定每个周期开始时低电平(注意发射与接收码正好反相)出现时间的长短,如果接收到为0的时间为1.5ms则为1,如果接收到0的时间为0.5ms则接收到的值为0。图10为红外接收管电路,通过红外遥控即可通过单片机解码红外信号得出对应的键码,执行相应的动作。 图10 红外接收电路5.5继电器电路本设计采用的是如图11所示的SONGLE SRD-05VDC-SL-C继电器,其参数如图所示。 图11 5V继电器 继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用,实现小电压控制大电压的目的【6】。在本系统中,主要是用于控制插座的开关状态,通过单片机I/O输出信号控制继电器的工作已否从而达到控制插座开关的目的。6.软件设计本设计中用到的单片机是MSP430,为了使编写的程序更加简单明了,采用C语言进行编程,用IAR软件进行编译,BSL430软件进行下载。软件设计部分包括液晶显示程序、计时程序、独立式按键处理程序、红外遥控处理程序等。由于定时设置是通过独立式按键或者红外遥控器按键进行设置的,程序在按键扫描部分和红外信号的解码部分相对重要。在检测到被设置了定时任务时,系统要检测是否到达定时时间,执行相应的动作。图12为主程序的流程图。开始系统初始化是否设置定时执行定时程序是否到达定时时间执行相应开关程序YNYN按键任意定时遥控模式定时Y图12 程序流程图6.1计时程序的编写MSP430的3种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟。(1)MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (3)ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1、2、4、8分频作为信号源。PUC复位后,MCLK和SMCLK的信号源为DCO,DCO的振荡频率默认为800KHZ。ACLK的信号源为LFXT1。MSP430内部含有晶体振荡器失效监测电路,监测LFXT1(工作在高频模式)和XT2输出的时钟信号。当时钟信号丢失50us时,监测电路捕捉到振荡器失效。如果MCLK信号来自LFXT1或者XT2,那么MSP430自动把MCLK的信号切换为DCO,这样可以保证程序继续运行。但MSP430不对工作在低频模式的LFXT1进行监测。由于单片机内部默认采用的数字时钟受环境影响比较大,计时不准确,所以采用外部的8M石英晶振产生的时钟脉冲进行计数。MSP430内部有三个时钟源,对时钟进行切换时必须有起振时间,只有当时钟源稳定了,单片机才能够正常工作。MSP430选用内部8M时钟初始化程序如下:void Clock_Init() uchar i; BCSCTL1&=XT2OFF; /START XT2(8MHZ) BCSCTL2|=SELM1+SELS; do /等待时钟转换 IFG1&=OFIFG; for(i=0;i<100;i+) _NOP(); while(IFG1&OFIFG)!=0); IFG1&=OFIFG; 计时程序如下:void Clock(void) second -= 1; if(second=-1) second = 59; minute -= 1;if(minute =-1) minute = 59; hour -= 1; hour0 -= 1; if(hour = -1) hour = 23; 6.2 LCD显示电路的编写这部分的显示过程主要是显示从定时器A读取的时钟数值,同时当检测到独立式按键有键按下时,显示相应的设置菜单等。基本操作时序:读状态:输入:RS=L,RW=H,E=H 输出:DOD7=状态字写状态:输入:RS=L,RW=L,D0D7=指令码,E=高脉冲 输出:无读数据:输入:RS=H,RW=H,E=H 输出:DOD7=数据写数据:输入:RS=H,RW=L,D0D7=数据,E=高脉冲 输出:无【8】 图13为LCD1602的具体读写时序。a.读操作时序b.写操作时序图13 LCD1602的读写时序红外信号解码及按键处理程序编写:当红外线接收管接收到红外信号时,通过单片机执行相应的程序进行红外信号的解码,具体解码原理前文已详细叙述,解码得到的键码赋值给data数组,通过检测data5和data6的值即可执行相应的动作。当检测到ok键被按下时即可执行定时插座的设置功能;当检测到键和按键时则进行相应的增减定时设置,具体程序编写如下所示:#pragma vector = PORT1_VECTOR_interrupt void Port1() char j,k,n=0; P1IE &=BIT5; /关中断 delay_us(360); /360us if (IRIN=1) /高电平 P1IFG=0x00; P1IE|=BIT5;/从新打开中断 return;/返回 while (!IRIN) /等IR变为高电平,跳过9ms的前导低电平信号。 delay_us(120); / for (j=0;j<4;j+)/ for (k=0;k<8;k+)/ while (IRIN) /等 IR 变为低电平 delay_us(120); while (!IRIN) /等 IR 变为高电平 delay_us(120); while (IRIN) /计算IR高电平时长 delay_us(120);/延时120us,n+ n+; if (n>=30) P1IFG=0x00; P1IE|=BIT5; return;/高电平>30*120=3600us=3.6ms,出错返回 datj=datj >> 1;/取出第一位 if (n>=8) datj = datj|0x80;/0.96ms,确定为1,否则为0 n=0;/ if (dat2!=(dat3-0xff00) /貌似IAR环境下,char变量为16位 P1IFG=0x00;P1IE|=BIT5;return;/此句刚开始可以屏蔽,见到效果后再尝试打开校验,出现乱码,返回 dat5=dat2 & 0x0F;/输入的低4位 dat6=dat2 & 0xF0;/高4位 dat6=dat6 >> 4;/移位 if(dat5 >9)/ dat5 = dat5+0x37;/转为16进制 else dat5 = dat5+0x30; / if(dat6 >9)/ dat6 = dat6+0x37;/ else/ dat6 = dat6+0x30; / P1IE|=BIT5; P1IFG=0x00; while(P1IFG&0x11!=0) P1IFG=0x00; _EINT(); 6.3 主程序的编写如以上所述,编程过程中需要注意的主要有计时程序、定时器A计时程序, LCD1602显示程序、按键处理程序和红外信号解码及处理的相关程序,通过各项整合,就得到了下列主函数。主函数的编写如下所示:void main(void) WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P5SEL=0X00;P5DIR=0XFF;P5OUT=0X00; P6DIR = 0XFF;P6OUT = 0XFF; P3SEL = 0x00; /设置IO口为普通I/O模式 P3DIR = 0xF8; /设置IO口方向为输入(P3.0,P3.1,P3.2输入) P3OUT = 0xFF; /初始设置为FF 全为高电平 P1IE=BIT5; /P1.5中断功能打开 P1IES|=BIT5; /P1.5下降沿触发中断 IR_DIR_IN; /P1.5设置为输入 Clock_Init(); CCR0 = 32768 -