找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 45719|回复: 0
打印 上一主题 下一主题
收起左侧

基于STC89C52单片机的智能灯光设计论文

[复制链接]
跳转到指定楼层
楼主
ID:319867 发表于 2018-5-1 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目 录
第一章 前言
1.1 本课题的研究背景和意义
1.2 本课题研究的主要内容
1.3 本论文的主要内容及结构安排
第二章 系统设计
系统总体设计方案
2.1 系统硬件设计
2.2.1 主控板电路设计
2.2.2 STC89C52简介
2.2.3 检测模块的设计与选用
2.2.4继电器输出模块
2.2.5 nRF2401A无线射频模块
2.2.6 基于MAX232与PC通讯
2.3.1 遥控器的设计
2.3.2 显示屏LCD1602
2.3.3 时钟芯片DS1302
2.3.4 LM7805与AMS1084
2.3.5 按键指示电路及实现
2.4              硬件设计开发
2.4.1 开发环境protel99SE
2.4.2 电路板的制作
第三章 程序的设计实现
3.1 系统整体程序框架
3.2.1 主控板程序设计
3.2.2 灯光延时等待的设计与思考
3.3.1 遥控器程序设计
3.3.2 NRF2401A无线射频通讯的程序设计
3.3.2 LCD1602显示模块的程序设计
3.3.3 DS1302时钟芯片的设计
3.4软件设计开发
3.4.1 软件开发环境KeiluVision4简介
3.4.2 KEIL的使用
3.4.3单片机程序的烧写
第四章 调试结果
结束语

1 绪论

1.1 本课题的研究背景和意义
随着科技的发展,和人们的生活水平不断提高,居住环境的改善备受关注,于是家居智能化的快速兴起,满足人们对舒适,安全,便捷以及节能环保的时尚生活的追求。现阶段人类社会的进步越来越依赖于对能源的开发与利用,然而人们对能源无尽的需求量和有限的能源数量形成了不可抗拒的矛盾,能源匮乏不仅是我国所面临的危机,更是世界所面临的严峻考验。而中国是一个人口大国,家庭是其中最基本的一个组成单元,家庭照明占我国电能消耗的一大部分。管理好家庭灯光照明系统,不仅能减少电能的巨大浪费,优化我们的生活方式和居住环境,还能为我们提供优质、舒适、安全的生活空间。
灯光的智能化是智能家居的重要组成部分,本文介绍了一种基于单片机和无线射频技术的的智能灯光控制系统(增多)
1.2 本课题研究的主要内容
本设计所制作的智能灯光主要用来控制照明灯,通过检测室内有无人员和室内光线的强弱来控制照明灯的开启和关闭,以达到根据不同的环境,人们的不同需要实现室内不同位置的照明需求,并且可以通过遥控对室内的灯光进行控制,实现自动/手动切换,更加人性化的设计,让该系统有了更高的实用价值。
该设计主要由主控板和遥控器组成,其中:主控板包括单片机控制模块、检测输入模块、射频通讯模块、PC上位机监控模块、驱动电路模块、继电器输出模块。遥控器包括单片机控制模块、无线射频模块、键盘模块、显示器模块。通过测试,系统稳定,能够根据外界环境的变化自动进行开关的控制。由于单片机的I/O口资源丰富,可将后级扩展成多路自动开关,同时控制多路照明灯,使其应用于宾馆、学校、家庭等环境。所以该设计具有较广泛的应用前景。(合并)
1.3 论文的主要内容及结构安排
鉴于无线通讯与灯光智能系统的重要意义及单片机在该系统中的独特优势,本论文选择以单片机为核心,以红外感应与光强感应为被测量,开关按钮可切换状态,设计了智能灯光系统。不但实现了下位机对灯光的自动控制、实时监测与遥控器的通讯,还在此基础上实现了对时间的显示,操作系统的简便化,让系统更容易被用户使用。
论文结构安排如下:
第一章:智能灯光系统的普遍性性与研究现状,以及论文的主要内容与结构。
第二章:总体设计方案与硬件设计,其中包括主控板和遥控器的设计。
第三章:主控板和遥控器的程序设计。
第四章:调试结果。


