灯光亮度调节单片机控制器
- 格式:doc
- 大小:1.09 MB
- 文档页数:25
单片机在智能灯光控制系统中的应用随着科技的不断进步,智能化设备在我们的日常生活中扮演着越来越重要的角色。
智能灯光控制系统作为智能家居的重要组成部分,借助单片机技术实现对灯光的智能控制,为我们带来了更加舒适、便捷的居家体验。
本文将探讨单片机在智能灯光控制系统中的应用。
第一部分:智能灯光控制系统的基本原理智能灯光控制系统是指通过对灯光的自动化控制,实现灯光的智能调节和管理。
其基本原理是通过感应器、单片机和执行器三个关键部件的协作,实现对灯光的精确控制。
第二部分:单片机在智能灯光控制系统中的作用1. 数据采集和处理:单片机通过感应器获取周围环境的光照、温度等数据,并经过处理后传送给控制器,为智能调控提供准确的依据。
2. 控制中心:单片机作为整个控制系统的核心,负责接收来自感应器的数据,并根据预设的程序进行判断和决策。
通过对执行器的控制,完成对灯光的开关、亮度、色温等参数的调节。
3. 通信接口:单片机可以通过与网络或其他外部设备的交互,实现对灯光的遥控、定时控制等功能。
同时,也可以通过与其他智能设备的连接,参与到智能家居系统的整体控制中。
第三部分:单片机在智能灯光控制系统中的优势1. 灵活性:单片机具有较强的可编程性,可以根据不同需求进行定制化开发,满足不同用户的个性化需求。
2. 实时性:单片机的高速运算能力和响应速度,使得智能灯光控制系统能够实时地对环境变化做出反应,保持灯光的舒适和稳定。
3. 节能高效:单片机能够通过智能算法,合理地调节灯光的亮度和工作时间,减少能源的浪费,实现节能效果。
第四部分:单片机在智能灯光控制系统中的应用案例以深圳某办公大楼智能灯光控制系统为例,该系统采用单片机作为核心控制器,通过感应器实时监测办公室内的照明情况,并根据灯光亮度的需要进行精确调节,提供最佳的照明效果。
同时,该系统还支持手机APP远程控制和定时开关功能,方便用户随时随地对灯光进行调节。
第五部分:单片机在智能灯光控制系统中的发展趋势随着科技的不断进步,单片机在智能灯光控制系统中的应用将不断发展。
51单片机彩灯控制器的设计一、设计目的单片机彩灯控制器是一种能够通过控制程序实现RGBLED灯光颜色和亮度变化的设备。
其设计目的是实现LED的多彩灯光效果,丰富室内环境,提高生活品质。
二、硬件设计1.单片机选择在设计彩灯控制器时,我们选择了常用的8051单片机作为控制芯片。
8051单片机拥有丰富的外设资源,易于编程控制,并且具有较高的稳定性和可靠性。
2.RGBLEDRGBLED是一种由红、绿和蓝三个LED灯组成的组合灯,可以通过控制不同颜色的LED来实现丰富多彩的灯光效果。
在设计中,我们选用了高亮度的RGBLED,以确保灯光效果的良好。
3.驱动电路为了驱动RGBLED,我们设计了一套驱动电路,其中包括三个恒流驱动电路和三个PWM调光电路。
恒流驱动电路可以确保LED的电流稳定,而PWM调光电路可以实现LED的亮度调节。
4.控制电路控制电路主要由单片机、按键、显示屏等组成。
通过单片机控制按键输入,并根据用户需求调整LED的颜色和亮度。
同时,显示屏可以实时显示LED的参数信息,方便用户操作。
5.电源彩灯控制器的电源一般采用直流5V供电,可以通过USB接口或者外部电源适配器来供电,以满足不同环境下的使用需求。
三、软件设计1.系统架构我们将彩灯控制器的软件设计分为三个模块:按键输入模块、LED控制模块和显示模块。
按键输入模块负责接收用户的按键输入,LED控制模块根据用户输入控制LED的颜色和亮度,显示模块实时显示LED的参数信息。
2.按键输入模块按键输入模块主要负责检测用户按键的状态,并根据按键的状态进行相应的处理。
例如,当用户按下“颜色+/颜色-”按键时,按键输入模块会向LED控制模块发送指令,控制LED颜色的变化。
3.LED控制模块LED控制模块负责控制RGBLED的颜色和亮度。
当接收到按键输入模块发送的指令时,LED控制模块会根据指令调节LED的PWM值,实现LED 颜色的变化和亮度的调节。
4.显示模块显示模块通过显示屏实时显示LED的参数信息,包括LED的颜色、亮度等参数。
西南科技大学毕业设计第1页 共19页摘 要为了解决长明灯所造成的能源浪费而设计出了利用红外热释传感器控制楼道灯开关的电路。
当白天光照很好时,不管有多少路过的行人,都不会使灯泡发亮。
夜晚光暗,热释红外探测头就开始工作,只要检测到人体温度,就会自动亮为行人照明,过几十秒钟后又自动熄灭,并且在电路中加入亮度可选功能。
这样的电路不但安全省电、结构简单而且安装方便、使用寿命也长。
此电路由一块开关集成芯片(SM9100)、红外热释传感器探头、VT1-VT3晶体管、继电器、逻辑门,光敏电阻、二极管、单片机(AT89C51)、LED 等元器件组成。
本设计对电路原理作出详细分析并阐述元器件的作用及其实现功能的方式,介绍电路的组装与调试。
关键词:红外热释传感器探头;晶体管;集成电路;单片机西南科技大学毕业设计目录摘要 (1)第1章绪论 (3)第2章系统框图及原理 (4)2.1系统框图 (4)2.2系统工作原理 (5)第3章单元电路设计 (6)3.1电源电路设计 (6)3.1.1变压器的选择 (6)3.2整流电路的原理与选用 (7)3.3光控电路设计 (8)3.3.1光敏电阻器的特性及主要参数 (9)3.3.2 光控电路的工作原理 (10)3.4红外控制电路设计 (10)3.4.1 小信号放大电路 (15)3.4.2 继电器 (16)3.4.3红外模块与手动PWM调节模块电路 (16)3.4.4红外发射部分电路设计 (17)3.4.5手动PWM调节LED (20)致谢 (22)参考文献 (23)西南科技大学毕业设计第1章绪论在学校、机关、厂矿企业等单位的公共场所以及居民区的公共楼道,长明灯现象十分普遍,这造成了能源的极大浪费。
另外,由于频繁开关或者人为因素,墙壁开关的损坏率很高,增大了维修量、浪费了资金。
为此我们设计了利用红外热释传感器控制的楼道灯开关。
这是一种电路新颖、安全省电、结构简单、安装方便、使用寿命长的红外热释传感楼道灯开关。
单片机智能灯光控制智能家居技术的发展为我们的家居生活带来了便捷和舒适。
在智能家居中,灯光控制是一个重要的组成部分。
通过单片机技术的应用,我们可以实现对家中灯光的智能控制,使我们的生活更加便捷和舒适。
一、智能灯光控制的背景随着科技的不断进步,智能家居的概念逐渐普及。
人们希望通过智能化的设备来控制家居环境,提高生活的便捷性和舒适度。
在家居灯光控制领域,传统的开关已经无法满足人们的需求。
因此,智能灯光控制成为了一个研究和开发的热点。
二、单片机技术在智能灯光控制中的应用单片机是指集成电路中的一种,它包含了处理器、内存和输入输出设备等功能模块。
在智能灯光控制中,单片机可以用来控制灯光的开关、调光、变色等功能。
1. 控制灯光开关通过单片机的输入输出接口,我们可以将灯光的开关与单片机连接起来,实现对灯光开关的远程控制。
通过编程,我们可以定义灯光开启和关闭的条件,例如时间、光线强度等。
这样,我们就可以通过手机APP等控制设备,随时随地对家中的灯光进行开关操作。
2. 调光控制单片机的PWM(脉宽调制)输出可以实现对灯光的调光控制。
通过改变PWM输出的占空比,可以调整灯光的亮度。
我们可以根据需求,编写程序实现灯光亮度的自动调节,例如根据环境光线强度自动调节灯光亮度,或者实现定时调光等功能。
3. 灯光颜色控制通过单片机的输出接口,我们可以连接RGB LED灯,实现对灯光颜色的控制。
通过编写程序,可以控制灯光的红、绿、蓝三个通道的亮度,从而实现对灯光颜色的调节。
我们可以根据情景需要,调节灯光颜色,例如在晚上创造出浪漫的氛围,或者在白天调节为较为自然的光线颜色。
三、智能灯光控制的优势智能灯光控制相比传统的开关控制方式,具有很多优势。
1. 便捷性:通过智能设备,我们可以随时随地对灯光进行控制,无需单独走到开关旁边。
只需轻轻一点,灯光就可以按需打开或关闭。
2. 节能环保:通过智能灯光控制,我们可以根据实际需要调节光线的亮度,合理使用光源,避免了不必要的能源浪费。
基于单片机实现的调光控制器设计一、调光控制器设计思想在日常生活中,我们常常需要对灯光的亮度进行调节。
本调光控制器通过单片机控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。
双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。
所以需要在交流电的每个半波期间都要产生触发信号,触发信号产生时间的长短(触发角的大小)就决定了灯泡的亮度。
调光的实现方式就是在交流电源信号过零点后一段时间触发双向可控硅开关的导通,称这段时间为双向可控硅的触发角。
触发角越大,导通时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。
这就要求确定交流电源同步信号的过零点,并以此为基础,控制触发信号触发角的大小,达到白炽灯亮度调节的目的。
二、硬件电路部分本调光控制器的框图如下:控制部分:为了便于灵活设计,选择可多次写入的可编程器件,本设计方案中选用的是ATMEL公司生产的AT89C51单片机。
驱动部分:由于驱动的对象是交流负载,且为了实现连续调节的目的,本电路中采用了无触点开关元件双向可控硅。
双向可控硅能够对交流电源的导通进行无触点连续控制,以小电流控制大电流,且动作快、寿命长、可靠性高。
负载部分:本电路的负载是白炽灯(纯阻负载)。
(一)交流电源同步信号交流电源同步信号的产生如图2电路所示,图中的同步信号就是我们需要的交流电压过零点信号。
各部分波形如图3所示。
图中整流后波形中的水平虚线表示光藕P52l输入二极管的门限电压。
P521是TLP521的简称,下图是其引脚图。
图2 同步信号提取电路图3 同步信号波形图图4 P521引脚图(二)单片机控制部分:主控单元以AT89C51单片机为核心,交流电压过零点信号提取电路中产生的同步信号SYN接到AT89C5l的INT0,此信号的下降沿将使AT89-C51产生中断,以此为延时时间的起点。
三个按键只用于控制一路灯:一个为开关,另外两个分别为提高亮度和降低亮度。
单片机PWM调光原理与实现方法近年来,随着LED灯具的广泛应用,调光技术也变得越来越重要。
单片机作为调光控制的核心部件之一,使用PWM(脉宽调制)技术可以实现灯光的亮度调节。
本文将介绍单片机PWM调光原理及实现方法。
一、PWM调光原理PWM是一种基于时间的调光方法,通过改变信号的高低电平持续时间的比例来调节灯光的亮度。
该方法适用于LED等光源,因为LED的发光亮度与通电时间成正比。
PWM调光原理如下:1. 设定周期:在PWM调光中,首先需要设定一个时间的基本周期。
周期越大,灯光的亮度变化也就越平滑。
典型的PWM周期一般为几十微秒。
2. 设定占空比:占空比是表示高电平时间占总周期时间的比例,通常以百分比表示。
占空比越高,灯光亮度越大;占空比越低,灯光亮度越小。
3. 生成PWM信号:根据设定的周期和占空比,单片机通过不断计数生成PWM信号。
当计数值小于占空比时,输出高电平;当计数值大于占空比时,输出低电平。
通过改变计数阈值,可以实现不同占空比的PWM信号。
4. 连接LED灯:通过PWM输出口将生成的PWM信号连接到LED灯。
当PWM信号为高电平时,LED点亮;为低电平时,LED熄灭。
通过不断重复生成PWM信号,可实现灯光的调光效果。
二、实现方法在单片机上实现PWM调光功能有多种方法,下面将介绍两种常见的实现方法。
1. 软件实现PWM调光软件实现PWM调光是通过单片机的定时器和计数器来实现的。
具体步骤如下:1) 设置定时器:选择适合的定时器工作模式,并设置定时周期。
定时周期即为PWM的周期。
2) 设置计数器:设置计数器的初值。
3) 发出PWM信号:当计数器值小于占空比时,输出高电平;否则输出低电平。
4) 重复步骤3,不断更新计数器的值,从而生成PWM信号。
2. 硬件实现PWM调光硬件实现PWM调光是通过使用专用的PWM模块和电路来实现的。
具体步骤如下:1) 配置PWM模块:根据单片机的特点,选择适合的PWM模块,并进行配置。
课程设计说明书题目:LED调光灯亮度控制院(系):电子工程与自动化学院专业:学生某某:学号:指导教师:2011 年 9 月日摘要亮度是工业中非常关键的一项物理量,在农业,现代科学研究和各种高新技术的开发和研究中也是一个非常普遍和常用的测量参数。
亮度自动控制的原理主要是:将随亮度变化而变化的物理参数,通过光传感器转变成电的或其他信号,传给处理电路,最后转换成亮度数值显示出来。
目前最具发展前景的灯光调节是加入自动控制原理,通过自动控制系统,按照给定参数对对象的反馈信息进行调节,从而满足工农业生产的需求。
本文介绍了以处理芯片STC1205A08S2为核心器件的亮度控制系统。
STC1205A08S2是宏晶以公司研制的51内核为主的系列单片机,这个芯片设计的时候就吸取其它51系列单片很容易被解密的教训,改进了加密机制。
关键词:亮度控制; STC1205A08S2;AbstractBrightness is in the industry is the key of a physical quantity, in agriculture, modern scientific research and high technology research and development is also a very mon and monly measured parameters.Automatic brightness control principle is:With the brightness change of the physical parameters, the optical sensor into electrical or other signal, transmitted to the processing circuit, finally converted into brightness value is displayed.At present the most promising light adjustment is added to the theory of automatic control, the automatic control system, according to the given parameters of the feedback information to adjust, to meet the needs of industrial and agricultural production.This paper introduces the processing chip STC1205A08S2 as the core ponent of the brightness control system.STC1205A08S2 is Hong Jing to the pany developed the 51 kernel series consisting mainly of single chip, the chip design when they absorb other 51 series monolithic easily decrypted lessons, improved the encryption mechanism. Keywords:T Brightness control;STC1205A08S2引言- 1 -1 课程设计概述- 1 -1.1 课程设计题目- 1 -1.2 主要仪器设备- 1 -2 硬件设计- 2 -2.1 单片机部分- 2 -2.2 亮度反馈部分- 2 -2.3 按键部分- 3 -2.4 串口下载部分- 3 -2.4 LED执行部件- 3 -3 软件设计-4 -3.1 流程图设计- 4 -4 系统调试- 4 -4.1 LED执行部分调试- 4 -4.2串口下载部分调试- 5 -4.3 LED显示部分调试- 5 -4.4按键部分调试- 5 -4 .5系统调试-5 -5 总结- 5 -5.1课程设计的过程- 5 -5.2解决问题- 5 -5.3 心得体会- 5 -参考文献- 5 -附录- 6 -引言调光灯亮度作为一项光工参数,在工业现场和过程控制中具有至关重要的作用。
灯光亮度调节单片机控制调器1.引言1.1课题背景随着经济的高度发展,人们对所处的生活环境的要求也越来越高。
我国的申奥主题就有“绿色奥运”之说。
本项目的研究就是基于人们生存的光环境的“绿色”所开展的。
紧扣能源节约与健康的主题。
能源与健康是当代社会的几大热门话题之一。
节约能源,已经迫在眉睫。
环顾我们的周围,能源浪费现象十分严重。
就拿我们十分熟悉的校园来说,大家肯定都留心到了这些现象:教室时常是不分白昼黑夜的亮着灯;宿舍断电时,我们常常忘了关掉电源。
等到再次来电时,我们又常常不在宿舍,此时灯却依旧亮着,而当时的光线常常不需要开灯。
这样不仅浪费电,而且也会缩短灯泡的寿命;另外,我们有时会因光线不好而开灯,可过了一会儿,当光线好起来时,我们又因手头的事不能停下而无法去关灯,这样也导致了能源的浪费。
不良的光源会在不知不觉中对眼睛造成伤害。
太强或太弱的光对眼睛都是有害的。
大量研究表明学生的近视和长期应用不科学照明光源有直接关系。
所以一个好的光环境尤为重要。
鉴于以上的分析,我们设计了这个便携式的灯光控制调节系统,它与灯泡相连便构成光控电灯。
它的意义在于:使用者可通过自己设置的光强通过本系统使室内达到恒定的光强。
即达到了节能的目的,又有保护视力的效果。
1.2课题研究的意义在家居、工作、学习的各个环境中,我们所使用的光源均为固定瓦数的,提供固定光强的电灯。
我们计划研制的灯光调节器,能够为人们提供“绿色光源”。
我们查阅了大量的资料,结果发现目前市面上还没有此种灯。
有些人也研制了一些调节灯,如/vote1/htm/A13.asp(东南大学电工电子试验中心)网页上所介绍的调节灯仅能人为手动调节亮度,再附上几个比较器组成的光感报警系统,来提醒人们室内光强超出允许范围,我们研制的调节器能真正意义上的达到自动调节光强的目的。
此灯通过传感器采集的光强来控制灯泡的亮度,使室内达到了稳定的光强,此恒定光强也可通过外设键盘自主设定,既减少了经常开关灯的不便,又解决了浪费电能与影响视力的问题。
灯光亮度调节单片机控制调器1.引言1.1课题背景随着经济的高度发展,人们对所处的生活环境的要求也越来越高。
我国的申奥主题就有“绿色奥运”之说。
本项目的研究就是基于人们生存的光环境的“绿色”所开展的。
紧扣能源节约与健康的主题。
能源与健康是当代社会的几大热门话题之一。
节约能源,已经迫在眉睫。
环顾我们的周围,能源浪费现象十分严重。
就拿我们十分熟悉的校园来说,大家肯定都留心到了这些现象:教室时常是不分白昼黑夜的亮着灯;宿舍断电时,我们常常忘了关掉电源。
等到再次来电时,我们又常常不在宿舍,此时灯却依旧亮着,而当时的光线常常不需要开灯。
这样不仅浪费电,而且也会缩短灯泡的寿命;另外,我们有时会因光线不好而开灯,可过了一会儿,当光线好起来时,我们又因手头的事不能停下而无法去关灯,这样也导致了能源的浪费。
不良的光源会在不知不觉中对眼睛造成伤害。
太强或太弱的光对眼睛都是有害的。
大量研究表明学生的近视和长期应用不科学照明光源有直接关系。
所以一个好的光环境尤为重要。
鉴于以上的分析,我们设计了这个便携式的灯光控制调节系统,它与灯泡相连便构成光控电灯。
它的意义在于:使用者可通过自己设置的光强通过本系统使室内达到恒定的光强。
即达到了节能的目的,又有保护视力的效果。
1.2课题研究的意义在家居、工作、学习的各个环境中,我们所使用的光源均为固定瓦数的,提供固定光强的电灯。
我们计划研制的灯光调节器,能够为人们提供“绿色光源”。
我们查阅了大量的资料,结果发现目前市面上还没有此种灯。
有些人也研制了一些调节灯,如/vote1/htm/A13.asp(东南大学电工电子试验中心)网页上所介绍的调节灯仅能人为手动调节亮度,再附上几个比较器组成的光感报警系统,来提醒人们室内光强超出允许范围,我们研制的调节器能真正意义上的达到自动调节光强的目的。
此灯通过传感器采集的光强来控制灯泡的亮度,使室内达到了稳定的光强,此恒定光强也可通过外设键盘自主设定,既减少了经常开关灯的不便,又解决了浪费电能与影响视力的问题。
此灯成本不高,可在办公室图书馆等公共场合使用。
使人们生活的光环境的质量有了大大的提高,使人们生活在由自己随心所欲控制的光环境下,满足了工作、学习及家居对光的要求。
1.3课题研究的目的(1)通过动手实践巩固所学的知识体系,将理论与实践相结合,更好的理解书本上的知识。
(2)通过查询相关的课外资料,掌握更加系统的知识体系,开拓视野。
(3)在相互协作制作的同时,增强了我们的团队精神。
知道怎样分工协作才能达到最高效率。
2.课题方案的设计本课题研究的主要内容是如何采光与如何控光。
2.1光检方案:方案一:图1所示为英文资料上推荐的光检电路,我们对该电路进行了测试,测试结果如下:图1实验条件:R f=470K,V+=3.33V,采用60W的可调台灯照明,台灯亮度从最暗调整到最亮。
实验数据:光检电路的输出电压变动范围-0.03------250mV,电路电流为520uA。
实验结论:输出电压不稳定,而且电压太小,无法实现控制。
经过计算,将电路参数R f调整为5M左右,电路输出电压将近3V,但输出电压稳定度下降。
方案二:图2为经过改进的电路图2测试条件与方案一相同。
测量结果:电路输出电压范围为0.04V---3.52V,达到设计要求,电压稳定性也比第一种方案好。
通过以上两个试验的测试,决定采用第二种方案。
2.2灯控方案:方案一:图3所示方案为采用可控硅调节灯泡的电压,从而调节了灯的亮度。
图3方案二:图4所示方案采用CMOS管和光耦来调节灯泡的电压。
图4通过对上述两种方案的具体测试,我们发现用可控硅的光控电路控制灯泡时出现闪烁现象。
第二种方案在同等控制输入信号频率下,电路工作稳定,灯泡无闪烁现象。
分析原因在于第一种方案中可控硅的开关速度达不到设计要求,因而出现闪烁现象。
2.3单片机的选择方案一:采用C51单片机采用C51单片机,容易编程,但外围硬件接口电路的设计较复杂。
方案二:采用美国TI公司MSP430系列单片机美国TI公司的MSP430系列单片机,内置模块功能较强,接口电路简易,可通过编程直接产生PWM信号,方便地控制灯的亮度。
MSP430系列单片机简介:TI公司的MSP430系列是一个特别强调超低功耗的单片机品种。
在这个系列中有多个型号,他们是由一些基本功能模块按不同的应用目标组合而成的。
特性功能:1.定时器中断可用于事件计数、时序发生、PWM等2.A/D转换器(10位或更高精度)有8个输入端,可作为恒流源3.具有LCD驱动电路4.已开发了c-编译器5.系统内置模块:LCD驱动、A/D转换、I/O端口、UART、看门狗、定时器、EPROM等6.64KB公共空间中,有可能实现任意的ROM/RAM混合分配八位脉宽调制定时器PWM介绍:用8位定时器计数器,PWM外围模块产生一个占空比可以是0%~100%的方波输出。
占空比由8位占空比控制寄存器PWMDT来确定。
PWM定时器模块具有以下特性:1.可选择8个时钟源;2.占空比为0%~100%,分辨率为1/254;3.可以用正或负逻辑输出。
基于课题的设计要求,我们所选用的单片机是MSP430系列的448型号。
3.硬件电路设计3.1系统原理框图图5系统原理框图如图5所示,主要包含六个部分:(1)电源部分图6 (2)光检电路图7(3)光控电路图8(4)单片机电路图9 (5)按键电路图10(6)蜂鸣器电路图114.软件流程图4.1初始化流程图开始初始化IO口初始化系统时钟初始化LCD显示初始化PWM周期初始化AD转换器结束图124.2系统流程图图13 4.3键盘处理子程序框图图145.课题研究成果介绍5.1作品面板展示图155.2作品操作方法介绍本作品将光强分为了十个级别,1#、2#、3#键为快捷键。
1#键为亮,相当于第十级。
2#键为次亮,相当于第五级。
3#键为暗,相当于第三级。
4#键为级别上升控制键。
5#键为级别下降控制键。
按动4#键、5#键,光亮便可以一级一级的变动。
6#键为显示切换键。
按动此键可使液晶的显示值分别显示PWM占空比、光亮等级和采集电压值。
5.3本作品的使用环境本品是220V电压供电。
可采用一个箱体控制灯的光强,也可将多个箱体分散放置于室内以获得较均衡的光强。
6.前景展望本作品净成本为300——400元,若产品化批量生产,成本可降为100元以内,如果将所使用的单片机换成同系列的较低级的亦可实现本功能,虽然功能扩展难以实现,但成本可降到更低。
这样如果将其商品化,既可以用于公共场所,亦可用于家居。
它的价值不仅在于节省的电能,而且可以保护人们的视力,这一点是用价钱无法衡量的。
由于本系统所使用的单片机性能好,可扩展许多功能,所以本作品有继续开发的价值,最终可将其作为一个智能家电控制系统使用。
7.心得体会经过近一年的长时间努力,我们小组终于完成了这个课题,回想这一过程,真是感受颇多。
自从2003年9月份组队申报项目开始,到现在完成课题,我们小组的三个人邵慧敏、贾妍妍、刘明宇都为之付出了艰辛的努力。
从方案论证,硬件电路设计到软件设计,工作量都非常大,而且我们只有业余时间可以利用。
如果我们不能很好的分工合作,是不可能完成这项课题的。
我们的小组是由两名大二学生和一名经验丰富的大三学生组成,由于知识上的欠缺,我们在刚刚开始研究课题的时候,由大三的同学刘明宇指导我们在图书馆以及网上查阅下载了相当多的有关资料和一些必备的基本知识。
经过了一段时间的学习积累,我们对这个课题有了更为深入地了解。
于是我们共同进入了方案的研制测试阶段。
我们集中在一起讨论,商定最终的方案,确定硬件电路,软件编程。
在这个课题中我们所使用单片机MSP430*448是比较新的产品,我们从来都没有使用过,而且有关的资料很多都是英文,但是这并没有阻碍我们前进的步伐,我们克服重重困难,在实践中积累经验,掌握了这种单片机的基本应用方法,并且成功的将它应用到我们的课题之中。
通过本次活动,我们拓宽了思路,开阔了视野,从中学到了许多课本上没有的知识,为以后进入实验室进行更深入的研究奠定了基础。
与此同时,我们还学会了许多解决实际问题的方法,巩固了我们所学的基础知识,将课本上的知识与实践结合起来,加强了我们的动手能力。
团队合作的精神在这一过程中也得到了充分的展示。
我们相互讨论,分工明确,互相帮助,有条不紊的对方案进行修进和调试。
一年的时间,我们一起经历风雨,在讨论中互相学习,在失意中相互鼓励,在协作中增强友谊。
这种经历无疑将成为我们在今后走向社会时的一种宝贵的财富。
可以毫不愧言的说:我们的团队是一个团结,高效,友爱的团队。
8.参考文献及单片机源程序8.1参考文献:《MSP430系列16位单片机原理与应用》胡大可主编北京航空航天大学出版社2000.6《MSP430 Family User’s Guide》美国TI公司资料8.2单片机源程序:#include <msp430x44x.h>unsigned char flashbuffer[128];//***********************************************************************void delay(unsigned long i){while(i--);}//*********************************************************************** unsigned char input3(unsigned char bit){unsigned char temp1;temp1=P3DIR; //读取A口原来的方向属性P3DIR=temp1&(0xff-(1<<bit)); //设置要设置的位为输入if((P3IN)&(1<<bit))return(1);elsereturn(0);}void output2(unsigned char bit,unsigned char value){unsigned char temp1,temp2/*,temp3*/; //save the value beforetemp1=P2DIR; //读取A口原来的方向属性temp2=P2IN; //读取A口原来的数据P2DIR=temp1|(1<<bit); //设置要设置的位为输出switch(value){ case 1: P2OUT=temp2|(1<<bit);break;case 0: P2OUT=temp2&(0xff-(1<<bit));break;default:break;}//end switch}// end output2//*********************************************************************** float Vchange(unsigned int in_res){float i;i=(float)((3.3*in_res)/4095.0);return(i);}//*********************************************************************** void pwminit(){TACTL = ID1+ID0+TASSEL1 + TACLR; // SMCLK, Clear Tar CCR0 = 4096; // PWM PeriodCCTL2 = OUTMOD_7; // CCR2 reset/setCCR2 = 18; // CCR2 PWM duty cycleP2DIR |= 0x01; // P2.0 outputP2SEL |= 0x01; // P2.0 TA2 otionTACTL |= MC0; // Start Timer_A in up mode}//*********************************************************************** void usext2(void){SCFQCTL=0x00; // mudulation enable, and muliplier=0// if DCOPLUS=0:fDCOCLK=(N+1)*fCRYSTAL else *D SCFI0=0x04; // DCO Range 1.4-12MFLL_CTL0=0x80; // not dividedFLL_CTL1=0x14; // use xt2,MCLK=xt2,SMCLK=xt2}//*********************************************************************** char *LCD = LCDMEM;char dig_dp[4]={0x00,0x00,0x00,0x10};char dig[10][4]={{0x11,0x11,0x11,0x00}, // 0{0x10,0x01,0x00,0x00}, // 1{0x11,0x10,0x01,0x01}, // 2{0x11,0x11,0x00,0x01}, // 3{0x10,0x01,0x10,0x01}, // 4{0x01,0x11,0x10,0x01}, // 5{0x01,0x11,0x11,0x01}, // 6{0x11,0x01,0x00,0x00}, // 7{0x11,0x11,0x11,0x01}, // 8{0x11,0x11,0x10,0x01} // 9};//***********************************************************void LCDsegmentON(unsigned char control){switch(control){case 0:LCDCTL&=0xff-LCDSON;break;case 1:LCDCTL|=LCDSON;break;default:break;}}//***********************************************************void selectLCDfre(unsigned char level){switch(level){case 1: BTCTL&=0xff-(BTFRFQ1+BTFRFQ0);break;case 2: BTCTL&=0xff-(BTFRFQ1);BTCTL|=(BTFRFQ0);break;case 3: BTCTL&=0xff-(BTFRFQ0);BTCTL|=(BTFRFQ1);break;case 4: BTCTL|=(BTFRFQ1+BTFRFQ0);break;default:break;}}//*********************************************************************** #pragma vector=BASICTIMER_VECTOR__interrupt void basic_timer(void){//P5OUT ^= 0x02; // Toggle P5.1 using exclusive-OR unsigned char i;for(i=0;i<4;i++){LCD[i+15]=dig[4][i];}i=i;}#pragma vector=PORT1_VECTOR__interrupt void port1(void){//P5OUT ^= 0x02; // Toggle P5.1 using exclusive-ORunsigned char i;for(i=0;i<4;i++){LCD[i+15]=dig[3][i];}i=i;}static unsigned int results[4]; //***********************************************************************void write_flash_init(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerFCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator}unsigned char read_SegA_byte(unsigned char address){char *Flash_ptr; // Flash pointerFlash_ptr = (char *) 0x1080; // Initialize Flash pointerwrite_flash_init();return(*(Flash_ptr+address)); // Write value to flash}void write_SegA_byte(unsigned char address,unsigned char value){ char *Flash_ptr; // Flash pointerwrite_flash_init();Flash_ptr = (char *) 0x1080; // Initialize Flash pointerFCTL1 = FWKEY + ERASE; // Set Erase bitFCTL3 = FWKEY; // Clear Lock bit*Flash_ptr = 0; // Dummy write to erase Flash segmentFCTL1 = FWKEY + WRT; // Set WRT bit for write operation*(Flash_ptr+address) = value; // Write value to flashFCTL1 = FWKEY; // Clear WRT bitFCTL3 = FWKEY + LOCK; // Reset LOCK bit}void write_SegA (char value){ char *Flash_ptr; // Flash pointerunsigned int i;write_flash_init();Flash_ptr = (char *) 0x1080; // Initialize Flash pointerFCTL1 = FWKEY + ERASE; // Set Erase bitFCTL3 = FWKEY; // Clear Lock bit*Flash_ptr = 0; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for (i=0; i<128; i++){ *Flash_ptr++ = value; }FCTL1 = FWKEY; // Clear WRT bitFCTL3 = FWKEY + LOCK; // Reset LOCK bit}// segBunsigned char read_SegB_byte(unsigned char address){char *Flash_ptr; // Flash pointerFlash_ptr = (char *) 0x1000; // Initialize Flash pointerwrite_flash_init();return(*(Flash_ptr+address)); // Write value to flash}void readsegBtobuffer(void){ char *Flash_ptr;unsigned char i;Flash_ptr=(char *) 0x1000;write_flash_init();for(i=0;i<128;i++){ flashbuffer[i]=*(Flash_ptr+i); }}void write_SegB_byte(unsigned char address,unsigned char value){ unsigned char i;char *Flash_ptr; // Flash pointerwrite_flash_init();readsegBtobuffer();Flash_ptr = (char *) 0x1000; // Initialize Flash pointerFCTL1 = FWKEY + ERASE; // Set Erase bitFCTL3 = FWKEY; // Clear Lock bit*Flash_ptr = 0; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT; // Set WRT bit for write operation flashbuffer[address]=value;for (i=0; i<128; i++){ *(Flash_ptr+i) = flashbuffer[i]; // Write value to flash}FCTL1 = FWKEY; // Clear WRT bitFCTL3 = FWKEY + LOCK; // Reset LOCK bit}void write_SegB (char value){ char *Flash_ptr; // Flash pointerunsigned int i;write_flash_init();Flash_ptr = (char *) 0x1000; // Initialize Flash pointerFCTL1 = FWKEY + ERASE; // Set Erase bitFCTL3 = FWKEY; // Clear Lock bit*Flash_ptr = 0; // Dummy write to erase Flash segment FCTL1 = FWKEY + WRT; // Set WRT bit for write operation for (i=0; i<128; i++){ *Flash_ptr++ = value; // Write value to flash}FCTL1 = FWKEY; // Clear WRT bitFCTL3 = FWKEY + LOCK; // Reset LOCK bit}//*********************************************************************** void main(void){ float set=0.6;float step=0.08;int j;float a;unsigned char i=0,k;unsigned char displaymode;set=read_SegB_byte(0x05)/10.0;displaymode=read_SegB_byte(0x06);WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timerP6SEL = 0xff; // Enable A/D channel inputsset sampling timeADC12CTL0 = ADC12ON+MSC+SHT0_2; // Turn on ADC12, set sampling time ADC12CTL1 = SHP+CONSEQ_1; // Use sampling timer, single sequence ADC12MCTL0 = INCH_3; // ref+=A Vcc, channel = A0ADC12MCTL1 = INCH_4; // ref+=A Vcc, channel = A1ADC12MCTL2 = INCH_5; // ref+=A Vcc, channel = A2ADC12MCTL3 = INCH_6+EOS; // ref+=A Vcc, channel = A3, end seq. ADC12IE = 0x08; // Enable ADC12IFG.3ADC12CTL0 |= ENC; // Enable conversionsADC12CTL0 |= ADC12SC; // Start conversionLCDCTL = 0xe5; //static LCD, segments = 0 - 23BTCTL = BTFRFQ1+BTFRFQ0; // BTCTL ;set fLCD = ACLK / 256 BTFRFQ1 for (i=0; i<20; i++){ LCD[i] = 0; }usext2();pwminit();CCR2=1000;while(1){ if((ADC12IFG&0x08)!=0){ results[0] = ADC12MEM0;results[1] = ADC12MEM1;results[2] = ADC12MEM2;results[3] = ADC12MEM3;a=Vchange(results[0])+Vchange(results[1])+Vchange(results[2])+Vchange(results[3])/4.0;//bright#define delayvalue 50000#define max 5.0if(!input3(0)){ output2(7,1);while(!input3(0));output2(7,0);delay(delayvalue);set=max;write_SegB_byte(0x05,(unsigned char)(set*10));}// midif(!input3(1)){ output2(7,1);while(!input3(1));output2(7,0);delay(delayvalue);set=max/2.0;//write_flash_init();write_SegB_byte(0x05,(unsigned char)(set*10));}// darkif(!input3(2)){ output2(7,1);while(!input3(2));output2(7,0);delay(delayvalue);set=max/3.0;//write_flash_init();write_SegB_byte(0x05,(unsigned char)(set*10)); }// upif(!input3(3)){ output2(7,1);while(!input3(3));output2(7,0);delay(delayvalue);set+=max/10;if(set>max){ set=max; }write_SegB_byte(0x05,(unsigned char)(set*10)); }// downif(!input3(4)){ output2(7,1);while(!input3(4));output2(7,0);delay(delayvalue);set-=max/10;if(set<=max/10){ set=max/10; }write_SegB_byte(0x05,(unsigned char)(set*10));}// disif(!input3(5)){ output2(7,1);while(!input3(5));output2(7,0);delay(delayvalue);displaymode++;if(displaymode>3){displaymode=1;}write_SegB_byte(0x06,displaymode);}if(a>=set+step){ CCR2--;if(CCR2<=1){ CCR2=1; }}if(a<=set-step){ CCR2++;if(CCR2>=4096){ CCR2=4096; }}switch(displaymode){ case 1: // CCR2{ for(i=0;i<4;i++){ LCD[i+7]=dig[CCR2/1000%10][i]; }for(i=0;i<4;i++){ LCD[i+11]=dig[CCR2/100%10][i]; }for(i=0;i<4;i++){ LCD[i+15]=dig[CCR2/10%10][i]; } }break;case 2: // voltage{ for(i=0;i<4;i++){ LCD[i+7]=dig[(int)a%10][i]+dig_dp[i]; }for(i=0;i<4;i++){ LCD[i+11]=dig[(int)(a*10)%10][i]; } for(i=0;i<4;i++){ LCD[i+15]=dig[(int)(a*100)%10][i]; }}break;case 3: // class{ if(set==max) // if not '0' dispaly{ for(i=0;i<4;i++){ LCD[i+7]=dig[(unsigned char) ((set*10/max)/10)][i];}}else // else do not display{ for(i=0;i<4;i++){ LCD[i+7]=0; }}for(i=0;i<4;i++){LCD[i+11]=dig[(((unsigned char)((set*10)/max))%10)][i];}for(i=0;i<4;i++){ LCD[i+15]=0; }}break;default:break; ;}// end of switchdelay(1000);ADC12CTL0 |= ADC12SC;}}WDTCTL = WDTPW + WDTHOLD; // stop watchdog timerLCDCTL = 0xe5; // static LCD, segments = 0 - 23BTCTL = BTFRFQ1+BTFRFQ0; // BTCTL ;set fLCD = ACLK / 256 BTFRFQ1 // set up ports //P1DIR = 0xFF; // set port to outputsP2DIR = 0xFF; // set port to outputsP3DIR = 0xFF; // set port to outputsP4DIR = 0xFF; // set port to outputsP5DIR = 0xFF; // set port to outputsP6DIR = 0xFF; // set port to outputsP1DIR = 0x22; // P1.1 & P1.5 to output directionP1SEL = 0x22; // P1.1 & P1.5 to output MCLK & ACLKfor (i=0; i<20; i++){ LCD[i] = 0; }WDTCTL = WDTPW +WDTHOLD; // Stop WDTusext2();pwminit();j=11;while(1){ if(j==11){ CCR2++;if(CCR2>=1024){ j=22; }}if(j==22){ CCR2--;if(CCR2<=0){ j=11; }}for(i=0;i<4;i++){ LCD[i+15]=dig[CCR2/100][i]; } delay(2000);}while(1){ for(k=1;k<=4;k++){ selectLCDfre(k);for(j=0;j<=9;j++){ for(i=0;i<4;i++){ LCD[i+15]=dig[j][i]; }CCR2=100*j;delay(100000);}// light upfor(j=9;j>=0;j--){ for(i=0;i<4;i++){ LCD[i+15]=dig[j][i]; }CCR2=100*j;delay(100000);}// light down}}}。