智能全自动灭鼠器的设计
课程名称:单片机原理及应用
实验题目:智能全自动灭鼠器的设计
课程简要信息:
课程名称:单片机原理及应用 课程学时:64学时
适用专业:电子信息科学与技术 学生年级:2015级
实验内容与任务
1)以单片机AT98C51为核心,设计一个智能全自动灭鼠器,能实现可靠连续扑鼠功能,红外传感器检测老鼠位置,驱动步进电机关闸,并移动闸门将老鼠推入容纳箱中,LED数码管显示以及无线通信向用户手机终端发送扑鼠实时信息;
2)以ULN2003步进电机电机驱动模块驱动步进电机转动关闭闸门,关闭闸门的时间小于1秒钟;
3)以HC-SR501热释电红外传感器检测老鼠位置,当老鼠进入鼠笼时发出关闭闸门请求信息;
4)单片机控制短信模块SIM900A向用户手机发送扑鼠信息;
5)用七段数码管显示扑鼠数量;
6)系统调试与现场实验。
实验过程及要求
1)学习了解直流电动机与步进电动机的工作原理及特点;
2)选择五线四项步进电机的驱动模块,并设计基于51单片机的步进电动控制系统;
3)选择探测模块对老鼠进入鼠笼位置进行检测;
4)设计基于51单片的无线通信系统,使单片机系统与用户手机进行实时通信;
5)设计七段数码管显示电路;(注:以上4部分也象这部分一样展开学习并实验)
5.1)学习了解七段数码的显示原理;
5.2)选择译码器类型,通过真值表分析其功能,并能分析出8个数码管的位码;
5.3)选择数码管驱动电路,了解所选驱动器的结构,分析驱动电路的工作原理;
5.4)在Proteus下构建七段数码管的静态显示与动态显示电路原理图;
5.5)在Keil软件下编写七段数码管静态显示程序,编译,在Proteus下进行仿真实验;
5.6)分析总结出静态显示的特点;
5.7)在Keil软件下编写七段数码管动态显示程序,编译,在Proteus下进行仿真实验;并且在实际硬件系统中进行调试、实验;
5.8)分析总结出动态显示的特点;
6)设计、构建智能全自动灭鼠器系统,系统调试,现场工作实验;
7)撰写设计总结报告,并通过分组演讲,学习交流不同解决方案的特点。
相关知识及背景
智能全自动捕鼠器的设计涉及多领域的研究与应用,是一个运用以单片机为核心解决现实生活和工程实际问题的典型案例,需要应用通信传输技术、传感与检测技术、自动控制技术、机械传动技术等相关知识与技术。同时还涉及应用数字电子技术中的译码器、驱动器(锁存器)、七段数码管显示、单片机中断与查询方式的应用与编程方法。
教学目标与目的
在智能全自动捕鼠器项目的设计实现中引导学生了解项目开发流程,理解并运用通信传输技术、传感与检测技术、自动控制技术、机械传动技术相结合的知识交叉融合应用;引导学生根据需要设计电路、选择元器件,仿真与现实相结合设计程序的编写,构建测试环境与条件,并通过测试与分析对项目作出技术评价。
教学设计与引导
本实验项目的完成需要经历单片机课程相关知识的学习、系统开发方案论证、硬件系统设计、软件系统设计、仿真调试、实物调试、实验分析、设计总结等过程。形成工程开发理念与行为习惯的养成教育,在具体的实验中体验“→构思→设计→测试→评价→总结→再构思”的工程项目开发过程。
在实验教学中,从以下几个方面加强对学生的引导:
1)设计基于AT98C51的最小系统;
2)学习了解直流电动机与步进电动机的工作原理、特点与区别;
3)设计以单片机为核心的ULN2003步进电机驱动模块驱动步进电机转动关闭闸门,关闭闸门的速度可调;
4)学习物体位置检测方法,并对各种方法进行分析比较;
5)以HC-SR501热释电红外传感器检测老鼠位置,当老鼠进入鼠笼时发出关闭闸门请求信息;
6)要求学生学习基于单片机的无线通信原理及方法;
7)设计基于单片机控制短信模块SIM900A向用户手机发送扑鼠信息;
8)设计七段数码管显示电路;
9)在电路设计、搭建、调试完成后,进行实物实验运行;
10)在实验完成后,组织学生以项目演讲、答辩、评讲的形式进行交流,了解不同解决方案及其特点,拓宽知识面。
以上1)~8)的每部分均要求展开学习并实验,如以上的第8)可以如下展开学习并实验:
8.1)数码管的工作原理及其应用
①数码管的外形引脚与实物
学生学习数码管的外形引脚与实物。