2 方案设计
图2-1 系统总体设计方案
系统总体设计方案
如图2-1所示,单片机选用STC89C52,通过光强检测模块检测出外界光强,是否合适开灯,由红外检测模块检测是否有人进入房间,通过主控板的单片机进行控制。在主控板上有状态转换按键,通过按键控制各个房间的状态,是强制开/强制关/自动状态。主控板通过无线射频模块与遥控器通讯,给遥控器传送各个房间的状态信息,并且接收遥控器发来的控制信号。在遥控器上,把接收来的状态信号,将其通过LCD1602显示屏显示出来。用户在不去该房间的情况下监控房间灯光的状态,并且通过遥控器上的键盘进行控制。时钟模块将当前时间发送给单片机,单片机再通过程序控制,将时间显示在显示屏上。
2.1 系统硬件设计
单片机选用的是STC89C52,光强检测模块采用光敏电阻实现,红外检测模块采用HC-SR501 人体红外感应模块,RS232通讯模块采用MAX232对信号转换,无线射频模块采用nRF2401A模块,显示屏使用LCD1602,时钟芯片使用DS1302,键盘使用可复位按键开关。

2.2.1 主控板电路设计
电路设计我用的是protel99绘制。由于光强检测和红外检测需要较大的空间,我将单片机P1口都接出来了外部接口,将其制作成方便安装的分离模块式。P0口主要功能是与nRF2401A无线射频模块相连。P2口我将其分成三部分P2.0,P2.1,P2.2三个管脚我用它们作为继电器输出接口;P2.3,P2.4,P0.7作为各个房间的自动状态指示灯;P2.5,P2.6,P2.7采集主控板上按键信号,用于转换各个房间的控制状态。TXD和RXD两个管脚分别接MAX232芯片的R1_OUT和T1_IN位,作为单片机与PC通讯的接口。电路原理图如图2-2所示。

图2-2  主控板总原理图
2.2.2 STC89C52简介
STC89C52是一种低功耗、高性能、价格低廉的CMOS8位微控制器,具有 8K 在系统可编程Flash 储存器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。其引脚图如图2-3所示。                                                                                                 图2-3 STC89C52单片机
2.2.3 检测模块的设计与选用
1)光强检测模块
光强检测模块采用的是光敏电阻5516,其亮电阻约5KΩ,暗电阻约500KΩ。将其与电阻串联,与三极管9014组成光强检测模块,工作电压为5V(如图2-4所示)。在光照下,其阻值迅速下降,三极管9014的基极电压升高,三极管导通,输出信号由高变低。当光照强度变暗后,光敏电阻的阻值升高,三极管基极电压降低, 图2-4 光强检测模块电路
三级管截止,光强检测信号由低变高。

2)红外检测模块
红外检测模块采用封装好的红外热释传感器HC-SR501(图2-5),感应范围138°*125°,感应距离7m,工作温度-15~+70℃。通过跳线将其触发模式调成可重复收发模式,接入工作电压+5V,将其信号端接入单片机端口。                                                       图2-5 红外传感器
2.2.4继电器输出模块
该系统采用的继电器为24V继电器,需要使用ULN2003将单片机输出的5V电压信号放大到24V驱动继电器工作。由于STC89C52单片机一般用并口进行编程,理论上可以直接用单片机的几根I/O口接并口线,但如果电路板没做好,可能会连带把计算机并口烧坏,所以要加个74HC244芯片隔离一下。(如图2-7所示)
ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成(图2-6)。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。由于ULN2003是一个非门电路,继电器线圈另一端接在+24V电源上,当+5V的控制信号传送到ULN2003中,                                                        图2-6 ULN2003                                         ULN2003会输出一个低电平,让线圈吸合。
74HC244是一个三态缓冲器,作为单片机输出缓冲作用。可以将单片机输出信号长时间保持。
图2-7 继电器输出模块电路图

2.2.5 nRF2401A无线射频模块
作为主控板与遥控器通讯的重要组成枢纽,无线射频模块,该系统选用的是nRF2401A无线射频模块,如图2-8所示。nRF2401A是挪威Nordic公司推出的2.4G单片无线射频收发芯片,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。该芯片具有接收灵敏度高、外围电路少、发射功率低、传输速率高、低功耗等优点。nRF2401 适用于多种无线通信的场合,如:无线鼠标、无心数据采集、小型无线网络、无线抄表、门禁系统、小区传呼、监控系统、非接触RF智能卡、无线遥控、无线音频/视频数据传输等。
图2-8 nRF2401A引脚示意图
nFR2401A引脚功能如表2-1所示:
表2-1 NRF2401A引脚功能表
引脚
名称
引脚功能
描述
1
VCC
电源
电源正极
2
VCC
电源
电源正极
3
GND
电源
电源地
4
PWR_UP
数字输入
芯片激活端
5
CE
数字输入
使nFR2401A工作于接收或发送状态
6
DR2
数字输入
频道2接收数据准备好
7
GND
电源
电源地
8
CLK2
数字I/O
频道2接收数据时钟输入/输出
9
GND
电源
电源地
10
DOUT2
数字输出
频道2接收数据
11
CS
数字输入
配置模式的片选端
12
DR1
数字输入
频道1接收数据准备好
13
GND
电源
电源地
14
CLK1
数字I/O
频道2接收数据时钟输入/输出
15
GND
电源
电源地
16
DATA
数字I/O
频道1接收/发送数据端

