说明书-基于单片机的教室照明智能控制器设计.docx

基于单片机的教室照明智能控制器设计含5张CAD图

收藏

压缩包内文档预览:(预览前20页/共84页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:97011768    类型:共享资源    大小:1.39MB    格式:ZIP    上传时间:2020-10-05 上传人:QQ14****9609 IP属地:陕西
70
积分
关 键 词:
基于 单片机 教室 照明 智能 控制器 设计 CAD
资源描述:
基于单片机的教室照明智能控制器设计含5张CAD图,基于,单片机,教室,照明,智能,控制器,设计,CAD
内容简介:
基于单片机的教室照明智能控制器设计摘 要针对教室照明控制的现状和大浪费的现象,分析了教室照明智能控制的原理和实现方法,提出了基于教室照明的智能控制的设计思路。单片微机。该系统采用AT89C52作为控制装置的智能部件,利用热释光红外传感器检测人体的存在,并采用由光敏三极管组成的电路来检测环境光的强度。根据教室内合理的光照情况,通过对人体现有信号和环境光信号进行识别和判断,完成系统。教室照明回路的智能控制避免了教室里的电浪费。该系统具有体积小、控制方便、可靠性高、专用性强、性价比高等优点。它可以满足各高校教室照明控制的要求,并在很大程度上节约了能源。关键词:教室灯光控制;热释红外传感器;光敏电阻;单片机Design of Intelligent Controller for classroom Lighting based on single Chip MicrocomputerAbstractThis study of intelligent control classroom lamplight, analyzes the current situation of the development of the classroom light of intelligent control principle and method, is proposed based on single-chip microcomputer intelligent control of the classroom lamplight design. This system to AT89C52 single chip computer as control device of intelligent parts, adopts heat release infrared sensor detects the release of human existence and adopts photoconductive resistance constitutes circuit testing environment light intensity.According to the classroom light conditions and the measured the signal of human body system and ambient light, the system can make reasonable and intelligent judgment and then controls the work of classroom lighting circuit .It is a effective way to avoid the classroom of waste electricity. Small volume, convenient control, high reliability, high specificity and price reasonable make this system satisfy the advantages of large, secondary technical schools classroom light control requirements and greatly reach energy-saving purpose.Key words:heat release infrared sensor ;photoconductive;dynatron;singlechipII 目录摘要Abstract1. 绪论21.1 研究背景与发展现状21.2 研究主要内容32. 设计方案的选择及论证52.1 总体方案论述52.2 方案一的论述52.2.1 方案一的设计框图52.2.2 方案一的设计方法52.2.3 方案一的优缺点62.3 方案二的论述62.3.1 方案二的设计框图62.3.2 方案二的设计方法62.3.3 方案二的优缺点62.4 方案的选择73. 系统软件设计83.1 系统流程分析83.2 LCD1602 显示设计113.3 照明系统开函数设计113.4 按键函数设计143.5 时钟函数设计144. 硬件设计164.1 单片机最小模块164.2 光照及当前人数检测模块164.2 光照及当前人数检测模块174.3 按键模块174.4 时钟电路模块174.5 LCD 显示模块184.6 照明模块184.7 实现结果195. 总结265.1 问题与处理265.2 展望27参考文献28附录29致 谢611. 绪论1.1 研究背景与发展现状随着国民经济建设和社会物质文化水平突飞猛进的发展,人们学习,工作,活动,娱乐空间和场所越来越大,所需要的照明设备种类,数量和规模也越来越大了。人民生活水平质量近几年来也取得了快速的提高,人们对照明的需求也越来越高。然而传统的照明灯具具备耗能高,光照安逸度差, 照明灯具的寿命也较短,也不便于控制等很多缺点,已经不能满足人们的需求,从一开始只供应亮度的基本功能到如今有了很多方面的需要,除供给安逸的环境亮度以外,还要营建典雅安逸的气氛; 人们也要求照明控制形式便利灵活,能够达到按需求配置,并且还能满足节能环保,降低运行费用, 而且要求安装轻易,维护容易,要求整个体系可以供给人们对照明系统多样性的需求。需求的变化使得人们对照明系统产生了新的变化。资源短缺是如今国际面临的新问题,节约能源,提高效益也就成为了我们将要研究的问题。自从上世纪年代能源危机爆发至今以来,世界对于能源安全的关注度也越来越高。自从改革开放以来, 国家社会经济与日俱增的发展,对于资源的依赖性也愈来愈高,资源短缺与环境污染局势也逐渐严峻。因此,节约能源,保护环境已成为我们当前的紧要任务。随着近年来智能技术的迅速发展,智能控制技术正以突飞猛进的速度向国民经济的各个领域发展,并逐渐在国民经济中发挥着重要的作用。智能照明技术在此环境下应运而生,利用该技术我们能够很好地利用天然资源,提高光环境舒适度,减少人工照明耗能,并且随着时间的推移,智能照明技术将会迅速发展壮大。目前,中国的技术实现企业用于智能处理的水平已经至少达到了三到四成左右。国际从上个世纪就下手智能照明系统的建设研究和应用了,如奇胜的C-BUS 总线,ABB 公司的 I-bus 总线,邦奇 Dynet 总线协议,日本松下的 HBS 协议,以及 X-10 的电力线载波协议。选用无线网络技术的智能灯光控制系统的一系列产品最近也将接踵涌现在消费者的眼前。与电力线载波计划相似,因为没有专用的网络线,但安设或扩展非常简单,这个方案可以使用电池供电,可以不用去连接电源线,其使用非常方便灵活,同时也降低了用户的总体消费成本。同时,蓝牙技术的发展也不断地在智能化家居和智能照明控制中得到了大量的应用1。目前智能化照明仍然处于发育阶段,国内外很多知名企业都很看好这个新性行业,已经投入大量人力和财力去着手研发很具有智能化的照明控制系统,将会在住宅照明、道路照明、景观照明、体育场馆、公园照明等等公共场合得到不同程度上的应用。1.2 研究主要内容利用单片机 AT89C52 作为核心控制器件,设计一种基于单片机的教室照明智能控制器,实现教室光照控制,防止无人时亮灯、天亮时亮灯,节约能源。当要求自动控制照明系统时,要求通过对教室内人数进行计数及当前室内光照强度的采集,当在开灯时间内且室内光照强度较暗、教室有人的时候,单片机将发出指令进行开灯,且随着教室人数的变化,光照强度也进行改变。当教室内光照强度较强时,灯不可打开。当要求手动控制照明系统时,不计算教室人数及光照,手动进行开灯、关灯。在此基础上,设计系统还具有时钟功能及当前人数显示功能,使工作人员方便调节开灯时间,了解当前教室人数。822. 设计方案的选择及论证2.1 总体方案论述教室照明系统利用单片机 AT89C52 作为信息处理器和核心控制器件。系统利用红外检测模块将进入教室的人数、光照检测模块将室外光照强度、设定的开灯时间及人工开关的状态经过处理传递给单片机,单片机将得到的信息进行处理,判断是否需要开灯,达到开灯条件时单片机将发出指令将灯打开,否则灯灭。总体的系统框图如图 2.1 所示。图 2.1 系统框图2.2 方案一的论述2.2.1 方案一的设计框图系统由控制模块、光照强度检测模块、人体存在检测模块、硬件时钟模块和手动开关模块组成。方案一的硬件设计框图如图 2.2 所示。图 2.2 方案一设计框图2.2.2 方案一的设计方法设计系统核心部件为 AT89C52,光照强度信号由光照强度检测模块进行采集,教室人数由人体存在检测模块进行采集之后将采集到的信号通过电压比较电路进行转换并送入单片机中进行处理, 并在处理后,根据结果发送不同的指令进行输出驱动。开机后,所有器件初始化。用光照强度检测模块对室外光照强度及教室人数进行监测,将所得到的电压信号通过电压比较器进行处理并传入单片机,再由 AT89C52 对传入信号进行处理。其中教室人数不同,亮灯数量不同。将所得信号与设定的初始光照值相比较,当光照强度低于设定的初始光照强度时且教室有人时,单片机发出指令打开照明系统;当光照强度低于设定值时但教室没人时, 单片机发出指令关照明系统。当光照强度高于设定限额上限,不论教室是否有人,由单片机发出指令关闭照明系统。且对教室人数进行分段处理,每一阶段教室灯光强度不同。2.2.3 方案一的优缺点基于单片机 AT89C52 控制的教室照明智能控制器制造成本低、安装方便、效率高、实现简单, 且照明系统的状态由光照强度、教室人数、开灯时间及开关状态共同控制,更加科学、节能。缺点在于多个模块全接在主芯片上,不易维修,不适合多个教室共同管理。2.3 方案二的论述2.3.1 方案二的设计框图系统的结构主要由三部分组成:上位机系统、下位机系统和通信系统。这三部分共同组成了主控制器,通过有线方式和分控制器进行信息交换,以达到控制照明灯具的目的。方案二的硬件设计框图如图 2.3 所示。是,将开灯信号传入单片机图 2.3 方案二设计框图2.3.2 方案二的设计方法系统采用 RS-485 半双工主从式通信方式,主控制器可以通过发送数据或指令给从控制器,从控制器通过中断方式来接收主控制发来的指令或数据对分布的照明灯具进行控制。这次照明智能控制系统的设计以AT89C52 单片机作为主控制器和从控制器,来实现有线通信、信息采集和控制与显示等功能。2.3.3 方案二的优缺点方案二同时控制多个教室。缺点在于电路复杂、耗能高。2.4 方案的选择通过对方案一和方案二优缺点的比较,基于对系统稳定性、系统成本及系统节能方面的考虑, 方案一比方案二更加适合。首先,方案一采用了多检测模块进行当前状态检测,涵盖的可能性更多,并且对人数进行分段, 每段采用不用的灯光强度,更加节能;其次,方案一采用了同步检测所有状态信号的方式,检测更加快捷、节能;再次,方案一设有手动开关,可以避免一些意外情况,更加人性化。而方案二电路复杂、耗能高、不易实现。考虑到以上原因,设计采用方案一。3. 系统软件设计编程软件采用 keil uvision4 软件,设计程序采用 C 语言进行编写。软件部分可成功编译,并在 proteus 中仿真实现预期功能。具体函数模块由一个主函数(main.c)文件以及 2 个 h 文件构成。这 2 个 h 文件分别为:reg51.h(8051 的相关参数初始化),intrins.h(伪本征函数)。3.1 系统流程分析主程序的作用是调用几个子程序完成总体功能。首先,单片机默认为自动模式;其次,单片机进行初始化,LCD1602、DS1302 分别进行初始化;再次,DS1302 开始工作发出实时日期/时间,LCD 进行日期/时间以及当前人数的显示,通过光线和人数进行判断是否开灯;最后,进行键盘扫描,根据不同按键,改变当前设置。主程序流程如图 3.1 所示。 图 3.1 主程序流程图主程序解析:#include #include #define uchar unsigned char #define uint unsigned intuchar time_data7;uchar code write_add7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/数据的地址uchar code read_add7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;uchar code table1=Count|2016/00/00; uchar code table2= 00|00:00:00;uchar code table3=;/清屏内容uchar code table4=Set Real Time ;uchar code table5=SetOpenTime; uchar code table6=Start Time:; uchar code table7=00:00:00; uchar code table8=End Time:; ucharcodetable9=Date:2016/00/00; uchar codetable0=Time:00:00:00;bit Adjust;/调节标志位,=1 表示进入调节模式,=0 是正常模式bit Auto_flg;/自动模式标志位,=1 表示手动模式,=0 是自动模式sbit rs=P10; /LCD1602sbit rw=P11;/LCD1602sbit e=P12;/LCD1602sbit sck=P25;/时钟端口sbit io=P26;/时钟端口sbit rst=P27;/时钟端口sbit SELT =P16;/选择键sbit ENTER=P17;/确认键sbit UP=P30;/加键sbit DOWN =P31;/减键sbit MODE =P32;/切换按键接口sbit SWITCH=P33;/手动开关sbit AUTO_LED=P13;/自动模式灯接口sbit HAND_LED=P15;/手动灯接口sbit LAMP1=P34;/灯接口sbit LAMP2=P35;/灯接口sbit LAMP3=P36;/灯接口sbit LAMP4=P37;/灯接口sbit LIGHT1=P20;/光线检测端口sbit IN1=P22; sbit OUT1=P21;uchar Select_num; /选择按键按下次数uchar Enter_num; /确认按键按下次数float Year,Month,Day,Hour,Minute,Second;/时间设置值float Hour_H,Minute_H,Second_H;/设置开始时间float Hour_L,Minute_L,Second_L;/设置结束时间int Value1;/人数uchar IN1_flag=0; ucharOUT1_flag=0; void read_rtc();void delay1(uint z)/延时函数uint x,y; for(x=z;x0;x-)for(y=10;y0;y-);void main()AUTO_LED=0;/默认自动模式init();/液晶初始化while(1)if(Adjust=0)/非调节模式下显示时间和开锁Time_Display();/显示时间Open(); /动作判断,根据光线和声响开关Count_Value();Keyscan();/扫描键盘3.2 LCD1602 显示设计LCD1602 显示函数先将 LCD1602 进行初始化,之后设置字符的显示位置,最后进行字符的显示。LCD1602 显示函数流程如图 3.2 所示。 图 3.2LCD1602 显示函数流程图3.3 照明系统开函数设计照明系统开函数主要是通过当前教室光照强度及当前人数来判断是否开照明系统。首先,根据学校的作息时间设置开灯时间和关灯时间;之后,若当前时间在开灯时间和关灯时间范围内,则进行光照强度检测,如果光照强度不足且教室没人,照明系统关闭,若光照强度不足但教室有人,则照明系统打开。照明系统开函数流程图如图 3.3 所示。否否图 3.3照明系统开函数流程图照明系统开函数解析:设定的上下限时间为 08:0022:00,当人数为 19 人时开一个灯,当人数为 1019时开两个灯,当人数为 2029 时开三个灯,当人数为 30 以上时开四个灯。void Open(void)float Now;float Set_L,Set_H;Now=Hour+Minute/60+Second/3600;/把实时时间化成小时为单位Set_L=Hour_L+Minute_L/60+Second_L/3600; /把设置下限时间化成小时为单位Set_H=Hour_H+Minute_H/60+Second_H/3600; /把设置上限时间化成小时为单位if(Auto_flg=0)/自动模式if(Now=Set_L)&(Now0)&(Value1=10)&(Value1=20)&(Value1=30)LAMP1=0;/30 以上亮四个灯LAMP2=0; LAMP3=0; LAMP4=0;if(LIGHT1=1)/光线强烈LAMP1=1;/全灭LAMP2=1; LAMP3=1; LAMP4=1;if(NowSet_H)/实时时间不在范围内LAMP1=1;/全灭LAMP2=1; LAMP3=1; LAMP4=1;3.4 按键函数设计通过按键设置当前状态,如:上下限时间,手动模式和自动模式切换。3.5 时钟函数设计通过 DS1302 产生实时的系统日期和时间。时钟函数流程图如图 3.4 所示。4. 硬件设计整个控制系统由控制模块、光照及当前人数检测模块、按键模块、时钟电路模块、LCD 显示模块和照明模块组成。其中电源由实验室 5V 电源提供。4.1 单片机最小模块单片机最小模块是系统能够运行功能的基础组成,硬件电路如图 4.1 所示,包括单片机芯片, 晶振电路和复位电路。图 4.1 控制模块单片机芯片选择 ATMEL 公司生产的 AT89C52 单片机。该芯片具有结构简单、价格低廉、效率高、灵活性高的优点。晶振电路为系统提供基本的时钟信号。晶振选择 12MHz,C1,C2 电容大小为 30pF。复位电路的作用是对于单片机进行复位工作。通电后,C3 电容两端的电压由 0V 将慢慢上升, 单片机的 RST 复位引脚的电压由低电位渐渐升高到高电位,引起 C52 内部电路复位工作,RST 引脚电压渐渐下降,直到降为低电平,AT89C52 开始正常运行工作。当按下复位开关后,电容两端进行放电,RST 端变为高电平,系统回到刚通电时的状态。4.2 光照及当前人数检测模块光照及当前人数检测模块模块如图 4.2 所示。4.2 光照及当前人数检测模块在 proteus 中,由于红外探头及光敏电阻无法仿真,所以用按键表示。当表示光照的按键按下图时,表示当前处于光照强度弱的状态,否则表示处于光照强度强的状态。当表示外面的按键先按下, 表示内部的按键再按下时,表示当前教室人数加一;当表示内部的按键先按下,表示外部的按键再按下时,表示当前教室人数减一。在实物制作中,采用红外探头组进行人体检测,一共用两组,一组放在门外,一组放在门里, 进行当前人数检测;采用光敏电阻进行当前光照强度检测。将两组红外探头及光敏电阻分别接在电压比较器上,输出接单片机上,进行当前状态的检测。4.3 按键模块按键模块如图 4.3 所示。图 4.3 按键模块此模块的主要作用是通过按键调节当前系统的状态。如:上下限时间,当前时间,自动手动模式切换及手动模式照明系统开关。4.4 时钟电路模块时钟电路模块如图 4.4 所示。图 4.4 时钟电路模块该模块的作用是产生实时的系统日期和时间,通过 LCD1602 进行显示,以便对当前人数进行实时记录。主要芯片为时钟芯片 DS1302,它含有一个静态 RAM 和一个实时的日历/时钟,通过串口通信与单片机进行连接。设计系统中复位引脚 RST 接 P2.7,数据输入/输出引脚 I/O 接 P2.6,时钟引脚 CLK 接 P2.5,X1 与 X2 引脚之间接一个 32.768kHz 的晶振。4.5 LCD 显示模块LCD 显示模块如图 4.5 所示。LCD 显示模块是采用 LCD1602 显示日期、时间、当前人数。LCD1602 的显示屏为 16*2,即每行可显示 16 个字符,共有 2 行显示。LCD1602 的 D0D7 引脚接 P0 口,且此时应注意需要接上拉电阻。寄存器选择引脚,即 RS 引脚接 P1.0;读写信号线引脚,即 RW 引脚接 P1.1;使能端引脚,即 E 引脚接 P1.2,达到控制作用。图 4.5 LCD 显示模块4.6 照明模块照明模块电路如图 4.6 所示。图 4.6 照明模块照明模块由四个 LED 灯组成,分别接P3.4-P3.7。当处于上下限范围内且为自动模式时,若当前光照强度弱,照明系统开;当前人数为 19 时,亮一个灯;当前人数为 1019 时,亮前两个灯;当前人数为 2029 时,亮前三个灯;当前人数为 30 以上时,四个灯全亮;若在手动模式下,无论是否在上下限范围内,光照强度如何,是否有人,只要按下手动开关,四个灯全亮。4.7 实现结果4.7.1 整体仿真图设置开启时间为 08:00,关闭时间为 22:00。(1) 为自动模式,当前光照强度强,教室有人,则此时灯灭。如图 4.7(a)所示。图 4.7(a) 光照强度强,教室有人(2) 为自动模式,当前光照强度弱,教室有 19 人,则此时第一个灯亮。图 4.7(b) 光照强度弱,教室有 19 人(3) 为自动模式,当前光照强度弱,教室有 1019 人,则此时前两个灯亮。图 4.7(c) 光照强度弱,教室有 1019 人(4) 为自动模式,当前光照强度弱,教室有 2029 人,则此时前三个灯亮。 图 4.7(d) 光照强度弱,教室有 2029 人(5) 为自动模式,当前光照强度弱,教室有 30 人以上,则此时四个个灯亮。图 4.7(e) 光照强度弱,教室有 30 人以上(6) 为手动模式,手动开关开,教室无人,光照强度强。如图 4.7(f)所示。图 4.7(f) 手动模式,手动开关开,光照强度强,教室无人5. 总结5.1 问题与处理利用单片机 AT89C52 作为核心控制器件的教室照明智能控制器,实现教室照明系统的智能化, 更加节约能源。系统主要包括控制模块,信息采集模块,显示模块和照明模块。红外探头对教室人数进行检测,光敏电阻对当前教室光照强度进行检测,单片机对数据进行处理判断,控制教室照明系统的开关,实现照明系统的自动化、人性化。当光照强度较低时,单片机将发出指令允许开灯, 再进行教室当前人数检测,若在设定时间范围内,且光照强度弱,教室有人,则照明系统打开;当光照强度强,或教室没人,或不在设定范围内,由单片机发出指令,照明系统关闭。系统基本上达到了任务书的要求,可在程序中根据需要进行人数范围及开启时间的设定,之后系统根据设定自动进行检测。运行后,也可使用按键进行手动自动调节、当前时间调节和开启时间、关闭时间调节。系统具有功能丰富、抗干扰能力高、易于操作的优点,不同的人数对应不同的亮度具有一定的科学性,使教室的光照强度更加适合当前环境,有利于节约能源。在任务书要求外,设计系统还具有日历时钟功能和当前人数显示功能,使工作人员更方便了解当前教室内人数,在需要时进行手动调节,更加人性化。设计系统仍有一定的不足之处,相对于任务书具有一定的差距:该控制器不能具体的了解到进教室的同学具体坐在教室的什么位置,以至于不能更好的控制哪一部分灯亮,哪一部分灯灭,因此不能很好的节约资源。这点的改进需要在以后的研究中需要继续探究,对设计系统进行进一步的改进。我认为系统的缺点可以通过将教室的每个灯都用此控制器控制,当人进入教室后,可根据自己所坐的位置进行开灯。在本次设计制作中出现了不少问题,后来在不断的检查和调整下解决了问题。主要遇到的困难如下:在硬件的制作过程中,出现将排阻接反的问题,此时 LCD1602 不能正常工作,后经检查发现进行改正。在焊接的工程中,由于自身水平不足,在开始焊的过程中,将红外接收管烧坏,后经过排查,发现此处问题,经过练习以后,最终焊接成功。在整个制作过程中对于编程软件和仿真软件的运用能力以及动手能力都得到了进一步的加强。对于 keil 软件,能够使用软件对多个程序进行编译,并生成一个 hex 文件。同时意识到,编译时只能检查出程序的语法错误,不能检查出程序的逻辑错误,即使编译成功也有可能因为程序逻辑错误而不能实现功能。对于 proteus 软件,能够熟练的从库中调用元器件连接硬件电路,并设定仿真环境, 实现系统仿真。在硬件的制作过程中,提高了排版和焊接能力,能够熟练的利用烙铁和焊锡对元器件通过走锡法进行连接。在刚开始的焊接过程中,会出现虚焊,漏焊以及由于送锡过量而将相邻的点焊接在一起等现象,后经过不断练习,已经可以得到光滑圆润的焊点,并可以准确的控制送锡量进行走线连接。5.2 展望在未来的系统设计中,可在系统的基础上进行功能拓展,实现系统功能的多样化和科学化。(1) 实现智能场景控制,对于不同的场景,产生不同的照明效果,提高其非定量指标(如舒适性和艺术性等),努力让其更加智能化、人性化。(2) 可将照明系统与监控系统结合起来,用摄像来采集教室内的光照强度,人数,人员分布等各种实时状况,让其操作更方便,功能更完善。科学技术的不断发展,照明系统的智能化已经成为一个不可更改的趋势。基于单片机的教室智能照明控制器也会在巨大的市场需求的推动下,不断出现新的产品,更加优化,更加科学,更加人性化参考文献1 胡兴军.发展中的智能照明系统J.光源与照明,2004,(3):44-46.2 石永生,陈广盛,赵金龙.基于单片机的智能照明控制系统设计.J.信息通信. 2013(10):63-643 孔谋夫,潘银松. 选用单片机的教室节能控制器的设计与实现.J.电子技术 2007, 34(1):27-294 童诗白,华成英.模拟电子技术基础(第四版)M.北京:高等教育出版社,2006.5 郭天祥.新概念 51 单片机C 语言教程 入门、提高、开发、拓展全攻略 M.北京:电子工业出版社,2009.6 谭浩强.C 程序设计(第二版)M.北京:清华大学出版社,1999.7 窦振中. 单片机外围器件实用手册M. 北京:北京航空航天大学出版社,20038 李广弟. 单片机技术M. 北京:航空航天大学出版,20019 阎石. 数字电子技术基础(第三版). 北京:高等教育出版社,200910 Atmel. Atmel 89C51 Microcontrollers Hardware Manual,2010. 3598.11 Pan Tian Fu,Chiu Huang Jen,Cheng Shi Jen,Cheng Shi Yen.An Improved Single-Sage Flyback PFC Converter for High-Luminance Lighting LED LampsJ.The Eighth International Conference on Electronic Measurement and Instruments,2007:212-215.12 雷道仲,李书成,罗政球基于单片机定时开关的设计J贵州教育学院报2005(4):224-22513 张天凡完全手册51单片机C语言开发详解M北京:电子工业出版社200814 王振宇基于单片机设计的多功能定时器J贵州教育学院报2005(4):79-8115 刘焕平,李娟基于5 1单片机的智能定时控制系统设计J石家庄职业技术学院学报2010(6):26-2816 张自聪,金永兴基于AT89S52的奥运倒计时牌的设计J:中国计量学院报2007(4):305-307 附录附录 A 原理图附录 B 元器件清单序号名称型号数量1排阻8*10k1 个2瓷片电容1042 个3插件电容2.2uF/16V1 个4瓷片电容1032 个5插件电容100Uf/25V1 个6LED 灯LED10 个7开关SW1 个8XH2pin 座POWER1 个9液晶屏LCD16021 个10红外接收管2 个11红外发射管2 个12光敏电阻100K1 个13蓝白可调电阻10k1 个14插件电阻4.7k3 个序号名称型号数量15插件电阻15010 个16插件电阻10k5 个17插件电阻100k1 个18插件电阻1002 个19按键7 个20时钟芯片DS13021 个21单片机STC89C521 个22运放LM3391 个23晶振32768Hz1 个24晶振12M1 个附录 C 源程序#include #include #define uchar unsigned char#define uint unsigned intuchar time_data7;uchar code write_add7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80; /数据的地址uchar code read_add7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;uchar code table1=C: 00|2016/00/00;uchar code table2=T: 00|00:00:00 0;uchar code table3= ; /清屏内容uchar code table4= Set Real Time ;uchar code table5= Set Open Time ;uchar code table6= Start Time: ;uchar code table7= 00:00:00 ;uchar code table8= End Time: ;uchar code table9=Date: 2016/00/00;uchar code table0=Time: 00:00:00 0;bit Adjust; /调节标志位,=1表示进入调节模式,=0是正常模式bit Auto_flg; /自动模式标志位,=1表示手动模式,=0是自动模式sbit rs=P10; /LCD1602sbit rw=P11; /LCD1602sbit e=P12; /LCD1602sbit sck=P25; /时钟端口sbit io=P26; /时钟端口sbit rst=P27; /时钟端口sbit SELT =P16; /选择键sbit ENTER=P17; /确认键sbit UP =P30; /加键sbit DOWN =P31; /减键sbit MODE =P32; /切换按键接口sbit SWITCH=P33; /手动开关sbit AUTO_LED=P13; /自动模式灯接口sbit HAND_LED=P15; /手动灯接口sbit LAMP1=P34; /灯接口sbit LAMP2=P35; /灯接口sbit LAMP3=P36; /灯接口sbit LAMP4=P37; /灯接口sbit LIGHT1=P20; /光线检测端口sbit IN1=P22;sbit OUT1=P21;uchar Select_num; /选择按键按下次数uchar Enter_num; /确认按键按下次数uchar Switch_num; /手动开关按键按下次数float Year,Month,Day,Hour,Minute,Second;/时间设置值uchar Week;float Hour_H,Minute_H,Second_H; /设置开始时间float Hour_L,Minute_L,Second_L; /设置结束时间int Value1;/人数uchar IN1_flag=0;uchar OUT1_flag=0;void read_rtc();/*LCD1602显示*/void delay1(uint z) /延时函数uint x,y;for(x=z;x0;x-)for(y=10;y0;y-);void write_com(uchar com) /写指令函数rw=0;delay1(5);rs=0;delay1(5);e=1;delay1(5);P0=com;delay1(5);e=0;delay1(5);void write_date(uchar date)/写数据函数rw=0;delay1(5);rs=1;delay1(5);e=1;delay1(5);P0=date;delay1(5);e=0;delay1(5);void init() /初始化函数uchar num;Year=17;Month=1;Day=1;Hour=15;Minute=30;Second=50;Week=1;Hour_H=22;Minute_H=0;Second_H=0;Hour_L=18;Minute_L=0;Second_L=0;e=0; / 时序表e初始为0write_com(0x38); /设置16*2显示,5*7点阵,8位数据接口write_com(0x0c);/设置光标write_com(0x06);/光标自动加1,光标输入方式write_com(0x01);/清屏write_com(0x80);/设置初始显示位置for(num=0;num16;num+)write_date(table1num);delay1(5);write_com(0x80+0x40);for(num=0;num16;num+)write_date(table2num);delay1(5); void SetTime_dispaly(uchar add,uchar dat) /第一个:参数的地址,第二个:参数的内容uchar shi,ge;shi=dat/10;/把十位提取出来ge=dat%10;/把个位提取出来write_com(add); /要写的地址write_date(0x30+shi);/十位的内容 1602字符库write_date(0x30+ge);/个位的内容 1602字符库void Week_dispaly(uchar add,uchar dat)/第一个:参数的地址,第二个:参数的内容write_com(add);/要写的地址write_date(0x30+dat);/十位的内容 1602字符库void Date_dispaly(uchar add,uchar dat) /第一个:参数的地址,第二个:参数的内容uchar shi,ge;shi=dat/16;/把十位提取出来ge=dat%16;/把个位提取出来write_com(add+3); /要写的地址write_date(0x30+shi);/十位的内容 1602字符库write_date(0x30+ge);/个位的内容 1602字符库 void LCD_Clean(uchar i)/液晶屏清除显示uchar num;if(i=1)write_com(0x80);/设置初始显示位置for(num=0;num16;num+)/显示第一行内容write_date(table3num);delay1(1);if(i=2)write_com(0x80+0x40);for(num=0;num16;num+)/显示第二行内容write_date(table3num);delay1(1);void LCD_Display_String(unsigned char line,unsigned char *string) /液晶屏显示内容,把要显示的内容写到对应的位置unsigned char i;unsigned char address=0;if(line=1)address=0x80; /0X80是第1行的第1个位置 ,0x81第2位else if(line=2)address=0x80+0x40; /0X80+0x40是第2行的第1个位置 ,0X80+0x40+1是第2行第2位for(i=0;i16;i+)write_com(address);write_date(stringi);address+; /*DS1302时钟*/void Time_Display(void)read_rtc();Date_dispaly(0x80+0x40+9,time_data6); /显示秒Date_dispaly(0x80+0x40+6,time_data5); /显示分Date_dispaly(0x80+0x40+3,time_data4); /显示时Date_dispaly(0x80+11,time_data3); /显示日Date_dispaly(0x80+8,time_data2); /显示月Week_dispaly(0x80+0x40+15,time_data1); /显示周Date_dispaly(0x80+5,time_data0); /显示年 /Year/10*16+Year%10Hour=time_data4/16*10+time_data4%16;Minute=time_data5/16*10+time_data5%16;Second=time_data6/16*10+time_data6%16;void write_ds1302_byte(uchar dat)uchar i;for(i=0;i1;sck=1;void write_ds1302(uchar add,uchar dat)rst=0;_nop_(); /CPU原地踏步sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add); /传地址write_ds1302_byte(dat); /传数据rst=0; /不受其他影响_nop_();io=1; /释放sck=1;uchar read_ds1302(uchar add)uchar i,value;rst=0;_nop_(); /CPU原地踏步sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);for(i=0;i1;sck=0;if(io)value=value|0x80;sck=1;rst=0;_nop_();sck=0;_nop_();sck=1;io=1;return value;void set_rtc() /设置时间uchar i,j;for(i=0;i7;i+) /转换BCD码j=time_datai/10;time_datai=time_datai%10;time_datai=time_datai+j*16;write_ds1302(0x8e,0x00); /去除写保护for(i=0;i7;i+)write_ds1302(write_addi,time_datai);write_ds1302(0x8e,0x80); /加写保护void read_rtc()uchar i;for(i=0;iwrite_date(0x3e);write_com(0x80+1);/写 write_date(0x3e);Enter_num=0;if(Select_num=2)LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table4);LCD_Display_String(2,table5);write_com(0x80+0x40+0);/写 write_date(0x3e);write_com(0x80+0x40+1);/写 write_date(0x3e);Enter_num=0;if(Select_num=3)LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table1);LCD_Display_String(2,table2);Select_num=0;Enter_num=0;Adjust=0;write_com(0x0c);/光标不再闪烁Enter_num=0;if(ENTER=0)delay1(2);if(ENTER=0)while(!ENTER);Enter_num+;if(Select_num=1)/设置实时时间if(Enter_num=1)LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table9);LCD_Display_String(2,table0);SetTime_dispaly(0x80+8,Year);SetTime_dispaly(0x80+11,Month);SetTime_dispaly(0x80+14,Day);SetTime_dispaly(0x80+0x40+6,Hour);SetTime_dispaly(0x80+0x40+9,Minute);SetTime_dispaly(0x80+0x40+12,Second);Week_dispaly(0x80+0x40+15,Week);write_com(0x80+8);/光标闪烁地址,停留在年的位置上write_com(0x0f);/光标闪烁if(Enter_num=2)write_com(0x80+11);/光标闪烁地址,停留在月的位置上write_com(0x0f);/光标闪烁if(Enter_num=3)write_com(0x80+14);/光标闪烁地址,停留在日的位置上write_com(0x0f);/光标闪烁if(Enter_num=4)write_com(0x80+0x40+6);/光标闪烁地址,停留在时的位置上write_com(0x0f);/光标闪烁if(Enter_num=5)write_com(0x80+0x40+9);/光标闪烁地址,停留在分的位置上write_com(0x0f);/光标闪烁if(Enter_num=6)write_com(0x80+0x40+12);/光标闪烁地址,停留在秒的位置上write_com(0x0f);/光标闪烁if(Enter_num=7)write_com(0x80+0x40+15);/光标闪烁地址,停留在星期的位置上write_com(0x0f);/光标闪烁if(Enter_num=8)Enter_num=0;write_com(0x0c);/光标不再闪烁LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table1);LCD_Display_String(2,table2);time_data0=Year;/10*16+Year%10;time_data1=Week;/10*16+Week%10;time_data2=Month;/10*16+Month%10;time_data3=Day;/10*16+Day%10;time_data4=Hour;/10*16+Hour%10;time_data5=Minute;/10*16+Minute%10;time_data6=Second;/10*16+Second%10;set_rtc(); /设置时间Select_num=0;Adjust=0;if(Select_num=2)/设置开关锁时间if(Enter_num=1)LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table6);LCD_Display_String(2,table7);SetTime_dispaly(0x80+0x40+4,Hour_L);SetTime_dispaly(0x80+0x40+7,Minute_L);SetTime_dispaly(0x80+0x40+10,Second_L);write_com(0x80+0x40+4);/光标闪烁地址,停留在时的位置上write_com(0x0f);/光标闪烁if(Enter_num=2)write_com(0x80+0x40+7);/光标闪烁地址,停留在分的位置上write_com(0x0f);/光标闪烁if(Enter_num=3)write_com(0x80+0x40+10);/光标闪烁地址,停留在秒的位置上write_com(0x0f);/光标闪烁if(Enter_num=4)write_com(0x0c);/光标不再闪烁LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table8);LCD_Display_String(2,table7);SetTime_dispaly(0x80+0x40+4,Hour_H);SetTime_dispaly(0x80+0x40+7,Minute_H);SetTime_dispaly(0x80+0x40+10,Second_H);write_com(0x80+0x40+4);/光标闪烁地址,停留在时的位置上write_com(0x0f);/光标闪烁if(Enter_num=5)write_com(0x80+0x40+7);/光标闪烁地址,停留在分的位置上write_com(0x0f);/光标闪烁if(Enter_num=6)write_com(0x80+0x40+10);/光标闪烁地址,停留在秒的位置上write_com(0x0f);/光标闪烁if(Enter_num=7)Enter_num=0;write_com(0x0c);/光标不再闪烁LCD_Clean(1);LCD_Clean(2);LCD_Display_String(1,table1);LCD_Display_String(2,table2);Select_num=0;Adjust=0;if(UP=0)delay1(2);if(UP=0)while(!UP);if(Select_num=1)if(Enter_num=1)Year+;if(Year99)Year=0;SetTime_dispaly(0x80+8,Year);write_com(0x80+8);write_com(0x0f);if(Enter_num=2)Month+;if(Month12)Month=1;SetTime_dispaly(0x80+11,Month);write_com(0x80+11);write_com(0x0f); if(Enter_num=3)Day+;if(Day31)Day=1;SetTime_dispaly(0x80+14,Day);write_com(0x80+14);write_com(0x0f);if(Enter_num=4)Hour+;if(Hour23)Hour=0;SetTime_dispaly(0x80+0x40+6,Hour);write_com(0x80+0x40+6);write_com(0x0f);if(Enter_num=5)Minute+;if(Minute59)Minute=0;SetTime_dispaly(0x80+0x40+9,Minute);write_com(0x80+0x40+9);write_com(0x0f);if(Enter_num=6)Second+;if(Second59)Second=0;SetTime_dispaly(0x80+0x40+12,Second);write_com(0x80+0x40+12);write_com(0x0f);if(Enter_num=7)Week+;if(Week7)Week=1;Week_dispaly(0x80+0x40+15,Week);write_com(0x80+0x40+15);write_com(0x0f);if(Select_num=2)if(Enter_num=1)Hour_L+;if(Hour_L23)Hour_L=0;SetTime_dispaly(0x80+0x40+4,Hour_L);write_com(0x80+0x40+4);write_com(0x0f);if(Enter_num=2)Minute_L+;if(Minute_L59)Minute_L=0;SetTime_dispaly(0x80+0x40+7,Minute_L);write_com(0x80+0x40+7);write_com(0x0f); if(Enter_num=3)Second_L+;if(Second_L59)Second_L=0;SetTime_dispaly(0x80+0x40+10,Second_L);write_com(0x80+0x40+10);write_com(0x0f);if(Enter_num=4)Hour_H+;if(Hour_H23)Hour_H=0;SetTime_dispaly(0x80+0x40+4,Hour_H);write_com(0x80+0x40+4);write_com(0x0f);if(Enter_num=5)Minute_H+;if(Minute_H59)Minute_H=0;SetTime_dispaly(0x80+0x40+7,Minute_H);write_com(0x80+0x40+7);write_com(0x0f); if(Enter_num=6)Second_H+;if(Second_H59)Second_H=0;SetTime_dispaly(0x80+0x40+10,Second_H);write_com(0x80+0x40+10);write_com(0x0f);if(DOWN=0)delay1(2);if(DOWN=0)while(!DOWN);if(Select_num=1)if(Enter_num=1)Year-;if(Year0)Year=99;SetTime_dispaly(0x80+8,Year);write_com(0x80+8);write_com(0x0f);if(Enter_num=2)Month-;if(Month1)Month=12;SetTime_dispaly(0x80+11,Month);write_c
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于单片机的教室照明智能控制器设计含5张CAD图
链接地址:https://www.renrendoc.com/paper/97011768.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!