图1 1位数码管各段名及引脚 图2 数码管实物图
②数码管的内部结构(共阴极联接与共阳极联接)
学生学习数码管的内部结构及工作原理。

图3(a) 共阴极联接 图3(b) 共阳极联接
③数码管0-9的段码表
根据七段数码管的内部结构及工作原理,引导学生分析出0-9的共阴极、共阳极联接的段码。其段码结果如表1所示。
表1 七段数码管的共阴极联接与共阳极联接的段码表

8.2)动态显示的位码分析
学生根据设计要求设计出如下图所示的8个七段数码管的动态显示电路。

图4 8个七段数码管的动态显示电路原理图
根据以上原理图指导学生分析出8个七段数码管从左往右的位码。具体分析如下表2所示。
表2 8个七段数码管的位码
| P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 | DIG7 DIG6 DIG5 DIG4 DIG3 DIG2 DIG1 DIG0 | 位码 |
| 0 0 0 0 0 0 0 0 | 1 1 1 1 1 1 1 0 | 0X00 |
| 0 0 1 0 0 0 0 0 | 1 1 1 1 1 1 0 1 | 0X20 |
| 0 1 0 0 0 0 0 0 | 1 1 1 1 1 0 1 1 | 0X40 |
| 0 1 1 0 0 0 0 0 | 1 1 1 1 0 1 1 1 | 0X60 |
| 1 0 0 0 0 0 0 0 | 1 1 1 0 1 1 1 1 | 0X80 |
| 1 0 1 0 0 0 0 0 | 1 1 0 1 1 1 1 1 | 0XA0 |
| 1 1 0 0 0 0 0 0 | 1 0 1 1 1 1 1 1 | 0XC0 |
| 1 1 1 0 0 0 0 0 | 0 1 1 1 1 1 1 1 | 0XE0 |
8.3)以图4原理图实现0-7的动态显示程序流程图设计
引导学生根自己所设计的原理图,设计出实现8个七段数码管动态显示0-7的程序流程图。
图5 8个七段数码管理动态显示的程序流程图
引导学生根据程序流程图,编写出程序。向学生强调:程序的编写要注意格式的范性,程序的可读性。
实验原理及方案
- 系统结构
以单片机为核心设计智能全自动灭鼠器系统结构框图如图6所示。能实现可靠连续扑鼠功能,红外传感器检测老鼠位置,驱动步进电机关闸,并移动闸门将老鼠推入容纳箱中,LED数码管显示扑鼠数量以及无线通信向用户手机终端发送扑鼠实时信息。
图6 智能全自动灭鼠器系统设计框图
- 实现方案
精美而可靠的扑鼠箱体设计同样十分重要,外形设计要精美使其摆在屋里是一美丽的装饰品,各个机械传动要做到灵活可靠。智能全自动灭鼠器箱体设计3D图如图7所示。

图7 智能全自动灭鼠器3D设计图
智能全自动灭鼠器控制电路原理图如图8所示,以STC89C52单片机为核心控制步进电动机驱动模块ULN2003,实现对步进电机转动进而控制关闭与移动闸门;控制红外传感模块检测老鼠位置;并控制无线通信模块SIM900A实现系统与用户手机实时通信;设计LED显示电路,实现当前扑鼠数量的显示。智能全自动灭鼠器控制电路原理图如下图8所示。

图8 智能全自动灭鼠器控制电路原理图
智能全自动灭鼠器设计完成需要应用的主要知识有:步进电机的控制、无线通信的实现、老鼠位置检测、数码管(LED)显示等。对以上四部分知识的学习与应用需要进行详细的剖析学习并进行单独的实验,以下以数码管(LED)显示为例:
3)实验开发板原理图
向学生详细讲述自行开发的实验电路板中8个七段数码管的动态显示电路的构成及工作原理与编程思路。