nFR2401A的工作模式有配置模式、收发模式、待机模式、关机模式四种。模式由主控芯片通过软件设置。芯片上电后,STC89C52通过接口将配置数据送入芯片,设置收发模式、收发频率、接收地址、发射功率、CRC校验和的长度、有效数据的长度等。传输中,只有地址,校验和匹配的数据包才能被进一步处理,产生中断信号。这时,S3C2440读取数据。在同一时刻nRF2401A只能处于接收或发送模式中的一种,一般以接收模式为待机状态。
工作模式
PWR_UP
CE
CS
收发模式
1
1
0
配置模式
1
0
1
空闲模式
1
0
0
关机模式
0
X
X

nRF2401A工作模式如表2-2所示:
                            表2-2 nRF2401A工作模式                                                       该系统是用的是通道一,所以单片机接口只需接入PWR_UP,CE,CS,CLK1四个控制位和数据位DATA1。同时将CLK2第二通道的脉冲输入信号接地,以防干扰。
nRF2401A工作电压为+3.3V而单片机使用的是+5V的直流电源,所以使用AMS1084-3.3V降压芯片将+5V的直流电转换成+3.3V的直流电为nRF2401A供电。其外围电路如图2-9所示。
                                                                                                                                                                                                                                                                                                                                                                                                

图2-9 AMS1088-3.3V外围电路                                                                                           图2-10 MAX232




2.2.6 基于MAX232与PC通讯
MAX232是一种把电脑的串行口rs232信号电平(-10 ,+10v)转换为单片机所用到的TTL信号点平(0 ,+5)的芯片, 使用+5v单电源供电,MAX232共16跟引脚,第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、
12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。其接线电路如图2-10所示。                                                                                                                             图2-11 MAX232周边电路
在该系统中,MAX232分别连接着RS232串口和单片机的TXD,RXD位,使用的是通道1,即使用的输入输出的管脚是T1_OUT,T1_IN,R1_OUT,R1_IN。周边电路如图2-11所示。                                                                                                                                                                     
2.3.1 遥控器的设计
在遥控器的设计中,P0口外接一个排阻,排阻公共端接的是AMS1084-3.3V输出的+3.3V电源,主要控制nRF2401A无线射频模块,负责与主控板进行无线通讯;P1口连接的是LCD1602显示屏的8位数据位DB0-DB7,P3.4接LCD的E端(使能端),P3.5接LCD1602的R/W管脚,负责控制LCD1602的读写控制,P3.6接LCD1602的RS管脚,负责对寄存器的选择。同时,LCD1602的VSS位接地,VDD接LM7805提供的+5V电源。并且VEE外接一个电位器,控制背光亮度。单片机的P2.1-P2.4分别接了四个低电平触发的按键,作为UP上翻,DOWN下翻,SWITCH切换,BACKLIGHT背光。P2.5-P2.7三位分别接入时钟芯片DS1302的SLCK,I/O,CE,作为读写时间的控制位和数据通道。同时单片机的TXD,RXD与MAX232相连,通过RS232串口与计算机通讯。总电路原理图如图2-12所示。
图2-12 遥控器总电路原理图
2.3.2 显示屏LCD1602
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。
LCD1602功能管脚如表2-3所示:
表2-3 LCD1602功能管脚
第1脚
VSS接电源地。
第2脚
VCC接+5V
第3脚
VEE背光对比度调整端
第4脚
RS寄存器选择端
第5脚
RW读写信号线
第6脚
E 使能端
第7~14脚
D0~D7八位双向数据线
第15-16脚
15脚背光正极,16脚背光负极
在设计中,我们将VCC和VSS分别接电源+5V和地,为LCD1602供电,在VEE端接了一个20K的变阻器到+5V电源,通过调整变阻器的阻值来调整LCD1602的对比度,当电压越高时对比度越弱,反之越强。RS寄存器选择端,RW读写信号线,E使能端这三位分别接入单片机的P3.6,P3.5,P3.4。通过程序控制这三位控制位对LCD1602的读写操作。15脚和16脚主要是为LCD1602的背光供电,将其分别接入电源+5V和电源地。
2.3.3 时钟芯片DS1302
DS1302 是美国DALLAS公司推出地一种高性能、低功耗、带RAM的实时时钟电路,它能对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能。工作电压为2.5V~5.5V,外接32.768MHz的晶振。采用三线接口与单片机进行同步通信,并可采用突发方式,一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的RAM寄存器,用于临时性存放数据。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
DS1302功能引脚如表2-4所示:
表2-4 DS1302管脚功能
管脚号
管脚名称
描述
1
VCC2
主电源,使用+5V供电
2
XLAT1
32.768MHz晶振接口
3
XLAT2
同上
4
GND
电源地
5
CE
复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
6
I/O
串行数据输入输出端(双向)。
7
SCLK
时钟输入端
8
VCC1
备用电源正极,可采用大电容或者电池供电。
在该系统中,VCC2用LM7805提供的+5V电压供电,VCC1备用电源使用的是纽扣电池CR2016,提供的电压是+3V。I/O管脚接单片机的P2.6脚,作为单片机对DS1302进行读写操作的数据通道,SCLK接入单片机P2.5口,作为单片机与DS1302的通讯时钟输入端,CE接入单片机P2.7口主要对DS1302发送片选信号。
2.3.4 LM7805与AMS1084
1)LM7805应用
图2-13 LM7805典型应用电路
单片机电源电路的设计以三端集成稳压器LM7805为核心,它属于串联稳压电路,其工作原理与分立元件的串联稳压电源相同。图2-13是三端稳压集成电路LM7805的典型应用电路,三端集成稳压器设置的启动电路,在稳压电源启动后处于正常状态时,启动电路与稳压电源内部其他电路脱离联系,这样输入电压变化不直接影响基准电路和恒流源电路,保持输出电压的稳定。电路中Ci的作用是消除输入连线较长时其电感效应引起的自激振荡,减小纹波电压,取值范围在0.1μF~1μF之间,本文Ci选用0.33μF;在输出端接电容Co是用于消除电路高频噪声,改善负载的瞬态响应,一般取0.1μF左右,本文Co即选用0.1μF。一般电容的耐压应高于电源的输入电压和输出电压。另外,为避免输入端断开时Co从稳压器输出端向稳压器放电,造成稳压器的损坏,在稳压器的输入端和输出端之间跨接一个二极管,对LM7805起保护作用。
LM7805输入电压为8V到36V,最大工作电流1.5A,具有输入电压范围宽,工作电流大,输出精度高且工作及其稳定,外围电路简单等特点,太阳能电池电压即使有较大的波动,也能稳定的输出5V电压,从而是单片机等控制电路正常工作,且成本低。
2)AMS1084
由于单片机、LCD、DS1302使用电压为+5V直流电,而NRF2401A射频使用电压为+3.3V~+3.6V,所以需要将5V的直流电变压成3.3V为NRF2401A射频芯片供电,其接线图如图2-14所示
图2-14 AMS1084-3.3V外部接线图


