基于单片机的智能台灯设计

合集下载

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计摘要LED 台灯具有节能、环保、寿命长的特点,越来越受到人们的青睐。

本文设计了一款基于单片机的智能 LED 台灯,通过单片机控制LED灯的亮度和色温,实现智能调光和调色功能,同时提供人体感应、定时开关等智能功能,以满足用户的不同需求。

关键词LED 台灯;单片机;智能控制;调光;调色二、设计原理2.1 单片机选择在本设计中,我们选择了常见的 STM32 单片机作为控制核心。

STM32 具有丰富的外设资源和强大的计算能力,可以很好地满足 LED 台灯的智能控制需求。

2.2 亮度调节LED 台灯的亮度是通过 PWM(脉冲宽度调制)来实现的。

通过控制 PWM 的占空比,可以精确地调节 LED 的亮度。

我们可以通过单片机的定时器来产生 PWM 信号,从而控制LED 的亮度。

2.3 色温调节LED 台灯的色温调节可以通过控制 RGB LED 或者使用特殊的 LED 芯片来实现。

在本设计中,我们选择了使用特殊的 LED 芯片,通过改变驱动电流的大小来调节 LED 的色温。

这样可以实现从冷白光到暖白光的平滑调节,满足用户对不同环境的需求。

2.4 智能功能为了提升 LED 台灯的智能化程度,我们还加入了人体感应和定时开关等功能。

通过红外传感器可以检测到人体的存在,并自动调节灯光的亮度和色温;定时开关可以让用户设定 LED 台灯的开关时间,方便用户根据生活习惯来控制台灯的开关。

三、硬件设计3.1 LED 选择LED 台灯的光源选择是非常重要的,我们选用了高亮度的 SMD LED,其发光效率高,寿命长,且色温范围广,可以满足用户对不同色温的需求。

3.2 单片机控制电路单片机控制电路主要包括电源模块、人体感应模块、PWM 生成模块和电流调节模块。

电源模块负责对 LED 台灯整体的供电,人体感应模块负责检测人体的存在,PWM 生成模块负责产生调节 LED 亮度的 PWM 信号,电流调节模块负责调节 LED 的色温。

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计智能LED台灯是一种基于单片机技术的智能照明设备,具有色温调节、亮度调整、定时开关和远程控制等功能。

本文将介绍智能LED台灯的设计原理和实现方法。

智能LED台灯的核心部件是单片机,它可以实现对LED灯的控制和调整。

还可以通过传感器收集环境数据,实现自动调节。

下面是智能LED台灯的主要设计思路。

需要选择适合的单片机模块。

考虑到成本和复杂度,可以选择一款性能较好且价格适中的单片机模块。

常用的单片机型号有STM32、Arduino等。

根据实际需求选择合适的型号和功能。

接下来是LED灯的选择和控制。

LED灯可以选择冷光源和暖光源,以实现色温调节。

通常使用PWM技术控制LED灯的亮度。

PWM技术通过改变LED灯的亮度来模拟不同的色温。

可以根据需要调节PWM的占空比,控制LED灯的亮度。

第三步是添加温度传感器。

温度传感器可以实时监测环境温度,并根据温度数据调节LED灯的亮度和色温。

当环境温度较高时,LED灯可以降低亮度和色温,以减少照明对人体的影响。

最后一步是添加远程控制功能。

可以通过无线通信模块(如蓝牙、Wi-Fi)连接智能手机或其他设备,通过手机App或其他方式对LED台灯进行远程控制。

远程控制功能可以实现开关控制、亮度调节、色温调节、定时开关等功能。

通过以上设计思路,可以实现智能LED台灯的设计。

在实施过程中,还可以考虑其他因素,如耗能测量、多种模式切换、安全性等。

为了提高用户体验和降低使用难度,还可以设计友好的操作界面和提示功能。

智能LED台灯的设计基于单片机技术,具有色温调节、亮度调整、定时开关和远程控制等功能。

实现这些功能需要选择合适的单片机模块、LED灯、温度传感器和光线传感器,并添加远程控制功能。

设计过程中还应考虑其他因素,如能耗、模式切换和用户体验等。

基于52单片机的智能台灯设计

基于52单片机的智能台灯设计

