基于单片机的照明控制系统设计与实现

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

第一章概述 (3)
1.1课题研究背景 (3)
1.2课题研究的目的与意义 (3)
第二章系统设计 (4)
2.1系统设计要点 (4)
2.2系统设计思路 (4)
第三章硬件电路设计与实现 (5)
3.1系统硬件总述 (5)
3.2CPU性能介绍 (5)
3.3LED数码显示的设计 (5)
第四章系统软件设计及实现 (6)
4.1系统仿真 (6)
4.2系统仿真软件的实现 (6)
4.3系统仿真电路的实现 (6)
第五章系统可靠性分析 (7)
总结 (8)
参考文献 (9)
致谢 (10)
附录一 (11)
附录二 (12)
附录三 (12)
前言
随着国民经济的快速发展和社会进步,教育在全社会愈加被关注和重视,校园规模也随着受教育者的数量增加而不断扩大,教室的数量也大幅度增加。

为使师生有舒适的教学和学习的环境,无论是教室的面积、设施和照度,校方在力所能及的范围内,都付出了十分的努力。

但由于学校开放型的管理模式,以及全员的节能意识的淡薄,高校的教室在白天室内照度很高的情况下,仍然普遍存在开灯作业;即使室内无人或人数很少的情况下,也是全部开启室内照明。

夜间许多教室,即使仅有几个学生在教室自习,但室内照明全部开启,绝不会有师生因为只有少数人而仅开几盏灯。

长明灯比比皆是,人走不熄灯的现象到处存在。

这种有形和无形的浪费,给校方的水电支出带来了沉重的负担。

学校的水电支出约占全校经费支出的1/4—1/5,电费支出占据较重比例。

其中主要能耗浪费较大的是:教室照明和空调的使用。

而教室照明的浪费源自予长明灯、白天亮灯、不合理使用照明以及旧灯管的不及时更换。

能源短缺是21世纪国际面临的新课题。

在寻找新的能源之外,节约能源,提高效益也就成为了我们研究的课题。

所以学校如何来节省电力能源也成为了一个迫切需要解决的问题。

从节约资源、对社会贡献、节省高校经费支出和学生的健康等多方面考虑,高校教室照明的节电问题不得不提到重要的议事日程上来。

单片机的出现至今已经有30多年的历史了。

微型计算机的迅速发展,促进微型计算机测量和控制技术的迅速发展和广泛应用,单片机(单片微型计算机)的应用已经渗透到广泛渗透到社会经济、军事、交通、通信等相关行业,而且也深入到家电、娱乐、艺术、社会文化等各个领域,并掀起了一场数字化技术革命。

单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。

因此一块芯片就构成了一台计算机。

它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。

本篇论文介绍了就是基于单片机AT89C51的室内灯光控制系统的研究和开发。

本系统是以单片机为控制器的核心,其中上位机和下位机都是以AT89C51为基础,再连接外围电路,通过现场总线RS485通信方式实现照明灯具的智能控制。

系统通过人体信号采集电路对人体信号采集和光信号采集电路对光信号采集以及相应的处理并输入给单片机,单片机对输入信号判断并输出信号来控制学校教室内灯光的开关和亮度。

第一章概述
1.1课题研究背景
随着计算机网络、通信、控制等技术的发展,智能建筑的发展越来越迅猛。

目前,国内大多数智能建筑存在效率低、能耗高的现象。

就智能建筑的照明系统来说,许多地方的灯经常是从早到晚开着的,不管这些房间或楼道是否有人,也不管有多少人。

或者,当自然光照度很好时,灯不能及时关闭;反之,当自然光照度难以满足人的需求时,又不能及时打开灯光。

这种照明方式,不仅造成能源的浪费,而且不能满足人对照明的基本需求,同时也给人的视力造成了很大的影响。

现代照明除了满足人的基本生活、学习要求之外,将更注重能量的节省和使用上的便利,以及满足人类工程学的个性方面的要求。

特别是近年来大厦内利用计算机工作的人员比例上升,不同视觉要求的工作的数量和复杂程度大大增加。

所以要做到合理、经济、节能,首先应采用先进成熟的技术和产品,如电光源、灯具、照明控制系统。