2.3.5 按键指示电路及实现
在单片机应用系统中,按键主要有两种形式:1、独立按键;2、矩阵编码键盘。独立按键的每个按键都单独接到单片机的一个I/O口上,独立按键则通过判断按键端口的电位即可识别按键操作;而矩阵键盘通过行列交叉按键编码进行识别。
通常所用的按键为轻触机械开关,正常情况下按键的接点是断开的,当我们按压按钮时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而机械触点在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性及操作人员按键动作决定,一般为5ms~20ms;按键稳定闭合时间的长短是由操作人员的按键按压时间长短决定的,一般为零点几秒至数秒不等。
在本设计中由于按键不是太多,故采用独立按键法,这样可以减小编程的难度,图2-15为本设计的按键接线图。
图2-15 按键接线图



    •              硬件电路板制作
2.4.1 开发环境protel99SE
开发硬件设计主要使用的是protel 99软件如图15所示,protel是Altium公司在80年代末推出的EDA软件,在电子行业的CAD软件中,它当之无愧地排在众多EDA软件的前面,是电子设计者的首选软件,它较早就在国内开始使用,在国内的普及率也最高,有些高校的电子专业还专门开设了课程来学习它,几乎所有的电子公司都要用到它,许多大公司在招聘电子设计人才时在其条件栏上常会写着要求会使用protel。
Protel99 SE共分5个模块,分别是原理图设计、PCB设计(包含信号完整性分析)、自动布线器、原理图混合信号仿真、PLD设计。
图2-16 protel工作空间界面
首先进入protel新建一个工程,在菜单栏中的file→new,然后选择路径和设定工程名称,单机OK,这样就成功的新建了一个工程。在右边会出现工作空间,单机右键→new→选择Schematic Document,这样就新建了一个电气原理图(如图2-16),修改原理图名称,然后进入原理图,绘制需要的电气图。
在原理图绘制完毕后,对每个元件选择相应的封装,接着在菜单栏里的design菜单中选择Update to PCB,protel会自动在工作空间中生成与原理图同名的PCB图,并且在PCB中标记有飞线,这样会方便布线,分布号元器件位置,设置好线宽,焊盘等设置,即可开始绘图。如图2-17所示。
图2-17 PCB图形绘制
2.4.2 电路板的制作
绘制完毕PCB图后,将其打印在转印纸上,将其覆盖在擦洗打磨干净的覆铜板上,平整的固定住,与其一起在快速制版机中加热。注意,温度过高可能会使覆铜板铜皮翘起,温度太低会使碳粉吸附不牢固。转印好铜板后,将转印好的铜板放入氯化铁溶液中浸泡腐蚀,将没有覆盖碳粉的部分腐蚀掉,待腐蚀完毕后,用细砂纸将电路上的碳粉打磨掉露出同色的铜皮即可。使用0.5mm的钻头在焊盘上打孔,并且对照着PCB图焊接好对应的元器件,经过万用表测试无断线无短路即可上电使用。成果如图2-18所示。
图2-18 焊接完毕的电路板