基于52单片机的智能台灯设计智能台灯是一种集成了多种智能化功能的家居灯具,不仅可以智能调节光线亮度和色温,还可以通过智能控制实现定时开关、光线感应和远程操控等功能。

而则是通过利用52单片机的强大功能和灵活性,结合传感器、无线通信模块等元件,实现了更加智能化的台灯设计方案。

本文将从硬件设计、软件设计和功能实现等方面对基于52单片机的智能台灯设计进行深入分析和研究。

一、硬件设计基于52单片机的智能台灯设计的硬件部分主要包括单片机模块、传感器模块、光源模块和无线通信模块等。

单片机模块是整个智能台灯的核心控制部分,负责接收用户指令和传感器数据,控制光源的亮度和色温等。

传感器模块通常包括光线感应传感器、温湿度传感器和人体红外传感器等,用于感知环境的光线、温度和人体等信息。

光源模块则是智能台灯的光源部分,可以采用LED灯珠等光源元件,通过单片机控制实现光线的调节。

无线通信模块可以选择WiFi模块、蓝牙模块或者ZigBee模块,用于实现智能台灯和智能手机或者智能家居系统的连接和通讯。

在硬件设计中,需要考虑电路的稳定性和可靠性,以及元件之间的接口和通讯方式。

同时,还需要考虑到整体设计的美观性和实用性,尽可能减小台灯本身的体积和重量,提升用户体验和便利性。

最终设计出符合要求的硬件方案,是成功实现智能台灯设计的基础和关键。

二、软件设计基于52单片机的智能台灯设计的软件部分主要包括单片机程序设计和手机App设计两个方面。

单片机程序设计是整个智能台灯系统的核心,主要负责控制台灯的各种功能和操作。

在单片机程序设计中,需要实现光源的亮度和色温调节、定时开关功能、光线感应和人体感应等功能。

通过合理的算法设计和程序编写,实现智能台灯的智能化控制和操作。

手机App设计则是智能台灯与用户之间的桥梁,用户可以通过手机App对智能台灯进行远程控制和设置。

在手机App设计中,需要实现与智能台灯的通讯和数据传输,以及用户界面的设计和操作交互。

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计一、设计方案1.硬件部分单片机选用STM32F103C8T6,这款单片机具有丰富的外设资源,可以满足LED台灯的控制需求。

LED灯珠选用RGB三色灯珠,可实现丰富的光色变换。

电源部分采用稳压电源芯片,保证LED台灯的稳定工作。

控制部分采用红外接收模块,实现遥控功能。

还可以添加温湿度传感器、光敏传感器等传感器,实现台灯的智能化控制。

软件部分的设计主要包括单片机程序设计和手机APP开发。

单片机程序设计主要实现以下功能:控制LED灯珠的亮度、颜色和模式,接收红外遥控信号,接收传感器信号,并通过串口通信将数据传输到手机APP。

手机APP主要实现远程控制LED台灯,设置定时开关机,查看温湿度和光照强度等功能。

二、设计实现步骤首先进行硬件设计,按照功能模块划分,设计PCB板。

在设计PCB板时,要充分考虑电路的可靠性和稳定性,尽量减小电路的干扰和损耗。

2.软件设计单片机程序设计采用C语言进行编程,主要包括LED灯控制程序、红外遥控程序、传感器数据处理程序等。

手机APP开发采用Android或IOS平台进行开发,主要使用Java或Swift语言进行编程。

3.联调测试完成硬件设计和软件编程后,进行联调测试。

首先对硬件进行功能测试,确保各个模块能正常工作。

然后进行软件联调测试,确保单片机和手机APP之间能正常进行数据通信。

4.生产制造完成联调测试后,进行生产制造。

首先进行小规模生产,进行功能测试和质量检验。

然后进行大规模生产,生产成品LED台灯。

5.市场推广LED台灯生产完成后,进行市场推广。

通过线上线下渠道进行推广,让更多的消费者了解到智能LED台灯的优点,并购买使用。

三、设计特点1.节能环保LED灯具有节能环保的特点,与传统白炽灯相比,LED灯具有更高的光效,能有效节省能源,减少能源消耗,降低环境污染。

2.色彩丰富RGB LED灯珠能够发出红、绿、蓝三种颜色的光,通过不同比例的混合可以发出丰富的颜色,满足人们对灯光色彩的多样化需求。