因此,适应不同个人和工作需要,结合自动调节与手动调节的智能化照明系统已经成为必不可少了。

而在大学校园的建设热潮中,各大高校和他们的建设者也意识到了智能照明的重要性。

相对商业楼宇而言,大学校园里的大功率动力和制冷设备比重较少,照明灯具则相对比重更多,所以控制教室照明是节能的关键。

使用照明控制系统,更能体现其在节能与管理方面的优势,提高学校的科学管理水平,而且还能节省开支。

1.2课题研究的目的与意义
随着国民经济的快速发展,高等教育越来越被政府关注和重视,校园规模也随着高等教育规模的扩大而扩大,教室的数量也大幅度增加。

为使师生有舒适的教学和学习的环境,在教室的面积、设施和照度方面,学校在力所能及的范围内予以最大的改善。

但由于大学开放型的管理模式,以及部分大学生的节能意识的淡薄,高校的教室在白天室内照度很高的情况下,仍然普遍存在开灯作业;夜间许多教室,即使仅有几个学生在教室自习,但室内照明设施全部开启;另外,长
明灯比比皆是,人走不熄灯的现象到处存在。

为了建设绿色节约型社会,本文设
计了一种智能照明控制系统,可以合理有效地利用照明灯光,从而大大地减少高
校照明能源浪费的现象。

目前,国内外研究开发的智能照明控制系统,按照网络的拓扑结构可以分为集中式或分布式。

集中式智能照明控制系统主要为星形拓扑,即以中央控制节点为中心,把若干外围节点连接起来的辐射式互连结构。

各照明控制器、控制面板等设备均连接到中央控制器(CPU)上,由中央控制器向照明控制器等末端执行单元传送数据包;分布式智能照明控制系统以中央监控为中心,组建控制主干网和多个控制子网,各照明控制器,控制面板等设备均具有中央处理器CPU单元,每个控制器和面板都可以直接连接在子网上。

第二章系统设计
2.1系统设计要点
系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。

硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。

硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。

硬件电路的设计最重要的选择用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统既经济又高性能。

硬件电路设计还包括输入输出接口设计,画出详细电路图,标出芯片的型号、器件参数值,根据电路图在仿真机上进行调试,发现设计不当及时修改,最终达到设计目的。

软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,达到所需功能要求。

软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用51系列单片机。

本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过调试后,达到设计功能要求。

2.2系统设计思路
系统的结构主要由六部分组成:(1)主控制器;(2)复位电路;(3)显示电路;(4)键盘电路;(5)照明部分;(6)晶振电路。

如图2.2所示,这六部分相互协作共同完成控制灯光,达到控制照明的目的,当前时间利用LCD显示,通过键盘可以修改时间。

并且在特定的时间里会点亮相应的灯,具体发挥部分如表2.2所示。

图2.1 系统结构
17:00 7:00 点亮2盏灯
18:00 6:00 点亮4盏灯
19:00 5:00 点亮6盏灯
20:00 4:00 点亮8盏灯
第三章硬件电路设计与实现
3.1 系统硬件总述
为使该模块化LED显示屏控制照明系统具有更加方便和灵活性,我们对系统的硬件做了精心设计。

硬件电路包括LED灯电路、显示电路、开关控制电路等三大模块。

整个照明系统有人为控制部分和自动控制部分,人为控制是靠一个开关来实现操作的,通过重复按压可以点亮更多的LED 灯,而自动控制是靠单片机控制的,我们把程序写入单片机后单片机的系统时间通过显示器显示出来,并且利用时间来控制灯的亮与灭,用单片机的P0口做灯光输出,P1口做显示输出,P2口做开关输入,即可完成硬件部分。

在含有控制器的电路系统中,都必须要有相应的复位电路,这样能够使系统在上电后,很好地复位系统并使系统处于稳定的运行状态。

一般简单的复位电路可以采用RC复位,这种电路的稳定性一般、可靠性较高。

3.2 CPU性能介绍
本系统采用了ATMEL公司MCS-51系列单片机中的AT89C51芯片,它是低压高性能CMOS 8位微处理器,带有4k字节Flash闪速存储器,128字节内部RAM,15个I/O口线,两个16位定时/计数器,—个5向量两级中断结构,一个全双工串行通信口。