第三章 程序的设计实现
3.1 系统整体程序框架
本设计整体工作主要由单片机程序控制实现,其工作过程为:电路启动初始化,电路功能选择,通讯握手,读取信号,显示信号,输出选择并确定输出,单片机采集外部光强和红外信号等,程序整体框架如图3-1所示。

图3-1 程序整体框架图

3.2主控板程序设计
本设计流程框图如图3-2所示。首先上电,对各个模块进行初始化,然后检测各个房间的灯光状态(自动状态,强制开,强制关),将状态写给NRF2401A射频芯片的缓存区,并将其发射给遥控器。再进行对各个状态的处理,强制开状态则将该房间对应的管脚置1;反之,强制关则将对应房间的管脚清零。继电器输出模块会通过管脚电平变化改变继电器线圈电流,控制线圈吸合或者断开,从而控制房间灯光的开关。如果是自动状态,则通过光强传感器、红外传感器判断房间是否应该开灯。当外部亮度足够亮,则不需要开灯;若外部亮度较暗,则通过红外传感器检测是否有37℃的红外频率出现,当有人被红外传感器检测到,红外传感器信号位跳变为高电平,单片机相应管脚接收到该信号会进行处理,控制对应房间的管脚变为高电平。
图3-2 主控板程序流程图
3.2.1 灯光延时等待的设计与思考
考虑到在家居时,很多人会暂时离开一下某件屋子,然后会回来,这样使灯具频繁的开关可能会导致灯具的损坏,所以设计了一套灯光延时等待程序,为了节省MCU的占用率,该段程序使用的是内部定时器进行计时,这样可以再执行其他程序的同时进行延时。
通过TMOD将单片机内部定时器0与定时器1的工作方式选方式一。TMOD状态字如表3-1所示
表3-1 TMOD状态字
D7
D6
D5
D4
D3
D2
D1
D0
GATE
C/~T
M1
M0
GATE
C/~T
M1
M0
定时器/计数器1
定时器/计数器0


计算出计时器每次计时时间,并对TH1,TL1,TH0,TL0进行赋值。计算公式如3-2式。
T=(65536-X)TCY                                                                                                                                                                       (3-2)
在式3-2中T为定时器定时时间,X为寄存器存储值,将其高八位写入TH中低八位写入TL中;TCY为一个指令周期,TCY与晶振频率f有关,TCY =12/f。
由于每次计时器计时长度有限约10ms(方便计算),不能达到系统要求,在使用时,设定了一个时间次数变量TIME,让其循环100次即可延时1S,如需时间改变,改变TIME值即可。定时器的调用步骤如图3-3所示。
图3-3 定时器调用框图
鉴于本设计有多个房间(多于两个)而单片机中仅有两个定时器,所以在每次调用定时器时都会有一个对定时器选择的程序。当需要使用定时器时,先进行判定,定时器0是否被其他房间所占用,若没有被占用则使用定时器0,若被占用了,则使用定时器1 。若定时器0与定时器1同时被占用,则调用手动编写的延时定时器程序,由于该程序段比较占用单片机,会影响到系统整体的运行速度,所及将其优先级放在最后。

3.3.1 遥控器程序设计

遥控器主要包含的模块有LCD1602显示器,DS1302时钟芯片,NRF2401A射频模块,还有按键部分。主要设计思路如下,首先上电对各个模块初始化,读取DS1302中的时间数据,同时让LCD液晶显示屏显示时间与房间,接着通过NRF2401A向主控板发送信号,要求返回各个房间的状态,并将其写入LCE液晶显示屏上。然后扫描键盘,判断是否有房间状态需要改变,若有键盘按下,则将按键信号通过NRF2401A射频发送到主控板中,主控板接收到信号后改变房间状体,同时返回当前房间状态,让遥控板上的LCD作出相应的显示。其流程框图如图3-4所示。
图3-4 遥控器工作流程图