基于单片机的智能台灯设计

基于单片机的智能台灯设计

基于单片机的智能台灯设计一、引言本文档描述了基于单片机的智能台灯设计的详细内容。

智能台灯是一种通过单片机控制的台灯,具有自动调光、语音控制等智能化特性。

本文将介绍台灯的整体设计思路、硬件设计、软件设计、测试与验证等内容。

二、设计思路2.1 目标与需求分析2.2 总体设计方案2.3 功能拆分与模块划分三、硬件设计3.1 主控单元3.1.1 单片机选型3.1.2 主控单元电路设计3.2 光照传感器3.2.1 光照传感器选型3.2.2 光照传感器接口设计3.3 LED灯光模块3.3.1 LED灯光模块选型3.3.2 LED灯光模块电路设计3.4 语音识别模块3.4.1 语音识别模块选型3.4.2 语音识别模块接口设计3.5 电源与供电模块3.5.1 电源选型3.5.2 电源电路设计四、软件设计4.1 系统框架设计4.2 光照传感器数据采集与处理4.3 LED灯光控制算法设计4.4 语音控制算法设计4.5 系统交互界面设计五、测试与验证5.1 硬件测试5.1.1 主控单元功能测试5.1.2 光照传感器功能测试5.1.3 LED灯光模块功能测试5.1.4 语音识别模块功能测试5.1.5 电源与供电模块测试5.2 软件测试5.2.1 系统功能测试5.2.2 性能测试5.3 验证结果与分析附件:附件一、电路原理图附件二、电路板布局图附件三、系统软件代码法律名词及注释:1、单片机:也称为微控制器,是一种集成了微处理器核心、存储器、输入输出接口以及其他辅助功能的集成电路芯片。

2、光照传感器:用于感知光照强度的传感器,常用的有光敏电阻、光电二极管等。

3、LED灯光模块:采用LED作为光源的照明模块,具有高效、节能等特点。

4、语音识别模块:用于将语音信号转换为数字信号并进行语音识别的模块,常用的有声学模型、语音识别算法等。

基于单片机的智能台灯设计

基于单片机的智能台灯设计

基于单片机的智能台灯设计一、引言二、智能台灯的功能需求分析(一)亮度调节用户能够根据不同的使用场景和个人需求,灵活调节台灯的亮度。

例如,在阅读时需要较高的亮度,而在睡前阅读时则需要较柔和的光线。

(二)色温调节提供不同的色温选择,如冷光、暖光和自然光,以适应不同的环境和视觉需求。

(三)自动感应具备人体感应功能,当人靠近时自动亮起,人离开一段时间后自动熄灭,节省能源。

(四)定时功能可以设置定时关闭,避免用户在使用过程中睡着而忘记关灯。

(五)光线自适应能够根据周围环境的光线强度自动调整台灯的亮度,保持舒适的照明效果。

(一)单片机选择选用合适的单片机作为控制核心,如 STM32 系列。

STM32 具有高性能、低功耗、丰富的外设接口等优点,能够满足智能台灯的控制需求。

(二)光照传感器采用光敏电阻或环境光传感器,实时检测周围环境的光线强度,并将信号传输给单片机进行处理。

(三)人体感应模块使用红外热释电传感器来检测人体的存在,当有人靠近时,传感器输出信号给单片机,控制台灯亮起。

(四)LED 驱动电路选择合适的 LED 驱动芯片,如恒流驱动芯片,以保证 LED 灯珠的稳定工作和亮度调节。

(五)按键模块设置若干按键,用于用户手动调节亮度、色温、定时等功能。

(六)显示模块可以采用液晶显示屏(LCD)或数码管,显示当前的亮度、色温、定时时间等信息。

(一)主程序流程系统初始化后,进入主循环。

不断检测光照传感器、人体感应模块和按键模块的输入信号,根据信号执行相应的操作,如调节亮度、色温、控制台灯的开启和关闭等。

(二)亮度调节算法通过 PWM(脉冲宽度调制)技术实现亮度调节。

根据用户设定的亮度值,调整 PWM 信号的占空比,从而改变 LED 的平均电流,实现亮度的变化。

(三)色温调节算法采用不同颜色的 LED 灯珠(如冷白、暖白),通过调节两种颜色LED 灯珠的电流比例,实现色温的变化。