3.3 LED数码显示的设计
数码显示与驱动电路由74LS138译码器、7447 TTL BCD-7段高有效译码器/驱动器、4个数码管以及5个A1015三极管组成。

由单片机的P0.0~P0.3口输出的四位BCD码,经7447芯片后,翻译成7段数码管a、b、c、d、e、f、g相应的段,并输出点亮数码管相应的段。

单片机的P0.4、P0.5口输出的信号经74LS138译码器后产生的高电平信号加在A1015三极管的基极,控制三极管的导通,从而起到对相应数码管的选通作用。

4个7段数码管都被接成共阳极方式。

第四章系统软件设计及实现
软件是计算机系统的灵魂,没有软件计算机不能充分发挥其功能,这是软件在计算机中的地位,而在计算机控制系统中,软件也是非常重要的。

在照明控制系统中,硬件设备的功能是由软件来定义的,如系统要控制分布的照明灯具,串行通信程序来完成控制功能,通过软件定义键盘功能,通过编程完成LED数码显示等等,由此可见,软件是控制系统中的一个重要组成部分。

4.1系统仿真
使用集成开发工具keil c51根据流程图编辑程序文件,并烧录进单片机。

Keil开发环境集成了C编译器、宏汇编、连接器、库管理,仿真器等工具,方便程序的调试开发,加开系统开发速度。

C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—,具有良好的可读性。

用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。

4.2 系统仿真软件的实现
系统仿真的软件部分用keil工具写C语言程序,这部分也是系统最为核心的部分,因为单片机控制系统主要靠下载到其内部的.HEX文件来实现我们所设计的功能,因此软件开发部分也显得非常重要。

我们利用keil工具开发系统软件完成后将开发软件转化为.HEX文件后就可以等待下载了。

4.3 系统仿真电路的实现
系统仿真电路部分的核心是89C51单片机,所有的电路部分都是通过单片机连成一个整体的,其中包括显示部分,输入键盘,控制灯,晶振电路以及复位电路。

单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。

高级的精度更高。

有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。

晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

单片机晶振的作用是为系统提供基本的时钟信号。

通常一个系统共用一个晶振,便于各部分保持同步。

有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。

在含有控制器的电路系统中,都必须要有相应的复位电路,这样能够使系统在上电后,很好地复位系统并使系统处于稳定的运行状态。

一般简单的复位电路可以采用RC复位,这种电路的稳定性一般、可靠性较高。

第五章系统可靠性分析
在实验室里设计的控制系统,在安装、调试后完全符合设计要求,但把系统置入现场后,系统常常不能正常稳定地工作。

产生这种情况的原因主要是现场环境复杂和各种各样的电磁干扰,所以单片机应用系统的可靠性设计、抗干扰技术变得越来越重要了。

工业现场环境中干扰是以脉冲产的形式进人单片机系统的,其主要的渠道有三条,即空干扰多发生在高电压、大电流、高频电磁场附近,并通过静电感应,电磁感应等方式侵入系统内部;供电系统干扰是由电源的噪声干扰引起的;过程通道干扰是干扰通过前向通道和后向通道进入系统的。

干扰一般沿各种线路侵入系统。

系统接地装置不可靠,也是产生干扰的重要原因;各类传感器,输人/输出线路的绝缘损坏均有可能引入干抚。

总结
本设计是基于AT89C51设计的照明控制器。

介绍了基于AT89C51的室内灯光控制系统及其原理,提出了有效的节能控制方法。

该系统采用了当今比较成熟的传感技术和计算机控制技术,利用多参数来实现对学校教室室内照明的控制。

系统设计包括硬件设计和软件设计两部分。

该照明控制系统的主控制器、分控制器分别是以AT89C51单片机为基础,实现了通信、控制与显示等功能。

文中详细地描述了控制电路的设计过程,包括:键盘与LED显示电路、RS485通信电路、照明灯控制电路以及看门狗电路等。

对于软件设计主要有主控制器、分控制器的有线通信程序设计以及灯光控制、定时控制、键盘扫描与LED显示等程序设计。