图9 51单片机实验开发板原理图

图10 51单片机实验开发板实物图
4)静态显示原理
所谓静态显示,就是当单片机某一端口输出一组显示数据之后,该端口一直保持该数据输出,维持数码管的显示数字,直到端口数据改变,又保持显示下一数据的显示方式。在具体电路连接上,将单片机一个端口的八个端子接在一只数码管的八个引脚上(h端为小数点),控制数码管的七段LED的亮或熄,显示出数字,这种显示控制方式就是静态显示。静态显示电路连接特点是单片机端口的每一位与数码管的一个端相连接,相当于单片机的一个引脚外接一只发光二极管。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口多,如驱动8个数码管静态显示则需要8×8=64根I/O口来驱动。
5)动态显示原理
将单片机与数码管接成图11所示动态显示方式,编程实现数码管每隔0.5s的0-7数字动态显示。

图11 数码管显示电路图
在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。用数码管显示信息时,由于每个数码管至少需要8 个I/O 口,如果需要多个数码管,则需要太多I/O 口,而单片机的I/O 口是有限的。在实际应用中,一般采用动态显示的方式解决此问题。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。
6)外部中断的实现原理
① 51单片机的中断系统结构

图12 51单片机中断系统结构
② 中断函数的结构
通过使用interrupt关键字来实现。定义中断函数的一般格式如下:
void 函数名() interrup n [using m]
{
函数体
}
关键字interrup后面的n是中断号,n的取值范围:0~31。中断号与对应的中断源和中断向量的关系见表3所示。
表3 中断号与中断源中断向量的关系表
| 中断号 | 中断源 | 中断向量 |
| 0 | 外部中断0 | 0003H |
| 1 | 定时/计数器0 | 000BH |
| 2 | 外部中断1 | 0013H |
| 3 | 定时/计数器1 | 001BH |
| 4 | 串行中断 | 0023H |
using m指明该中断服务程序所对应的工作寄存器组,取值范围:0~3。指定工作寄存器组的缺点是所有被中断调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误。通常不设定using m。
7)实验方案及步骤
(1)8个七段数的静态显示0-7(仅在Proteus平台上仿真实验)
步骤:①在Proteus平台上设计8个七段数码管的静态显示电路
②设计程序流程图
③根据程序流程图编写程序
④调试
⑤分析、总结七段数码管静态显示的特点
(2)8个七段数的动态显示0-7
步骤:①在Proteus平台上设计8个七段数码管的动态显示电路
②设计程序流程图
③根据程序流程图编写程序
④调试
⑤将程序下载到实验板上进行调试运行
⑥自行设计一个8个七段数码管的动态显示电路(实物)
⑦将程序下载到自制实物上进行调试运行
⑧分析、总结七段数码管动态显示的特点
(3)外部中断方式与查询方式实现对数码管的控制
步骤:①在Proteus平台上设计可通过外部中断控制8个七段数码管的动态显示电路
②设计程序流程图
③根据程序流程图编写程序
④调试
⑥自行设计一个外部中断控制的8个七段数码管的动态显示电路(实物)
⑦将程序下载到自制实物上进行调试运行
⑧将程序用查询方式实现相同功能
⑨分析、总结查询方式与中断方式的特点
8)实验过程中的部分参考设计图与参考程序
(1)8个七段数码管静态显示设计原理图与参考程序

图13 8个七段数码管静态显示设计图
参考程序:
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{
P0=distab[1];
P2&=0x7f;
P0=distab[2];
P2&=0xbf;
P0=distab[3];
P2&=0xdf;
P0=distab[4];
P2&=0xef;
P0=distab[5];
P2&=0xf7;
P0=distab[6];
P2&=0xfb;
P0=distab[7];
P2&=0xfd;
P0=distab[8];
P2&=0xfe;
while(1);
}
(2)8个七段数码管动态显示设计原理图与参考程序

图14 Proteus平台下七段数码管动态显示设计图