(四)人体感应处理当人体感应模块检测到有人靠近时,立即开启台灯,并根据环境光强度自动调整亮度。

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计智能LED台灯是一种集成了智能控制和LED照明技术的台灯产品。

其主要特点是可以通过手机APP或遥控器进行灯光的调节,可以调节亮度、色温和灯光颜色等参数,实现更加智能化和个性化的照明效果。

智能LED台灯是基于单片机的设计,单片机作为控制中心,负责处理各种指令和控制台灯的各项功能。

设计智能LED台灯的关键是合理选用单片机和合适的传感器、通信模块以及LED灯源,保证整个系统的稳定性和可靠性。

首先,在单片机的选择上,可以考虑使用市面上较为常见的8位单片机,如AT89C51系列或PIC系列。

这类单片机易于编程,具有丰富的外设资源和强大的控制能力,适用于智能LED台灯的设计。

其次,传感器的选用也非常重要。

智能LED台灯可以配备光照传感器,通过检测周围环境的亮度,自动调整灯光的亮度和色温,以提供更加舒适的照明效果。

此外,还可以添加触摸传感器,使用户可以通过轻触台灯实现调光、调色温等操作,提供更加便捷的使用体验。

通信模块是实现智能控制的重要组成部分。

可以选择蓝牙、Wi-Fi、红外等通信方式,实现台灯与手机或遥控器的连接和控制,使用户可以通过手机APP或遥控器灵活地调节灯光参数。

此外,还可以通过通信模块实现智能家居系统的集成,实现联动控制。

LED灯源的选择是影响台灯照明效果的关键因素。

可以选择高亮度、高显色指数的LED灯珠,保证台灯的亮度和颜色还原效果。

此外,还可以考虑采用PWM(脉宽调制)技术,通过调节LED灯珠的脉宽和频率,实现精确的灯光调节,提高台灯的色彩可调范围和灯光稳定性。

最后,智能LED台灯的电路设计需要合理配置电源电路、保护电路等。

电源电路可以采用开关电源或转换电源,以确保灯具稳定可靠的供电。

保护电路可以考虑添加过载保护、过热保护等功能,防止灯具的损坏和安全隐患。

综上所述,基于单片机的智能LED台灯设计涉及到单片机选择、传感器选用、通信模块的设计以及LED灯源的选择等多个方面。

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计

基于单片机的智能LED台灯设计1. 引言1.1 背景介绍LED 台灯现在已经成为时尚家居中不可或缺的一部分,它带来了舒适的照明效果,同时也具备节能、环保等优点。

随着科技的不断发展,人们对于台灯的功能和设计要求也越来越高。

基于单片机的智能LED 台灯设计应运而生,它不仅可以实现智能控制,还能够实现多种照明效果,满足不同场景下的需求。

传统的LED 台灯往往只是简单地提供照明功能,无法灵活地调节亮度和色温。

而基于单片机的智能LED 台灯设计则可以通过编程控制LED 光源的亮度和色温,实现渐变、闪烁等效果。

搭配传感器和无线通信模块,还可以实现自动调节光线、远程控制等功能,为用户带来更便捷、智能的照明体验。

通过对基于单片机的智能LED 台灯设计进行研究,不仅可以提升LED 台灯的功能和性能,还可以推动照明科技的发展,为人们的生活带来更大的便利和舒适。

【字数:225】1.2 研究意义LED灯具有节能、环保、耐用等优点,而智能LED台灯可以根据环境光照和用户需求智能调节光线亮度和颜色温度,提升用户体验。

基于单片机的智能LED台灯设计不仅可以实现智能控制功能,还可以通过合理的电路设计和程序算法提高LED灯的使用寿命和稳定性。

智能LED台灯设计结合了单片机技术和光电技术,具有较高的技术含量,可供学术研究和工程应用。

研究基于单片机的智能LED台灯设计具有重要的意义,有助于推动LED照明技术发展,提升LED产品的性能和智能化水平,满足人们对高品质生活的需求。

【字数:204】1.3 研究目的研究目的是通过设计基于单片机的智能LED台灯,实现灯具的智能化控制和节能优化。

具体目的包括:1. 设计一款高性能的LED灯具,通过单片机控制实现灯光的亮度调节和色温调节,提高灯具的灵活性和便捷性。

