内容正文:
任务三 制作光控智能照明控制器
单片机技术及应用
同步精品课堂
高等教育出版社第 4 版
1
学会根据电路原理图搭接模块电路
能够绘制程序流程图并完成编程
完成光控智能照明控制器的仿真调试和程序下载验证功能
了解设置增加 “时间上限” 或减少 “时间下限” 功能按键的思路
光控智能照明控制器电路的搭接
编程实现光控和时间调节功能
理解光线检测和人体红外检测的编程逻辑
准确编写中断服务函数实现灯光控制
在日常生活中,我们希望照明系统能够根据不同时间和是否有人经过自动选择是否亮灯,这样既人性化又能节约电能。
今天我们就来学习制作光控智能照明控制器。
任务三 制作光控智能照明控制器 - 知识准备
在一块均匀光电导体两端加上电极,贴在硬质玻璃、云母、高频瓷或其他绝缘材料基板上,两端接有电极引线,封装在带有窗口的金属或塑料外壳内。
认识光敏电阻(外形和封装)
任务三 制作光控智能照明控制器 - 知识准备
当照度逐渐增大,光敏电阻受光照后,阻值变小。
当照度逐渐减小,光敏电阻不受光照,阻值变大。
认识光敏电阻(外形和封装)
任务三 制作光控智能照明控制器 - 任务准备
光控智能照明控制器可以根据不同时间和是否有人经过,自动选择是否亮灯,使照明更加 人性化,同时也更加节约电能。
任务需求
工具及材料准备:
工作准备:
① 软件:Protel DXP 2004、Proteus 7.4、Keil uVision2、EasyPRO Programmer、流程图绘制软件。
② 硬件:计算机 1 台、编程器 1 台、最小系统电路板 1 块、人体红外检测模块电路板 1 块、按键模块 1 个、杜邦线若干条、电池盒 1 个。
穿好工作服,戴好防静电手环,穿绝缘胶鞋。
清洁工作台面,清理工作区域,工具、仪器仪表摆放整齐有序。
任务三 制作光控智能照明控制器 - 任务实施
绘制光线检测模块原理图
任务三 制作光控智能照明控制器 - 任务实施
根据电路原理图用杜邦线搭接电路。
按键模块 2 个 I/O 接口与 P2 口 (P2.7 和 P2.6) 相连,人体红外检测模块的信号输出端与 P3 口 (P3.2) 相连,灯光控制模块与 P3 口 (P3.4) 相连。
光线检测模块输出端口与 P3 口 (P3.5) 相连,连接电源和地端,安装电池盒。
搭接电路
任务三 制作光控智能照明控制器 - 任务实施
搭接电路
光控智能照明控制器电路图如图所示:
任务三 制作光控智能照明控制器 - 任务实施
光线检测模块原件清单
① 根据独立式键盘模块电路元件清单,选取元件,用万用表检测元件的好坏。
任务三 制作光控智能照明控制器 - 任务实施
编程(新建工程与源文件)
① 启动 Keil uVision2,新建一个工程文件 “光控智能照明控制器.uV2”。
② 新建一个 C51 源程序文件 “光控智能照明控制器.C”,根据程序流程图,将下面的 C51 源程序代码补充完整。
任务三 制作光控智能照明控制器 - 任务实施
编程 - 新建工程与源文件
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit light = P3^4; // 将P3^4定义为灯控制口
sbit add = P2^7; // 增加照明时间按键
sbit cut = P2^6; // 减少照明时间按键
sbit ex0 = P3^2; // 人体红外检测模块端口
sbit ex1 = P3^5; // 光线检测
uint time = 2000; // 设定照明时间void delay(ms);
// 延时ms毫秒函数
任务三 制作光控智能照明控制器 - 任务实施
编程 - 主函数部分
main() {
EA = 1; // 开总中断
EX0 = 1; // 开外部中断0
IT0 = 0; // 中断触发方式为低电平触发
while (1) {
if (add == 0) {
delay(10); // 延时消抖
if (add == 0) {
while (add == 0); // 松手检测
if (time <= 50000) {
time = time + 1000; // 照明时间每次增加1s
}
}
}
任务三 制作光控智能照明控制器 - 任务实施
编程 - 主函数部分
if (cut == 0) {
delay(10); // 延时消抖
if (cut == 0) {
while (cut == 0); // 松手检测
if (time >= 2000) {
time = time - 1000; // 照明时间每次减少1s
}
}
}
}}
任务三 制作光控智能照明控制器 - 任务实施
编程 - 中断服务函数
void int_ex0(void) interrupt 0 using 0
{
if (ex1 == 0) // 如果在黑暗环境
{
light = 0; // 开灯
while (ex0 == 0);
delay(time);
light = 1; // 关灯
}
else {
light = 1; // 如果在光亮环境,关灯
}}
任务三 制作光控智能照明控制器 - 任务实施
编程 - 延时函数
void delay(uint ms) {
uint i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 125; j++) {
;
}
}}
③ 生成 HEX 文件 “光控智能照明控制器.HEX”。
任务三 制作光控智能照明控制器 - 任务实施
仿真调试程序 - 启动与元件选择
① 启动仿真软件 Proteus 7.4,新建仿真文件 “光控智能照明控制器.DSN”。
② 单击元件选择按钮 “P”,从元件库中选择需要的元件:发光二极管 (LED - RED) 1 个、按键 (BUTTON) 3 个、开关 (SWITCH) 1 个 、PNP 三极管 1 个、电阻 (RES2) 5 个和单片机芯片 (AT89S51) 1 个 。
任务三 制作光控智能照明控制器 - 任务实施
仿真调试程序 - 绘制仿真电路图
③ 根据电路原理图绘制仿真电路图 (省略复位和时钟电路),添加电源和地端,修改元件标号和标称值,如图所示。
任务三 制作光控智能照明控制器 - 任务实施
仿真调试程序 - 加载 HEX 文件与设置时钟频率
④ 双击芯片 AT89S51,在弹出的对话框中加载 HEX 文件 (光控智能照明控制器.HEX),修改时钟频率为 12 MHz。
仿真调试程序 - 仿真与保存
⑤ 单击仿真按钮,观察仿真效果。
⑥ 按 Ctrl + S 组合键保存文件。
任务三 制作光控智能照明控制器 - 任务实施
下载程序,验证功能
① 启动编程软件 EasyPRO Programmer。
② 加载 HEX 文件 (光控智能照明控制器.HEX)。
③ 单击 “操作一键通” 按钮,完成程序的下载。
④ 将单片机插到最小系统板的 ZIF 插座上。
⑤ 加电,观察其功能。
随堂检测1
光控智能照明控制器的光线检测模块输出端口与单片机的哪个端口相连?
答案:光线检测模块输出端口与 P3 口 (P3.5) 相连。
在编程中,延时消抖的时间是多少?
答案:延时消抖的时间是 10ms。
随堂检测2
在仿真调试程序时,需要选择哪些元件?
答案:需要选择发光二极管 (LED - RED) 1 个、按键 (BUTTON) 3 个、开关 (SWITCH) 1 个 、PNP 三极管 1 个、电阻 (RES2) 5 个和单片机芯片 (AT89S51) 1 个 。
在中断服务函数中,根据什么条件判断是否开灯?
答案:根据光线检测模块的信号 ex1 判断,当 ex1 == 0(黑暗环境)时开灯。
1
讨论如何提高光控智能照明控制器的光线检测精度。分析设置增加 “时间上限” 或减少 “时间下限” 功能按键的具体实现代码。
1. 根据电路原理图搭接电路
任务三 制作光控智能照明控制器
2. 绘制程序流程图
启动与元件选择
绘制仿真电路图
加载 HEX 文件与设置时钟频率
仿真与保存
新建工程与源文件
主函数部分
中断服务函数
延时函数
编译生成 HEX 文件
3. 编程
4.仿真调试程序
5.下载程序,验证功能
感谢观看
26
$$