图15 一个段数码管显示0-9的程序流程图
要实现某一个七段数码管动态显示0~9,首先写出0~9的显示数据中的字型码数据(注意电路中选用的是共阴或共阳数码管),这些数据在程序中作数组元素。程序中将数组元素依次读出送到端口,使数码管显示出对应的数字。程序的设计框图见图15。
参考程序:
#include <AT89X51.h>
#define uchar unsigned char
sbit a=P0^5;
sbit b=P0^6;
sbit c=P0^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; /*七段数码管共阴极0-9的段码*/
unsigned char dispcount;
void delay02s(void) /*自定义延时函数*/
{ unsigned char i,j,k;
for(i=10;i>0;i--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);
}
void main(void) /*主函数*/
{ while(1)
{
for(dispcount=0;dispcount<10;dispcount++)
{
a=0;
b=0;
c=0; /*最后一位亮*/
P1=table[dispcount];
delay02s();
}
}
}
实现8个七段数码管从左向右动态显示0-7,在Proteus平台上实现仿真效果如图16所示,在实验开发板上实验效果如图17所示,学生自制实物效果如图18所示,参考程序流程图如图19所示。

图16 8个七段数码管动态显示0-7的仿真效果图

图17 8个七段数码管动态显示0-7的实验效果图

图18 8个七段数码管动态显示0-7的实物效果图

图19 动态显示0-7的程序流程图
参考程序:
#include <AT89X51.h>
#define uchar unsigned char
/*位码*/
unsigned char table2[]={0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0};
/*段码*/
unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
unsigned char dispcount;
/*延时函数*/
void delay02s(void)
{ unsigned char i,j,k;
for(i=1;i>0;i--)
for(j=20;j>0;j--)
for(k=2;k>0;k--);
}
void main(void)
{
while(1)
{for(dispcount=0;dispcount<8;dispcount++)
{
P0=table2[dispcount] ; /*位码送P0口*/
P1=table1[dispcount]; /*段码送P1口*/
delay02s();
}
}
}
(3)外部中断实现对七段数码管显示的控制
在
引脚外接一个按键,用中断方式实现按一下按键显示1,按两下显示2,依次类推。原理图设计如下图20所示,参考程序如下所示。