2. 开发一套智能照明控制系统,通过单片机实现灯具的远程控制和定时开关功能,提升用户体验和舒适度。

3. 设计具有美观实用性的LED台灯外观,使其外观设计与功能实用性相结合,吸引用户的注意并增加产品的市场竞争力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的智能台灯设计The design of Intelligent Table Lamp Based onMicrocomputer制作人员:2015.5.14摘要随着科技的发展,单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹,台灯已是千家万户的必需生活用品,当夜晚来临时,人们摸黑去开灯,非常不方便,而当离开时,人们又经常忘记关灯而造成巨大的能源浪费。

因此我们设计制作了一种智能台灯,主要是以热释电红外传感器re200b,光敏电阻传感器和单片机组成的红外传感控制电路。

其原理是:以人体红外辐射为传感信号,当人体在台灯的范围内且环境光强较弱时,自动感应开灯,省去黑夜摸灯的麻烦;当人离开台灯传感器检测范围,自动感应关灯。

智能台灯还可以进行光亮(4档)的调节,以便达到最舒适的光亮;台灯还具有显示时间与室温的功能。

关键词:智能台灯;at89s52;热释电红外传感器re200b;时钟芯片ds12c887;温度传感器ds18b20;光敏传感器。

一.智能台灯功能介绍(1)、光亮调节:在不同的情况下需要不同的光亮来满足需求,因此我们通过给单片机四个IO 口不同的电平,设置了四种光亮强度,以便达到不同的需求。

(2)、“天暗时,人来灯亮,人走灯灭”功能的实现:运用51单片机产生的方波信号驱动红外发射管发射红外线;运用三脚的红外接收头接收红外信号,当人挡住红外信号,红外信号就会反射被红外接收头接收;并且通过光敏传感器对外界的光强进行判断,在环境光线亮度达不到设定阈值时,DO 端输出高电平,当外界环境光线亮度超过设定阈值时,DO 端输出低电平。

由单片机检测红外接收头是否接收到红外信号,以及光敏传感器的DO 端的电平高低,从而决定led 灯部分的亮度。

由此实现“天暗时,人来灯亮,人走灯灭”。

(3)、时钟部分:运用时钟芯片DS12C887产生时钟信号,由单片机读取其信号,并将数据处理之后送到液晶显示。

由于DS12C887内部有集成的电池,所以即使断电,时钟仍会走时准确,从而使该台灯更实用、更省电。

此时钟还配有按键,通过按键即可方便的调节时钟,还有闹钟功能。

(4)、温度显示:运用DS18B20芯片感应温度,由单片机读取其信号,并将数据处理后送到液晶显示,从而显示当时的温度。

二、传感器的选择及功能介绍传感器传感器是能感受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置,它通常由敏感元件和转换元件组成,它的性能直接影响到整个检测电路,对检测系统起着重要的作用。

热释电红外传感器re200b智能台灯温度 显示闹钟 部分 人体红外感应4档光亮调节 光敏传感器红外热释电处理芯片BISS0001我们所使用的BISS0001是一款具有较高性能的传感信号处理集成电路,它配以热释电红外传感器和少量外接元器件构成被动式的热释电红外开关。

它能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗手池等装置,特别适用于企业、宾馆、商场、库房及家庭的过道、走廊等敏感区域,或用于安全区域的自动灯光、照明和报警系统。

工作原理BISS0001是由运算放大器、电压比较器、状态控制器、延迟时间定时器以及封锁时间定时器等构成的数模混合专用集成电路。

首先,根据实际需要,利用运算放大器OP1组成传感信号预处理电路,将信号放大。

然后耦合给运算放大器OP2,再进行第二级放大,同时将直流电位抬高为VM(≈0.5VDD)后,将输出信号V2送到由比较器COP1和COP2组成的双向鉴幅器,检出有效触发信号Vs。

由于VH≈0.7VDD、VL≈0.3VDD,所以,当VDD=5V 时,可有效抑制±1V的噪声干扰,提高系统的可靠性。

COP3是一个条件比较器。

当输入电压Vc<VR(≈0.2VDD)时,COP3输出为低电平封住了与门U2,禁止触发信号Vs向下级传递;而当Vc>VR时,COP3输出为高电平,进入延时周期。

