单片机:实现教学上下课的自动打玲(附带源码)
单片机实现教学上下课的自动打铃
在学校或其他教育机构中,定时的打铃系统被广泛应用,用于提醒学生和老师上下课的时间。一个简单的自动打铃系统可以通过单片机实现,结合蜂鸣器和定时器控制,可以在设定的时间点自动打铃,提醒师生上下课。接下来,我们将介绍如何使用8051单片机实现一个教学上下课的自动打铃系统。
项目目标
- 定时打铃:设置一个预定的上下课时间,达到设定时间后,自动发出铃声提示。
- 蜂鸣器控制:通过蜂鸣器发出声响,提示上下课。
- 数码管显示:实时显示当前时间,便于查看系统工作状态。
- 按键调整:通过按键调整当前时间或上下课时间,便于灵活操作。
- 定时器中断:使用定时器中断来控制打铃的时间和定时器更新。
一、硬件设计
1.1 单片机选择
我们使用8051单片机,它具有较多的I/O端口和定时器,可以方便地控制外部设备如蜂鸣器、数码管和按键。
1.2 外部硬件
- 蜂鸣器:用于发出铃声提示。可以使用主动蜂鸣器,只需要提供高电平信号即可发声。
- 数码管:用于显示当前时间。我们使用4位数码管,显示时间格式为“HH:MM”。
- 按键:用于调整时间和上下课时间的设置。每个按键可以用于增加或减少时间,或者设置打铃时间。
- 显示器:为了显示当前的时间,我们需要一个四位数码管,每位显示一个数字。
1.3 硬件连接
- 数码管:数码管的段引脚(a-g)连接到8051的P0端口,用于显示数字。
- 蜂鸣器:蜂鸣器连接到一个P1端口(如P1.0),通过控制该端口的高低电平来发出蜂鸣声。
- 按键:通过P3端口连接按键(增加、减少时间和设置打铃时间等)。
二、系统设计
2.1 功能模块
- 定时器模块:使用定时器中断实现每秒更新一次系统时间,并检查是否达到设定的打铃时间。
- 蜂鸣器控制模块:根据定时器中断,判断是否需要发出铃声(如到达下课时间)。
- 数码管显示模块:显示当前时间和设定的上下课时间,方便用户查看。
- 按键输入模块:通过按键调整当前时间或上下课时间。
2.2 数据结构
- 当前时间:存储当前的小时和分钟,定时器中断时更新。
- 下课时间:存储设定的下课时间,当当前时间达到该时间时,触发打铃。
- 数码管显示内容:根据当前时间和下课时间更新显示内容。
2.3 工作原理
- 定时器中断:通过定时器中断来更新时间(每秒更新一次)。定时器溢出时,检查当前时间是否等于或超过设定的下课时间,如果是,则触发蜂鸣器发声。
- 数码管显示:实时显示当前时间,每秒更新一次。
- 蜂鸣器控制:当当前时间到达设定的打铃时间时,蜂鸣器发出铃声,提醒上下课。
- 按键调整:通过按键增加或减少当前时间,或者设置上下课的打铃时间。
三、程序设计
3.1 定时器中断
使用8051的定时器中断来实现每秒更新时间。当定时器溢出时,通过中断更新当前时间。
3.2 主程序框架
- 初始化定时器:使用定时器中断来实现秒级更新。
- 数码管显示:显示当前时间,并定时更新显示。
- 按键扫描:实现按键的扫描,允许用户修改当前时间和上下课时间。
- 蜂鸣器控制:当当前时间等于设定的上下课时间时,触发蜂鸣器发声。
3.3 代码实现
#include <reg51.h> // 包含8051单片机的寄存器定义// 数码管段码映射表(7段数码管,段顺序为:a,b,c,d,e,f,g)
unsigned char segment_code[] = {0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F, // 9
};// 定义数码管显示的4位
#define SEG1 P0_0
#define SEG2 P0_1
#define SEG3 P0_2
#define SEG4 P0_3// 蜂鸣器控制引脚
#define BEEP P1_0 // 蜂鸣器连接到P1.0// 定义按键端口
#define BUTTON_UP P3_0 // 增加时间的按键
#define BUTTON_DOWN P3_1 // 减少时间的按键
#define BUTTON_SET P3_2 // 设置下课时间的按键// 当前时间,格式为HH:MM
unsigned char current_hour = 8; // 默认8:00
unsigned char current_minute = 0;
unsigned char bell_hour = 9; // 默认下课时间9:00
unsigned char bell_minute = 0;// 定时器初始化函数
void timer0_init() {TMOD = 0x01; // 设置定时器0为模式1(16位定时器)IE = 0x82; // 启用定时器中断TR0 = 1; // 启动定时器0
}// 延时函数
void delay_ms(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++) {for (j = 0; j < 120; j++) {// 空循环,产生延时}}
}// 按键扫描函数
unsigned char key_scan() {if (BUTTON_UP == 0) { // 如果按下增加时间键delay_ms(20); // 去抖动return 1; // 增加时间}if (BUTTON_DOWN == 0) { // 如果按下减少时间键delay_ms(20); // 去抖动return 2; // 减少时间}if (BUTTON_SET == 0) { // 如果按下设置下课时间键delay_ms(20); // 去抖动return 3; // 设置下课时间}return 0;
}// 数码管显示函数
void display_time(unsigned char hour, unsigned char minute) {unsigned char hour_tens = hour / 10; // 获取小时的十位unsigned char hour_ones = hour % 10; // 获取小时的个位unsigned char min_tens = minute / 10; // 获取分钟的十位unsigned char min_ones = minute % 10; // 获取分钟的个位// 显示小时和分钟SEG1 = segment_code[hour_tens]; // 显示小时的十位SEG2 = segment_code[hour_ones]; // 显示小时的个位SEG3 = segment_code[min_tens]; // 显示分钟的十位SEG4 = segment_code[min_ones]; // 显示分钟的个位
}// 蜂鸣器控制函数
void beep_on() {BEEP = 1; // 打开蜂鸣器
}void beep_off() {BEEP = 0; // 关闭蜂鸣器
}// 定时器中断函数
void timer0_isr() interrupt 1 {// 每秒更新一次current_minute++; // 增加1分钟if (current_minute >= 60) {current_minute = 0;current_hour++; // 增加1小时if (current_hour >= 24) {current_hour = 0; // 如果超过24小时,重新从0开始}}// 检查是否到达下课时间if (current_hour == bell_hour && current_minute == bell_minute) {beep_on(); // 打开蜂鸣器delay_ms(500); // 持续500msbeep_off(); // 关闭蜂鸣器}// 更新数码管显示display_time(current_hour, current_minute);// 重载定时器初值TH0 = 0xFF;TL0 = 0xFF;
}void main() {timer0_init(); // 初始化定时器while (1) {unsigned char key = key_scan();if (key == 1) { // 增加时间current_minute++;if (current_minute >= 60) {current_minute = 0;current_hour++;}}if (key == 2) { // 减少时间if (current_minute > 0) {current_minute--;} else {if (current_hour > 0) {current_hour--;current_minute = 59;}}}if (key == 3) { // 设置下课时间bell_hour = current_hour;bell_minute = current_minute;}}
}
四、程序说明
- 数码管显示:通过
segment_code数组将数字转换为数码管显示的段码,通过display_time()函数实现显示当前时间。 - 定时器中断:定时器中断每秒钟更新一次当前时间,并检查是否到达设定的下课时间。如果当前时间等于下课时间,蜂鸣器发出铃声。
- 蜂鸣器控制:通过
beep_on()和beep_off()函数控制蜂鸣器的开关,产生铃声提示。 - 按键扫描:通过
key_scan()函数扫描按键,支持增加或减少当前时间,设置下课时间。
五、总结
通过本项目,您可以实现一个简单的教学上下课自动打铃系统。该系统使用8051单片机,通过定时器控制当前时间的更新,使用蜂鸣器发出上下课铃声,配合数码管显示当前时间,同时可以通过按键调整时间设置。
相关文章:
单片机:实现教学上下课的自动打玲(附带源码)
单片机实现教学上下课的自动打铃 在学校或其他教育机构中,定时的打铃系统被广泛应用,用于提醒学生和老师上下课的时间。一个简单的自动打铃系统可以通过单片机实现,结合蜂鸣器和定时器控制,可以在设定的时间点自动打铃࿰…...
进程通信方式---共享映射区(无血缘关系用的)
5.共享映射区(无血缘关系用的) 文章目录 5.共享映射区(无血缘关系用的)1.概述2.mmap&&munmap函数3.mmap注意事项4.mmap实现进程通信父子进程练习 无血缘关系 5.mmap匿名映射区 1.概述 原理:共享映射区是将文件…...
深度学习实战智能交通计数
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本…...
【MySQL】MySQL表的操作
【MySQL】MySQL表的操作 🥕个人主页:开敲🍉 🔥所属专栏:MySQL🍋 🌼文章目录🌼 1. 创建表 2. 查看表结构 3. 修改表 4. 删除表 1. 创建表 create table table_name(表名称)( fiel…...
Redis篇-12--数据结构篇4--Hash内存模型(数组,链表,压缩列表zipList,哈希表,短结构)
Redis的Hash数据结构用于存储键值对(key-value形式)的集合(类似java中HashMap或对象)。为了在保证高效性能的同时节省内存,Redis对Hash的底层实现进行了多种优化。特别是通过使用压缩列表(ziplistÿ…...
二、windows环境下vscode使用wsl教程
本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode,按快捷键CtrlShiftX打开插件市场,搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…...
Qwen2-VL微调体验
1.配置环境 2.数据集准备 3.模型下载 4.注册SwanLab 5.微调 6.训练过程可视化 1.配置环境 本博客使用的是2B模型,所以仅用了单卡3090,若大一点的模型,自行根据实际情况准备显卡 安装Python>3.8 安装Qwen2-VL必要的库 pip install…...
论文的模拟环境和实验环境
模拟环境和实验环境 在撰写SCI计算机领域论文时,模拟环境和实验环境是两个重要的概念,它们之间存在显著的差异。 模拟环境主要是利用计算机、数学方法等手段对实际系统进行描述和分析的过程。在计算机科学中,模拟环境可以用于模拟各种算法、系统或网络的行为,以便在不需要…...
MySQL EXPLAIN 详解:一眼看懂查询计划
在日常的数据库开发中,我们经常需要分析 SQL 查询性能,而 EXPLAIN 是 MySQL 提供的利器,可以帮我们快速理解查询计划,优化慢查询。本文将详细解析 EXPLAIN 的输出字段及其含义,并结合实际案例分享优化思路。 一、什么是…...
自动呼入机器人如何与人工客服进行无缝切换?
自动呼入机器人如何与人工客服进行无缝切换? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 自动呼入机器人与人工客服的无缝切换详解 自动呼入机器人与人工客服之间的无缝切换是确保客户体验连续…...
二分类模型的性能评价指标
1. 混淆矩阵 (Confusion Matrix) 预测正类预测负类实际正类 (P)True Positive (TP)False Negative (FN)实际负类 (N)False Positive (FP)True Negative (TN) True Positive (TP): 模型正确预测为正类的样本数。True Negative (TN): 模型正确预测为负类的样本数。False Positi…...
鸿蒙操作系统简介
华为鸿蒙系统(HUAWEI HarmonyOS),是华为公司于2019年8月9日在东莞举行的华为开发者大会(HDC.2019)上正式发布的面向全场景的分布式操作系统,可以创造一个超级虚拟终端互联的世界,将人、设备、场…...
单片机:实现蜂鸣器数码管的显示(附带源码)
单片机实现蜂鸣器数码管显示 蜂鸣器和数码管在嵌入式系统中广泛应用。蜂鸣器可以发出声音警告或提示,而数码管则用于显示数字或字母。在本项目中,我们将通过8051单片机实现一个控制蜂鸣器和数码管显示的系统,结合使用蜂鸣器和数码管…...
C语言期末复习笔记(上)
目录 一、为什么要学习C语言 1.C语言适合做什么 2.开发C程序的步骤 3.常用术语 二、C语言数据结构 1.常量与变量 (1)常量 编辑 (2)变量 2.数据类型 编辑 (1)数据类型的分类 (2&a…...
HarmonyOS 实时监听与获取 Wi-Fi 信息
文章目录 摘要项目功能概述代码模块详细说明创建 Wi-Fi 状态保存对象Wi-Fi 状态监听模块获取当前 Wi-Fi 信息整合主模块 运行效果展示性能分析总结 摘要 本文展示了如何使用 HarmonyOS 框架开发一个 Demo,用于监听手机的 Wi-Fi 状态变化并实时获取连接的 Wi-Fi 信息…...
Unity超优质动态天气插件(含一年四季各种天气变化,可用于单机局域网VR)
效果展示:https://www.bilibili.com/video/BV1CkkcYHENf/?spm_id_from333.1387.homepage.video_card.click 在你的项目中设置enviro真的很容易!导入包裹并按照以下步骤操作开始的步骤! 1. 拖拽“EnviroSky”预制件(“environme…...
1 JVM JDK JRE之间的区别以及使用字节码的好处
JDK jdk是编译java源文件成class文件的,我们使用javac命令把java源文件编译成class文件。 我们在java安装的目录下找到bin文件夹,如下图所示: 遵循着编译原理,把java源文件编译成JVM可识别的机器码。 其中还包括jar打包工具等。主要是针对…...
【网络安全】网站常见安全漏洞—服务端漏洞介绍
文章目录 网站常见安全漏洞—服务端漏洞介绍引言1. 第三方组件漏洞什么是第三方组件漏洞?如何防范? 2. SQL 注入什么是SQL注入?如何防范? 3. 命令执行漏洞什么是命令执行漏洞?如何防范? 4. 越权漏洞什么是越…...
MAPTR:在线矢量化高精地图构建的结构化建模与学习(2208)
MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION MAPTR:在线矢量化高精地图构建的结构化建模与学习 ABSTRACT High-definition (HD) map provides abundant and precise environmental information of the driving scene, se…...
基于容器的云原生,让业务更自由地翱翔云端
无论是要构建一个应用或开发一个更庞大的解决方案,在技术选型时,技术的开放性和可移植性已经成为很多企业优先考虑的问题之一。毕竟没人希望自己未来的发展方向和成长速度被自己若干年前选择使用的某项技术所限制或拖累。 那么当你的业务已经上云&#x…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