参考文献
【1】张友德著,单片微型计算机原理、应用与实验.复旦大学出版社
【2】徐煜明、韩雁著,单片机原理及接口技术.电子工业出版社
【3】何立民著,单片微型计算机原理及应用.航空航天大学出版社
【4】阳宪惠著, 现场总线技术及其应用. 清华大学出版社,1999
【5】高鹏著,PROTEL入门与提高.人民邮电出版社
【6】何立民著,单片机高级教程.北京航空航天大学出版社
【7】MCS-51/96系列单片机原理及应用.孙涵芳等著,北京航空航天大学出版社
【8】童诗白.模拟电子技术基础.高等教育出版社,1999
【9】何立民.单片机高级教程——应用与设计.北京航空航天大学出版社,2000
【10】李嗣福.计算机控制基础.中国科技大学出版社,2001
【11】孙雪梅,范久臣.实时时钟芯片在单片机系统中的应用.沈阳教育学院学报,2005.2.7 【12】余用权.ATMEL89系列单片机应用技术.北京航空航天大学出版社,2002
【13】黄丹辉,党向荣.微机测控系统中的接地系统设计。

工矿自动化,2002.4.20
【14】攀宇,程全.基于RS485总线实现的远距离多机主从式通信技术.工业控制机算机,2006.7.19
致谢
本课题在选题及研究过程中得到了张文丽老师的悉心指导,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。

张老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神给我留下了深刻的印象。

她不仅授我以文,而且教我做人,虽历时不长,却让我终生受益。

在此次毕业设计过程中,她渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。

同时,我也学到了许多关于室内灯光控制系统以及单片机的知识,实验技能有了很大的提高。

在此谨向张老师致以诚挚的谢意和崇高的敬意!
在实验过程中,首先通过主控制器上的键盘输入地址号,地址号是由数字组成的,在输入完毕后,然后按下确认键,信号经过网络传输后,分控制器将收到的地址进行比较确认后,然后执行下一步的程序。

经过实验的验证,在输入广播地址后,所有的分控制器都正确地执行了后续的命令,实现了灯泡的启停、亮度调节、定时关闭功能;在输入某个分机地址后,该分机也正常地执行了相应的命令,同样达到了所要求的功能。

软件部分的编制也是力求简单实用,即本着实用、有效、方便的原则进行编制。

但一个较好的和较完善的应用软件不是在短时间内就可以完成的,它需要不断的完善和发展,需要我们做大量的工作和时间的检验。

现在的系统还没有达到真正的智能化,还需要增加很多新的功能和先进的科学技术,才能达到真正意义上的智能化控制。