当A端接“0”电平时,在Tx时间内任何V2的变化都被忽略,直至Tx时间结束,即所谓不可重复触发工作方式。

当Tx时间结束时,Vo下跳回低电平,同时启动封锁时间定时器而进入封锁周期Ti。

在Ti时间内,任何V2的变化都不能使Vo 跳变为有效状态(高电平),可有效抑制负载切换过程中产生的各种干扰。

时钟芯片DS12C887特点可作为IBM AT 计算机的时钟和日历与MC146818B和DS1287的管脚兼容在没有外部电源的情况下可工作10年自带晶体振荡器及电池可计算到2100年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰年补偿用二进制码或BCD码代表日历和闹钟信息有12和24小时两种制式,12小时制时有AM和PM提示可选用夏令时模式可以应用于MOTOROLA和INTEL两种总线数据/地址总线复用内建128字节RAM14字节时钟控制寄存器114字节通用RAM可编程方波输出总线兼容中断(/IRQ )三种可编程中断时间性中断可产生每秒一次直到每天一次中断周期性中断122 ms 到500 ms时钟更新结束中断DS18B20温度传感器DS18B20的主要特征:全数字温度转换及输出。

先进的单总线数据通信。

最高12位分辨率,精度可达土0.5摄氏度。

12位分辨率时的最大工作周期为750毫秒。

可选择寄生工作方式。

检测温度范围为–55°C ~+125°C (–67°F ~+257°F) 内置EEPROM,限温报警功能。

64位光刻ROM,内置产品序列号,方便多机挂接。

多样封装形式,适应不同硬件系统。

三、实现:(一)、硬件部分主体部分:(两条白线为跳线,外形需要,画成了心形)LED:电流放大电路:PS:单片机IO口电流不够大,无法使灯泡足够亮。