3.3.2 NRF2401A无线射频通讯的程序设计
1初始化程序
初始化函数:              void  n1A_Init_Dev()
程序包括端口初始化和向芯片写控制字操作,初始化流程如图3-2所示。
图3-5 NRF2401A初始化框图
NRF2401A的工作模式如表3-2所示:
表3-2 NRF2401A工作模式
工作模式
PWR_UP
CE
CS
收发模式
1
1
0
配置模式
1
0
1
空闲模式
1
0
0
关机模式
0
X
X

对nRF2401A的初始化包括nRF2401A上电和向nRF2401A写控制字。nRF2401A上电是将芯片的PWR-UP管脚设置为高电平,上电以后才可以对nRF2401A进行控制和读写操作。nRF2401A共有18Byte(144bit)的命令字。其配置字格式如表3-3所示。
表3-3 配置字格式
位(bit)
位数
名字
功能
111~104
8
DATA1_W
通道1有效数据长度
63~24
0
ADDR1
通道1地址
23~18
6
ADDR_W
通道1地址长度
17
1
CRC_L
8或6位CRC,0是8位,1是16位
16
1
CRC_EN
CRC使能位
14
1
CM
1是ShockBurstTM模式
12~10
3
XO_F
晶振频率选择
9~8
2
RF_PWR
发射功率
7~1
7
RF_CH#
信道频率
0
1
RXEN
0使能发射,1使能接收

向nRF2401A写控制字操作时序图3-6所示。

图3-6 向nRF2401A写命令字时序图
PWR-UP为高,, CE为低时,置位CS,芯片处于命令字写入状态,通过通道1向芯片的控制字缓冲区写入命令字,按照由高位到低位的顺序,命令字全部写入后,将CS置底,nRF2401A芯片将会根据命令字配置相应的内部模块。在第一次配置操作结束后,只有最后两个字节的命令字可以被更改,前16个字节的修改无效,如果需要修改前16个字节的命令字(如果通道接收地址,接收数据长度等),则需要掉电(PWR-UP置低)后重新上电(PWR-UP置高),才能对芯片进行彻底初始化操作。
2数据发送程序
nRF2401A采用ShockBurstTM(突发模式)方式发送数据。单片机向nRF2401A发送数据流程图3-4所示。
图3-7 单片机向nRF2401A发送数据流程



单片机向nRF2401A发送数据的时序如图3-8所示。

图3-8 单片机向nRF2401A发送数据时序图
图3-9 单片机向nRF2401A发送数据格式
An~A0为接收机地址,不超过40位,通过更换地址,可以向多个nRF2401A模块发送数据;Dk~D0为待发送的数据。以上数据由单片机发送到nRF2401A之后,nRF2401A将会进行打包并发射,打包后的数据格式如图3-10所示。
前缓冲
地址
有效数据
循环冗余校验

图3-10 nRF2401A对外发送数据的打包格式
其中,前缓冲是硬件自动添加,地址由用户设定。为32-40位;循环冗余校验由内置CRC纠检错硬件电路自动添加。可设为O、8或6位。所有的数据总共长度为256位。
3据接收程序
当接收端成功接收到数据后,将会置位对应的管脚数据请求DR1/DR2,单片机通过按键查询该管脚状态,或者通过中断方式接受数据。数据接收流程如图3-11所示。
图3-11单片机读取数据流程

单片机从nRF20401A读取数据的时序如图3-12所示。

图3-12 单片机从nRF2401A读取数据时序图

3.3.2 LCD1602显示模块的程序设计
              四种基本操作
LCD有四种基本操作,具体如表3-4所示。
表3-4 LCD与单片机之间有四种基本操作
RS
R/W
操作
0
0
写命令操作(初始化,光标定位等)
0
1
读状态操作(读忙标志位)
1
0
写数据操作(要显示内容)
1
1
读数据操作(可以把显示存储区中的数据反读出来)