附录三
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint aa,b=0,num,sec,min,hour,date,month,year;
uchar LED[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0x00}; uchar string1[5]=" 20";
uchar string2[]="0123456789";//要显示的字符
uchar string3[4]=" ";
/******LCD1602管脚定义******/
sbit lcdrs=P2^2;
sbit lcdwr=P2^1;
sbit lcden=P2^3;
/******按键管脚定义********/
sbit k1=P3^2;//开关1,每按一次可点亮一个LED
sbit k2=P2^4;//选择需要调整的参数
sbit k3=P2^5;//增加数值
sbit k4=P2^6;//减小数值
sbit k5=P2^7;//确定
void init();//初始化程序
void write_com(uchar cmd);//写入指令
void write_data(uchar dat);//写入数据
void display();//显示函数
void delay(uint t);//延时ms函数
void init_time();//初始化时钟
void conv();//计时单元
void set_time();//时间设置
void inter_month();//闰月计算
void lighting();
uint hour=0,min=0,date=31,month=10,year=14; /****延时函数****/
void delay(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
/***LCD写入指令函数***/
void write_com(uchar cmd)
{
lcdrs=0;
lcdwr=0;
lcden=0;
P0=cmd;
delay(5);
lcden=1; /**********************/
delay(5); /*****给lcden高脉冲****/
lcden=0;
delay(5); /**********************/
// check();
}
/*****LCD写入数据函数*****/
void write_data(uchar dat)
{
lcdrs=1;
lcdwr=0;
lcden=0;
P0=dat;
delay(5);
lcden=1; /**********************/
delay(5); /*****给lcden高脉冲****/
lcden=0; /**********************/
// check();
}
/****显示函数****/
void display()
{
uint i;
write_com(0x80);//第一行起始位置
for(i=0;i<5;i++)
{
write_data(string1[i]);
delay(5);
}
write_data(string2[year/10]);//第6位
write_data(string2[year%10]);//显示年
write_data('-');
write_data(string2[month/10]);
write_data(string2[month%10]);//显示月write_data('-');
write_data(string2[date/10]);
write_data(string2[date%10]);//显示日
delay(1);
write_com(0xc0);//第二行起始位置
for(i=0;i<4;i++)
{
write_data(string3[i]);
delay(5);
}
write_data(string2[hour/10]);
write_data(string2[hour%10]);//显示时
write_data(':');
write_data(string2[min/10]);
write_data(string2[min%10]);//显示分
write_data(':');
write_data(string2[sec/10]);
write_data(string2[sec%10]);//显示秒
delay(1);
}
/***计时函数***/
void init_timer()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
IE=0x82;
TR0=1;
}
/***时间、日期计时单元***/
void conv()
{
if(sec==60)
{
min++;
sec=0;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
date++;
inter_month();
if(month==13)
{
year++;
month=1;
if(year==100) year=0;
}
}
}
}
}
/***各月份天数计算函数***/
void inter_month()
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: if(date==32)
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
} break;
case 2: if(year%4==0)
{
if(date==30)
{
date=1;
month++;
}
} //闰年二月29天
else if(date==29)
{
date=1;
month++;
}//平年二月28天
break;
default: break;
}
}
/***设置时间***/
void set_time()
{
if(k1==0)//监测k1
{
delay(1);//消抖
if(k1==0)
{ EA=1;
EX0=1;
}
}
if(k2==0)
{
delay(1);
if(k2==0)
{
num++; //记录按下的次数
switch(num) //光标定位
{
case 1: write_com(0xc0+11);
write_com(0x0d);
break;//定位到秒位
case 2: write_com(0xc0+8);break;//定位到分位
case 3: write_com(0xc0+5);break;//定位到时位
case 4: write_com(0x80+12);break;//定位到日期
case 5: write_com(0x80+9);break;//定位到月份
case 6: write_com(0x80+6);break;//定位到年位
case 7: num=0;write_com(0x0c);break;//关闭光标显示 }
}
}
if(num!=0) //只有当k2按下后,才监测k3和k4 {
if(k3==0) //增加
{
delay(10);
if(k3==0)
{
switch(num)
{
case 1: sec++;
if(sec==60)
sec=0;break;
case 2: min++;
if(min==60)
min=0;break;
case 3: hour++;
if(hour==24)
hour=0;break;
case 4: date++;
if(date==32)
date=1;break;
case 5: month++;
if(month==13)
month=1;break;
case 6: year++;
if(year==100)
year=0;break;
}
}
}
if(k4==0) //减小
{
delay(10);
if(k4==0)
{
switch(num)
{
case 1: sec--;
if(sec==-1)
sec=59;break;
case 2: min--;
if(min==-1)
min=59;break;
case 3: hour--;
if(hour==-1)
hour=23;break;
case 4: date--;
if(date==0)
date=31;break;
case 5: month--;
if(month==0)
month=12;break;
case 6: year--;
if(year==-1)
year=99;break;
}
}
}
}
}
/***定时点亮灯的个数***/
void lighting()
{
if(min==0&&hour==7||hour==17)
P1=LED[1];
else //P1=LED[8];
if(min==0&&hour==6||hour==18)
P1=LED[3];
else //P1=LED[8];
if(min==0&&hour==5||hour==19)
P1=LED[5];
else //P1=LED[8];
if(min==0&&hour==4||hour==20)
P1=LED[7];
else P1=LED[8];
}
/*****LCD初始化函数****/
void init()
{
lcden=0;
write_com(0x38);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x06);
delay(5);
write_com(0x01);
delay(5);
}
/***主函数***/
main ()
{
uint b=0;
init();
init_timer();
EA=1;
P1=0x00;
while(1)
{
set_time();
lighting();
display();
}
}
void Key_Down() interrupt 0 {
P1=LED[b];
b=(b+1)%9;
EX0=0;
}
/***定时器中断程序***/
void timer0() interrupt 1 {
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
aa++;
if(aa==20)
{
aa=0;
sec++;
conv();
}
}。

相关文档
最新文档