按键部分:(二)、软件部分#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit ds=P2^4; //温度传感器信号线sbit beep=P2^3;//蜂鸣器sbit re=P2^2; //热释电sbit gm=P2^7;//光敏sbit s0=P1^3;//智能sbit s1=P3^0;//功能键sbit s2=P3^1;//增加键sbit s3=P3^4;//减小键sbit s4=P3^5;//闹钟查看键sbit s5=P3^6;//调光sbit s6=P3^2;//显示温度sbit rs=P1^0; //sbit lcden=P1^2; // 液晶sbit wr=P1^1; //sbit led1=P2^0;sbit led2=P2^1; //ledsbit led3=P2^5;sbit led4=P2^6;sbit rd=P3^7;sbit dscs=P1^7;sbit dsas=P1^6;sbit dsrw=P1^5; //时钟芯片sbit dsds=P1^4;sbit dsirq=P3^3;uint temp;float f_temp;uchar s5num=0,s0num=0,s6num=0;uchar flag1=0,flag_ri;//定义两个位变量uchar count,s1num,flag=0,t0_num;//其它变量定义uchar miao,shi,fen,year,month,day,week,amiao,afen,ashi; uchar code table[]=" 20 - - ";//液晶固定显示内容uchar code table1[]=" : : ";uchar code table2[]="WELCOME!";void write_ds(uchar,uchar);//函数申明void set_alarm(uchar,uchar,uchar);void read_alarm(); uchar read_ds(uchar);void set_time();/************************************************//*led*/void led(uchar x){switch(x){case 0: led1=1;led2=0;led3=1;led4=0;break;case 1: led1=0;led2=0;led3=1;led4=0; break;case 3: led1=0;led2=0;led3=0;led4=1; break;case 2: led1=1;led2=1;led3=0;led4=0; break;case 4: led1=0;led2=1;led3=0;led4=1; break;}}/***************************************************/void delay(uint z)//延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void di() //蜂鸣器报警声音{beep=0;delay(100);beep=1;}void write_com(uchar com){//写液晶命令函数rs=0;lcden=0;P0=com;delay(3);lcden=1;delay(3);lcden=0;}void write_date(uchar date){//写液晶数据函数rs=1;lcden=0;P0=date;delay(3);lcden=1;delay(3);lcden=0;}void init(){//初始化函数uchar i;EA=1;//打开总中断EX0=1;//开外部中断1IT0=1;//设置负跳变沿触发中断EX1=1;//开外部中断1IT1=1;//设置负跳变沿触发中断flag1=0;//变量初始化t0_num=0;s1num=0;week=1;lcden=0;rd=0;/*以下几行在首次设置DS12C887时使用,以后不必再写入write_ds(0x0A,0x20);//打开振荡器write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式//开启闹铃中断set_time();//设置上电默认时间-----------------------------------------------------*/ write_com(0x38);//1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(i=0;i<15;i++)//写入液晶固定部分显示{write_date(table[i]);delay(1);}write_com(0x80+0x40);for(i=0;i<16;i++){write_date(table1[i]);delay(1);}}void write_sfm(uchar add,char date){//1602液晶刷新时分秒函数4为时,7为分,10为秒char shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void write_nyr(uchar add,char date){//1602液晶刷新年月日函数3为年,6为分,9为秒char shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void write_week(char we){//写液晶星期显示函数write_com(0x80+12);switch(we){case 1: write_date('M');delay(5);write_date('O');delay(5);write_date('N');break;case 2: write_date('T');delay(5);write_date('U');delay(5);write_date('E');break;case 3: write_date('W');delay(5);write_date('E');delay(5);write_date('D');break;case 4: write_date('T');delay(5);write_date('H');delay(5);write_date('U');break;case 5: write_date('F');delay(5);write_date('R');delay(5);write_date('I');break;case 6: write_date('S');delay(5);write_date('A');delay(5);write_date('T');break;case 7: write_date('S');delay(5);write_date('U');delay(5);write_date('N');break;}}void keyscan(){if(flag_ri==1){//这里用来取消闹钟报警,任一键取消报警if((s1==0)||(s2==0)||(s3==0)||(s4==0)){delay(5);if((s1==0)||(s2==0)||(s3==0)||(s4==0)){while(!(s1&&s2&&s3&&s4));di();flag_ri=0;//清除报警标志}}}if(s1==0)//检测S1{delay(10);if(s1==0){s1num++;//记录按下次数if(flag1==1)if(s1num==4)s1num=1;flag=1;while(!s1);di();switch(s1num){//光标闪烁点定位case 1: write_com(0x80+0x40+10);write_com(0x0f);break;case 2: write_com(0x80+0x40+7);break;case 3: write_com(0x80+0x40+4);break;case 4: write_com(0x80+12);break;case 5: write_com(0x80+9);break;case 6: write_com(0x80+6);break;case 7: write_com(0x80+3);break;case 8: s1num=0;write_com(0x0c);flag=0;write_ds(0,miao);write_ds(2,fen);write_ds(4,shi);write_ds(6,week);write_ds(7,day);write_ds(8,month);write_ds(9,year);break;}}}if(s1num!=0)//只有当S1按下后,才检测S2和S3{if(s2==0){delay(10);if(s2==0){while(!s2);di();switch(s1num){//根据功能键次数调节相应数值case 1: miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);break;case 2: fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);break;case 3: shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);break;case 4: week++;if(week==8)week=1;write_week(week);write_com(0x80+12);break;case 5: day++;if(day==32)day=1;write_nyr(9,day);write_com(0x80+9);break;case 6: month++;if(month==13)month=1;write_nyr(6,month);write_com(0x80+6);break;case 7: year++;if(year==100)year=0;write_nyr(3,year);write_com(0x80+3);break;}}}if(s3==0){delay(10);if(s3==0){while(!s3);di();switch(s1num){//根据功能键次数调节相应数值case 1: miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);break;case 2: fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);break;case 3: shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);break;case 4: week--;if(week==0)week=7;write_week(week);write_com(0x80+12);break;case 5: day--;if(day==0)day=31;write_nyr(9,day);write_com(0x80+9);break;case 6: month--;if(month==0)month=12;write_nyr(6,month);write_com(0x80+6);break;case 7: year--;if(year==-1)year=99;write_nyr(3,year);write_com(0x80+3);break;}}}}if(s4==0)//检测S4{delay(10);if(s4==0){flag1=~flag1;while(!s4);di();if(flag1==0){//退出闹钟设置时保存数值flag=0;write_com(0x80+0x40);write_date(' ');write_date(' ');write_com(0x0c);write_ds(1,miao);write_ds(3,fen);write_ds(5,shi);}else{//进入闹钟设置read_alarm();//读取原始数据miao=amiao;//重新赋值用以按键调节fen=afen;shi=ashi;write_com(0x80+0x40);write_date('R');//显示标志write_date('i');write_com(0x80+0x40+3);write_sfm(4,ashi);//送液晶显示闹钟时间write_sfm(7,afen);write_sfm(10,amiao);}}}if(s0==0){delay(10);if(s0==0){di();s0num++;if(s0num==2)s0num=0;}}if(s5==0){delay(10);if(s5==0){di();s5num++;if(s5num==5)s5num=0;led(s5num);delay(10);}delay(10);while(!s5);}}void write_ds(uchar add,uchar date){//写12C887函数dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;//先写地址dsas=0;dsrw=0;P0=date;//再写数据dsrw=1;dsas=1;dscs=1;}uchar read_ds(uchar add){//读12C887函数uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;P0=add;//先写地址dsas=0;dsds=0;P0=0xff;ds_date=P0;//再读数据dsds=1;dsas=1;dscs=1;return ds_date;}/*---首次操作12C887时给予寄存器初始化--- void set_time(){//首次上电初始化时间函数write_ds(0,0);write_ds(1,0);write_ds(2,28);write_ds(4,4);write_ds(5,0);write_ds(6,7);write_ds(7,10);write_ds(8,5);write_ds(9,15);}----------------------------------------*/ void read_alarm(){//读取12C887闹钟值amiao=read_ds(1);afen=read_ds(3);ashi=read_ds(5);}/***********ds18b20**********/void dsreset(void) //18B20复位,初始化函数{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit tempreadbit(void) //读1位函数{uint i;bit dat;ds=0;i++; //i++ 起延时作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return (dat);}uchar tempread(void) //读1个字节{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 }return(dat);}void tempwritebyte(uchar dat) //向18B20写一个字节数据{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写 1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0; //写 0i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) //DS18B20 开始获取温度并转换{dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}uint get_temp() //读取寄存器中存储的温度数据uchar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低8位b=tempread(); //读高8位temp=b;temp<<=8; //两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05;return temp; //temp是整型}////////////////////显示程序//////////////////////////void dis_temp(uint t){uchar a,b;write_com(0x80+0x40);a=t/100;write_date(a+0x30);delay(5);a=t%100/10;write_date(a+0x30);delay(5);write_date(0x2e);delay(5);a=t%100%10;write_date(a+0x30);delay(5);write_date(0xdf);delay(5);write_date(0x43);delay(5);}/************************************************/ /*智能*/void re200b(){if(s0num==1){if(re==1 && gm==1){if(s5num==0){s5num=1;}}if(re==0||gm==0){s5num=0;}led(s5num);}if(s0num==0){led(s5num);}}void main()//主函数{uchar i;wr=0;init();led(0);write_com(0x01);for (i=0;i<8;i++){write_date(table2[i]);delay(20);}delay(4000);init();while(1){keyscan();//按键扫描re200b();if(flag_ri==1)//当闹钟中断时进入这里{di();delay(100);di();delay(500);}if(flag==0&&flag1==0)//正常工作时进入这里{keyscan();//按键扫描year=read_ds(9);//读取12C887数据month=read_ds(8);day=read_ds(7);week=read_ds(6);shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);write_sfm(10,miao);//送液晶显示write_sfm(7,fen);write_sfm(4,shi);write_week(week);write_nyr(3,year);write_nyr(6,month);write_nyr(9,day);}}}void exter() interrupt 2//外部中断1服务程序{ uchar c; //进入中断表示闹钟时间到,flag_ri=1; //设置标志位,用以大程序中报警提示c=read_ds(0x0c);//读取12C887的C寄存器表示响应了中断}void wendu() interrupt 0//外部中断0服务程序{uchar i;di();for(i=0;i<4;i++){write_com(0x01);tempchange();dis_temp(get_temp());delay(700);}write_com(0x01);for(i=0;i<15;i++)//写入液晶固定部分显示{write_date(table[i]);delay(1);}write_com(0x80+0x40);for(i=0;i<16;i++){write_date(table1[i]);delay(1);}}四、应用背景:此款智能台灯可以应用于家居生活,其功能齐全,有普通模式和智能模式之分,并且有闹钟功能,能显示温度。

相关文档
最新文档