(1)读状态操作
执行读状态字操作如表3-4所示,须满足RS=0、R/W=1。根据管脚功能,当为有效电平时,状态命令字可从LCD模块传输到数据总线。同时可以保持一段时间,从而实现读状态字的功能。图2-8所示为读入状态字流程图。
图3-13 LCD读入状态字流程
(2)写命令操作
由表3-4可知当RS=0,R/W=0时,才可以通过单片机或用户指令把数据即命令,写到LCD模块,此时就对LCD进行调制。可采用查询方式:先读入状态字,再判断忙标志,最后写命令字。
1)命令字
表3-5所示为命令字,其主要介绍了指令名称、控制信号及控制代码。其指令名称是指要实现的功能,控制代号是采用的十六进制的数值表示的。
a.清零操作是指输入某命令字后即能将整个屏幕显示的内容全部清除;
b.归home位:将光标送到初始位;其中的*号为任意,高低电平均可;
c.输入方式:设光标移动方向并指定整体显示,是否移动。I/D=0:减量方式,S=1:移位,S=0:不移位;
d.显示状态:D指设置整体显示开关;C指设置光标显示开关;B指设置光标的字符闪耀;
e.光标画面滚动:R/L指右移或左移;S/C指移动总体或光标;
f.功能设置:DL接口数位,L指显示行数,F显示字型;
g.CGRAM地址设制:相当于一个数据库,可以在其中选择所需要的符号;
h.DDRAM地址设制:显示定位;
i.读BF和AC:B为最高位忙的标志,F为标志位;
j.写数据:将数据按要求写入到对应的单元;
k.读数据:读相应单元内的数据。


表3-5 命令字
指令名称
控制信号
控制代码
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
清屏
0
0
0
0
0
0
0
0
0
1
归HOME位
0
0
0
0
0
0
0
0
1
*
输入方式设制
0
0
0
0
0
0
0
1
I/D
S
显示状态设制
0
0
0
0
0
0
1
D
C
B
无标画面滚动
0
0
0
0
0
1
S/C
RL
*
*
功能设置
0
0
0
0
1
DL
N
F
*
*
CGRAM地址设制
0
0
0
1
A5
A4
A3
A2
A1
A0
DDRAM地址设制
0
0
1
A6
A5
A4
A3
A2
A1
A0
读BF和AC
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
写数据
1
0
数 据
读数据
1
1
数 据


2)写命令字流程(如图3-14所示)
图3-14 LCD1602写命令字流程图
3)定义光标位置
把显示数据要某个位置,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。Set DDRAM address命令如表3-6所示。光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式设置。
表3-6 SetDDRAMaddress命令
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
AC6
AC5
AC4
AC3
AC2
AC1
AC0



              第1行DDRAM地址与第2行DDRAM地址并不连续。如表3-7所示。
表3-7 DDRAM地址
row
1
2
3
4
5
14
15
16
line1
80H
81H
82H
83H
84H
8dH
8eH
8fH
line2
0c0H
0c1H
0c2H
0c3H
0c4H
0cdH
0ceH
0cfH

4)LCD初始化
从通电开始通过延时,先经过判忙后再进行功能设置,过一段时间后可以设制显示状态(如设置行、位或阵列)再经过延时后清屏后再可以设置输入方式,具体如图3-15所示。
图3-15 LCD初始化流程
LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,LCD就可以按输入的字符串显示。

3.3.3 DS1302时钟芯片的设计
1)DS1302的控制字
DS1302的控制字节如表3-8所示:
表3-8 命令字节格式
7
6
5
4
3
2
1
0
1
RAM
A4
A3
A2
A1
A0
RD
CK
WR

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
  2)DS1302的数据输入输出
在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7,数据读写时序如图3-16所示:
图3-16 数据读写时序
3) DS1302的寄存器
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表2。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。 DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H--FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
表3-9   DS1302的日历、时钟寄存器及其控制字
寄存器名
命令字
取值范围
各位内容
写操作
读操作
7
6
5
4
3
2
1
0
秒寄存器
80H
81H
00--59
CH
10SEC
SEC
分寄存器
82H
83H
00--59
0
10MIN
MIN
时寄存器
84H
85H
01-12或00-23
12/24
0
10
HR
HR
日寄存器
86H
87H
01-28,29,30,31
0
0
10DATE
DATE
月寄存器
88H
89H
01--12
0
0
0
10M
MONTH
周寄存器
8AH
8BH
01--07
0
0
0
0
0
DAY
年寄存器
8CH
8DH
00--99
10YEAR
YEAR

1


因为使用了时钟芯片DS1302,时间程序只需从DS1302各寄存器中读出时、分、秒等数据,再处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读出数据,由于在DS1302的硬件设计中配置有备用电源所以除了第一次使用后面即使断电也不对其进行初始化。将读出的数据经过处理后,变成分离的个位十位的BCD码,送给显示缓冲单元。时间程序流程图见图3-17所示。
图3-17 时间程序流程图