图20 中断控制七段数码管显示原理图(中断外接按钮按了28次的情况)
参考程序:
#include <REG51.h>
#define uchar unsigned char
unsigned char table2[]={0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0};
unsigned char code table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F};
unsigned char dispcount=0;
void delay02s(void)
{ unsigned char i,j,k;
for(i=10;i>0;i--)
for(j=200;j>0;j--)
for(k=2;k>0;k--);
}
void main(void)
{
EA=1;
EX0=1; /*开放外部中断0*/
IT0=1; /*设置外部中断0为边沿触发*/
while(1)
{
P0=table2[0] ;
P1=table1[dispcount%10]; /*按键次数的个位在最右数码管显示*/
delay02s();
P0=table2[1] ;
P1=table1[dispcount/10]; /*按键次数的十位在倒数第二个数码管显示*/
delay02s();
}
}
/*中断服务函数*/
void interr0() interrupt 0
{
dispcount++;
}
教学实施进程
对实验实施进程的各个环节以表4简要介绍于下:
表4教学实施进程
| 教学环节 | 教学设计思路 | 教学目的 | 教师工作任务 | 学生工作任务 | 关注的重点与细节 |
| 任务安排 | 将整个系统设计分成4个子项目去完成(步进电机控制、无线通信的实现、老鼠位置检测、七段数码管显示)。 | 目的1:体验“→构思→设计→测试→评价→总结→再构思”的工程项目开发思路; 目的2:熟练掌握步进电机控制、无线通信的实现、老鼠位置检测、七段数码管显示的相关知识与应用。 |
教师下达任务。 | 学生明析任务及要求。 | 学生是否明确各任务和任务间的关联性。 |
| 预习自学 | 分时间先后学生自学步进电机控制、无线通信的实现、老鼠位置检测、七段数码管显示的相关知识。 | 对4个子项目知识有一个整体认识。 | 教师下达学习任务。 | 学生自学。 | 学生是否进了自学。 |
| 现场教学 | 理实一体化教学,教学重点与难点“循序渐进、由浅入深、层层推进”。 | 学中做、做中学,基础实验、设计实验和综合实验前后衔接、融会贯通。 | 关键性知识讲述。 | 系统性学习。 | 关键知识的掌握情况。 |
| 分组研讨 | 方案制定分组研讨、集思广益。 | 完成一项任务方案可能很多,以比较方式选取最佳执行方案。 | 指出有哪些方案。 | 方案比较。 | 关注每位学生的参与度。 |
| 现场操作 | 养成现场操作的规范性、协作性。 | 规范性养成与合作精神培养。 | 过程监督。 | 完成实物设计与制作。 | 关注学生规范性操作。 |
| 结果验收 | 4个项目+整体系统实物验收 | 分阶段共进行5次验收。 | 验收打分。 | 功能、工艺展示。 | 对学生进行一些提问。 |
| 总结演讲 | 分组以PPT方式进行总结演讲。 | 培养学生的交流表达能力。 | 打分。 | 准备讲稿与PPT。 | 对学生进行一些提问。 |
| 报告批改 | 4个子报告,1个总报告。 | 图文并茂,培养学生的写作能力。 | 报告批改。 | 撰写报告。 | 报告撰写的规范性。 |
实验报告要求
学生在撰写实验报告时需要反映以下几方面的工作:
1)明确实验内容与实验目的;
2)确定实验方案并论证;
3)进行电路元件选型与分析;
4)构建原理图;
5)程序设计与优化;
6)仿真实验与调试;
7)实物制作;
8)实物调试;
9)实验结果与总结。
考核要求与方法
1)仿真验收:功能完成情况与完成效率。(当堂课内验收)
2)实物验收:功能与性能指标的完成程度。(下周课外验收)
3)实验质量:电路方案的合理性,焊接质量、组装工艺。(下周课外验收)
4)自主创新:功能构思、电路设计的创新性,自主思考与独立实践能力。(下周课外验收)
5)实验成本:是否充分利用实验室已有条件,材料与元器件选择合理性,性价比。(下周课外验收)
6)实验报告:实验报告的规范性与完整性。(下周课外验收)
表5 实验成绩构成表
| 成绩构成要素 | 验收时间 | 占比 | 合计 |
| 仿真效果 | 当堂课内验收 | 10% | |
| 实物验收 | 下周课外验收 | 30% | |
| 实验质量 | 下周课外验收 | 20% | |
| 自主创新 | 下周课外验收 | 20% | |
| 实验成本 | 下周课外验收 | 10% | |
| 实验报告 | 下周课外验收 | 10% |
项目特色或创新
**项目特色与创新在于:**采用递进式教学模式,即实验教学重点与难点“循序渐进、由浅入深、层层推进”。基础实验、设计实验和综合实验前后衔接、融会贯通。理实一体化教学(学中做、做中学),知识应用的综合性,实现方法的虚拟仿真与实物现实相结合。实现学生掌握知识的延伸性,理论实践相结合,培养学生的设计能力与创新能力。
参赛选手信息表
| 案例提供单位 | 重庆文理学院电子电气工程学院 | 相关专业 | 电子信息科学与技术 | ||||
| 设计者姓名 | 包宋建 | 电子邮箱 | 511035978@qq.com | ||||
| 移动电话 | 15223220951 | 通讯地址 (含邮编) |
重庆市永川区红河大道319号(402160) | ||||
| 设计者姓名 | 杨守良 | 电子邮箱 | 458194256@qq.com | ||||
| 移动电话 | 19923800228 | 通讯地址 (含邮编) |
重庆市永川区红河大道319号(402160) | ||||
| 设计者姓名 | 电子邮箱 | ||||||
| 移动电话 | 通讯地址 (含邮编) |
||||||
| 相关x课程名称 | 单片机原理及应用 | 学生年级 | 2015级 | 学时(课内+课外) | 64 | ||
支撑 条件 |
仪器设备 | 自行研发的实验开发板 | |||||
| 软件工具 | Keil c51,Proteus,stc-isp-15xx | ||||||
| 主要器件 | AT98C51单片机、ULN2003、HC-SR501、SIM900A、七段数码管、单片机实验开发板等。 | ||||||
图6
智能全自动灭鼠器系统设计框图