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

目 录
第一章 前言
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所示。                                                                                                                             
在该系统中,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电压,从而是单片机等控制电路正常工作,且成本低。
 
完整内容下载附件查看:

文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-204139-1-1.html

  • 13
    点赞
  • 225
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 用 sklearn 库中的 KMeans 算法进行聚类分析后,可以使用 Matplotlib 库进行可视化。可以使用 scatter 方法绘制数据点,并使用不同颜色表示不同类别。代码示例如下: ``` from sklearn.cluster import KMeans from matplotlib import pyplot as plt # 进行 KMeans 聚类 kmeans = KMeans(n_clusters=3) kmeans.fit(X) # 绘制聚类结果 plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_) plt.show() ``` 其中 X 是待聚类数据,n_clusters 是聚类数量。 ### 回答2: k-means是一种常见的聚类算法,在机器学习中应用广泛。sklearn库中提供了k-means算法的实现,同时也支持对聚类结果进行可视化展示,方便用户观察聚类结果并进一步分析。 在sklearn中,通过导入sklearn.cluster中的KMeans类来使用k-means算法。在使用KMeans类前,需要指定算法参数,如簇类数量、初始质心位置等。具体参数配置可参照官方文档进行设置。 针对聚类结果的可视化展示,sklearn提供了多种方法。以下介绍两种常见的可视化方法: 1. 绘制散点图 将聚类结果用散点图进行可视化是一种常见方法。在绘制散点图时,通常根据聚类簇别,对不同数据点进行颜色编码,以便用户能够更清晰地区分不同类别的数据点。代码示例: ``` import matplotlib.pyplot as plt # 聚类簇别结果保存在labels中 # 聚类中心位置保存在cluster_centers_中 # X为原始数据 for i in range(n_clusters): plt.scatter(X[labels == i, 0], X[labels == i, 1], s=30, label='Cluster %d' % (i+1)) plt.scatter(cluster_centers_[:, 0], cluster_centers_[:, 1], marker='*', s=200, label='Centroids') plt.legend() plt.show() ``` 2. 绘制决策边界 决策边界用于划分不同聚类簇别的区域,相邻区域的簇别不同。通过绘制决策边界,可以更清晰地展示不同聚类簇别的分布情况。代码示例: ``` from sklearn.metrics import pairwise_distances_argmin # 聚类簇别结果保存在labels中 # X为原始数据 def plot_kmeans(kmeans, X, n_clusters=3, rseed=0, ax=None): labels = kmeans.fit_predict(X) # 绘制决策边界 ax = ax or plt.gca() ax.axis('equal') ax.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis', zorder=2) # 绘制聚类中心 centers = kmeans.cluster_centers_ radii = [cdist(X[labels == i], [center]).max() for i, center in enumerate(centers)] for c, r in zip(centers, radii): ax.add_patch(plt.Circle(c, r, fc='#CCCCCC', lw=3, alpha=0.5, zorder=1)) kmeans = KMeans(n_clusters=3, random_state=0) plot_kmeans(kmeans, X) plt.show() ``` 无论是绘制散点图还是绘制决策边界,k-means聚类的可视化展示都能够为用户提供全局性的聚类结果,方便用户进一步分析和探索数据。 ### 回答3: 机器学习中的K均值聚类算法是一种无监督学习方法,可用于将数据点分成不同的类别。在scikit-learn(sklearn)包中,我们可以使用KMeans类来实现K均值聚类算法,同时通过可视化的方式更直观地了解到该算法的结果。 首先,我们需要生成一些数据。在这里,可以通过使用make_blobs函数生成随机的数据点,并将其分成不同的类别。然后,我们可以使用KMeans类对这些数据点进行聚类分析。在KMeans类中,我们可以设置聚类的数量(也称为k值)和迭代次数(max_iter)。例如,我们可以设置k值为3,迭代次数为100,并使用fit_predict函数进行聚类,将每个数据点分配到其所属的簇中。 接下来,我们可以使用matplotlib库来可视化聚类结果。对于二维数据,我们可以使用散点图来显示每个数据点所属的簇。我们还可以使用不同的颜色来区分不同的簇,使得结果更加直观。在二维数据的情况下,可以使用plt.scatter函数来绘制散点图,使用不同的颜色为不同的簇分配不同的值。我们还可以使用KMeans类的cluster_centers_属性来显示每个簇的中心点,用不同的标记区分每个簇的中心点。 总之,通过使用sklearn kmeans聚类可视化,我们可以更好地了解K均值聚类算法的工作原理,并更好地理解每个数据点所属的不同簇。此外,该过程也可以帮助我们选择最佳的k值和max_iter值,以便获得更好的聚类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值