3.4软件设计开发
3.4.1 软件开发环境KeiluVision4简介
KeiluVision4是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision4的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision4 IDE可为它们提供单一而灵活的开发环境。
3.4.2 KEIL的使用
首先在需要使用keil建立一个新的工程,在菜单栏里的PROJECT→NEW uVision Project,为其命名点击OK即完成创建工程。在弹出窗口中选择使用的芯片类型,该系统使用的是52系列,由于KeiluVision4中没有STC单片机,所以使用AT89C52代替。建立完成后,左边的工作栏会如图3-18所示。
图3-18 keil工作空间                                                                                       图3-19 添加C文件
接着新建一个文本文件,将其保存在该工程目录下,后缀名为.C。在其中输入编写的C程序源代码。在左边的工作空间中的群组图标上单击鼠标右键,选择“Add files to group …”找到先前编写的C程序如图3-19所示,将其添加入工程。之后对工程编译,链接,生成HEX文件。
3.4.3单片机程序的烧写
使用STC通用下载器STC_ISP如图3-20,首先将主板或者开发板的RS232接口链接PC,关闭主板电源,在STC下载器中,选择单片机型号为STC89C52,单击打开程序文件按钮,选择编译连接生成的HEX文件。下一步选择COM口,选择主板链接的COM端口,设置好波特率,单击下载按钮,等到提示框显示“请给MCU上电”时打开主板电源,为单片机供电,如果通讯成功,则会显示正在下载,下载成功等字样。
图3-20 STC_ISP下载器界面
第四章 运行调试
先将主控板接好各个模块,测试在不通讯的情况下,是否可以正常运行达到自动开灯关灯,强制开强制关的实现,离开延时等功能。经调试,最终能正常工作,实现在自动状态下,检测光强,判断开灯条件,检测红外,自动开灯以及人走延时的功能。如图4-1所示。
图4-1 灯光调试
下一步则是调试射频通讯,在调试好主控板的条件下,将射频通讯的程序加载进主程序,尝试用遥控板上的按钮遥控控制主控板的各个房间的状态。经修改上电,最终成功通讯。然后调试LCD1602液晶屏,先将LCD1602的子程序加载,尝试写一些固定的字符,成功显示之后,即可调试DS1302,将DS1302的时间写入显示缓存,让LCD将时间显示出来。如图4-2所示。
图4-2 LCD与DS1302调试
当各个部分都调试成功后,将其组合,把遥控板的射频通讯返回的房间状态显示在显示屏上,并且可以实时监测。

结束语
本智能灯光照明系统的设计分为硬件电路设计和程序设计两个部分,硬件电路设计属于前期的主要工作,通过方案论证与可行性分析,最终确定由89C52单片机完成主电路的控制与设计,并展开外围电路与控制硬件电路设计,硬件电路的设计主要是电路原理图的绘制以及参数的确定。
软件的设计采用模块化的程序设计方法,在主控板中分为主程序部分、按键采集模块、NRF2401A射频通讯模块、按键扫描模块等;在遥控器中分为主程序模块,DS1302时钟模块,LCD1602显示模块,NRF2401A射频通讯模块。程序的设计既参考了一些资料里的内容,也有相当多的自我设计,比如说DS1302时钟读写程序,就是参考了网友提供的实时读取的实现的方法,但主程序中主要构架,自动手动状态切换,反馈房间状态等等都是自己的、设计,因为这些东西涉及到具体硬件电路,是找不到相关资料的,在数据传输中有简单的单字节算法,也有双字节的,有的则采用巧妙的算法有效避免出现双字节,从而使程序设计变得简单。
对于本设计,如果进行进一步的的研究,我认为应该在以下两个个方面重点考虑:
(1)在硬件方面,可以尝试制作双面板这样可以大大节省空间,缩小电路板的体积。
(2)在系统设计中尝试制作与PC的实时通讯,连接入internet,从而可以进行超远程控制。


致谢
经过几个月的努力,在指导老师的帮助下,终于完成了智能灯光照明系统的设计和调试。从确定设计题目的那天开始,指导老师就开始不断地给我提供帮助,从最初的方案确定,到元器件的选择,电路的修改和调试,程序的编写和修改,以及论文的制作等等,很多都是涉及到细节的问题;正是由于指导老师无私帮助,我才得以完成设计,指导老师自己也是很忙的,他带有很多实验课,每次与指导老师见面几乎都是在实验室,可想而知指导老师对我的关心,在做毕业设计的同时也是一个学习和成长的过程,虽然设计中很多东西都是指导老师以前做过的,但是指导老师几乎每次都对我说:先自己慢慢做,有什么问题再来问我,正是由于指导老师严谨的科学态度,才使我从最初接触这个课题时的迷茫变为现在豁然开朗,期间指导老师不断提供的帮助和鼓励是很重要的,特别要提及的是关于充电器的应用问题,要是没有指导老师提供的指导和建议是根本不可能完成的。在此,对指导老师的帮助表示感谢!

完整的Word格式文档51黑下载地址:
毕业论文-基于STC89C52单片机的智能灯光设计.doc (3.91 MB, 下载次数: 87)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表