基于51单片机的简易打铃系统

目录

具体实现功能

设计介绍

资料内容

全部内容

资料获取


具体实现功能

具体功能:
(1)实时显示当前时间(时、分、秒),LED模式指示灯亮;4个按键可以调整时间的时和分。
(2)具有24个打铃时间。按下“打铃+”和“打铃-”按键可查看24个打铃时间,模式指示灯灭,此时可通过4个按键调整打铃时间的时和分,数据用24C02保存。
(3)打铃时间到,蜂鸣器响10S。

仿真演示视频:

基于51单片机的简易打铃系统-仿真视频

设计介绍

51单片机简介

51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。

本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容

仿真实现(protues8.7)

本设计利用protues8.7软件实现仿真设计,具体如图。

程序(Keil5)

本设计利用KEIL5软件实现程序设计。

主函数如下:

///
//注意:当前日期不能乱改,DS1302容易报错。
#include <reg52.h>	         //调用单片机头文件
#include <intrins.h>
#include <ds1302.h>
#include <delay.h>
#include <i2c.h>
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535uchar code smgduan0[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//显示0~9,无小数点
uchar code smgduan1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//显示0~9,有小数点
uchar limit[48];
//P2为位选口
sbit sm1 =P2^0;//段选口
sbit sm2 =P2^1;
sbit sm3 =P2^2;
sbit sm4 =P2^3;
sbit sm5 =P2^4;
sbit sm6 =P2^5;
sbit led=P1^6;//指示灯
//按钮
sbit key1=P3^3;//组-1
sbit key2=P3^4;//时+
sbit key3=P3^5;//时-
sbit key4=P3^6;//分+
sbit key5=P3^7;//分-
sbit key6=P3^2;//组+1sbit beep=P1^7;//蜂鸣器
//变量定义
uchar num=0;//组号
uchar flag=1;
//显示
void xianshi()
{sm6=0;P0=smgduan0[(num)/10];sm1=1;delay_1ms(1);sm1=0;P0=smgduan1[(num)%10];sm2=1;delay_1ms(1);sm2=0;P0=smgduan0[limit[2*(num-1)]/10];sm3=1;delay_1ms(1);sm3=0;P0=smgduan1[limit[2*(num-1)]%10];sm4=1;delay_1ms(1);sm4=0;P0=smgduan0[limit[2*(num-1)+1]/10];sm5=1;delay_1ms(1);sm5=0;P0=smgduan0[limit[2*(num-1)+1]%10];sm6=1;delay_1ms(1);
}		
void xian()//显示当前时间
{sm6=0;P0=smgduan0[TIME[2]>>4];sm1=1;delay_1ms(1);sm1=0;P0=smgduan1[TIME[2]& 0x0f];sm2=1;delay_1ms(1);sm2=0;P0=smgduan0[TIME[1]>>4];sm3=1;delay_1ms(1);sm3=0;P0=smgduan1[TIME[1]& 0x0f];sm4=1;delay_1ms(1);sm4=0;P0=smgduan0[TIME[0]>>4];sm5=1;delay_1ms(1);sm5=0;P0=smgduan0[TIME[0]& 0x0f];sm6=1;delay_1ms(1);
}
//初始化读取定时值
void init_read()
{uchar i,j,k;k=0;for(j=0;j<48;j=j+2){i=At24c02Read(j);if(i<24)limit[j]=i;elselimit[j]=k;i=At24c02Read(j+1);if(i<60)limit[j+1]=i;elselimit[j+1]=0;k++;}
}
//判断时间,响铃
void bell_if()
{uchar i,j,m,n;j=0;m=(TIME[2]>>4)*10+(TIME[2]&0X0F);n=(TIME[1]>>4)*10+(TIME[1]&0X0F);for(i=0;i<47;i=i+2){if((limit[i]==m)&&(limit[i+1]==n))j++;}if(j>0){if(TIME[0]<0X10)beep=0;elsebeep=1;}elsebeep=1;
}
//小时+1
void shi_jia()
{if(limit[2*(num-1)]<23)limit[2*(num-1)]++;elselimit[2*(num-1)]=0;At24c02Write(2*(num-1),limit[2*(num-1)]);
}
//小时-1
void shi_jian()
{if(limit[2*(num-1)]>0)limit[2*(num-1)]--;elselimit[2*(num-1)]=23;At24c02Write(2*(num-1),limit[2*(num-1)]);
}
//分钟+1
void fen_jia()
{if(limit[2*(num-1)+1]<59)limit[2*(num-1)+1]++;elselimit[2*(num-1)+1]=0;At24c02Write(2*(num-1)+1,limit[2*(num-1)+1]);
}
//分钟-1
void fen_jian()
{if(limit[2*(num-1)+1]>0)limit[2*(num-1)+1]--;elselimit[2*(num-1)+1]=59;At24c02Write(2*(num-1)+1,limit[2*(num-1)+1]);
}
/***************主函数*****************/
void main()
{uchar k=0,m=0;beep=1;init_read();//初始化Ds1302ReadTime();TIME[0]&=0X7F;Ds1302Init();
while(1){led=!flag;//点亮指示灯if(!key6 &&(k!=6))//组号+1{k=6;flag=0;if(num<24)num++;}if(!key1 &&(k!=1))//组号-1{k=1;if(num>1)num--;else{flag=1;//显示当前时间}}if(!key2 &&(k!=2))//时+1{k=2;if(led)shi_jia();else{m=(TIME[2]>>4)*10+(TIME[2]&0X0F);if(m<23)m++;elsem=0;TIME[2]=(m/10<<4)+m%10;Ds1302Init();}}if(!key3 &&(k!=3))//时-1{k=3;if(led)shi_jian();else{m=(TIME[2]>>4)*10+(TIME[2]&0X0F);if(m>0)m--;elsem=23;TIME[2]=(m/10<<4)+m%10;Ds1302Init();}}if(!key4 &&(k!=4))//分+1{if(led)fen_jia();else{m=(TIME[1]>>4)*10+(TIME[1]&0X0F);if(m<59)m++;elsem=0;TIME[1]=(m/10<<4)+m%10;Ds1302Init();}k=4;}if(!key5 &&(k!=5))//分-1{if(led)fen_jian();else{m=(TIME[1]>>4)*10+(TIME[1]&0X0F);if(m>0)m--;elsem=59;TIME[1]=(m/10<<4)+m%10;Ds1302Init();}k=5;}if(P3==0xff)k=0;Ds1302ReadTime();//读取时间bell_if();//响铃if(flag==0)xianshi();//显示elsexian();}
}

程序运行结果如图:

全部内容

全部资料包括程序(keil5)、protues仿真(protues8.7)、设计说明、答辩PPT、开发资料、资料使用介绍、仿真视频、最小系统介绍视频等。

资料获取

https://docs.qq.com/doc/DT1V6aW9NZFVWcmVr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+cesium示例:3D热力图(附源码下载)

接到一位知识星友的邀请&#xff0c;随机模拟三维数据点&#xff0c;结合heatmap.js实现基于cesiumvue的3D热力图需求&#xff0c;适合学习Cesium与前端框架结合开发3D可视化项目。 demo源码运行环境以及配置 运行环境&#xff1a;依赖Node安装环境&#xff0c;demo本地Node版本…

批处理实现:自动抓取perfetto日志 自动导出到当前文件夹 自动打开分析页面

序言 最近在研究性能问题需要抓取trace文件。于是写了个脚本 使用 双击运行批处理文件&#xff0c;可以开始记录trace。而且以当前文件夹下面的。config.pbtx 作为配置文件。 &#xff08;pbtx就是一个json文件。配置了需要抓取那些参数&#xff0c;可以通过https://ui.per…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

​​Promise代码理解

1.事件循环与 Promise 执行顺序 案例 1&#xff1a;基础 Promise 同步异步区分 console.log(1); new Promise(resolve > {console.log(2);resolve();console.log(3); }).then(() > console.log(4)); console.log(5); 输出顺序&#xff1a;1&#xff0c;2&#xff0c;3…

57、原生组件注入-【源码分析】DispatcherServlet注入原理

57、原生组件注入DispatcherServlet注入原理 #### 继承关系 - DispatcherServlet继承自FrameworkServlet&#xff0c;而FrameworkServlet继承自HttpServletBean&#xff0c;最终HttpServletBean继承自HttpServlet。 - DispatcherServlet实现了ApplicationContextAware接口。 …

【动手学深度学习】3.5. 图像分类数据集

目录 3.5. 图像分类数据集1&#xff09;读取数据集2&#xff09;读取小批量3&#xff09;整合所有组件4&#xff09;小结 . 3.5. 图像分类数据集 我们将使用Fashion-MNIST数据集&#xff0c;作为图像分类数据集。 %matplotlib inline import torch import torchvision from …

Python的格式化输入输出

# Python 的格式化输出和格式化输入## 格式化输出Python 提供了多种字符串格式化的方法&#xff1a;### 1. % 格式化&#xff08;旧式格式化&#xff09;python name "Alice" age 25 print("Name: %s, Age: %d" % (name, age)) # 输出: Name: Alice, Age…

day65—回溯—单词搜索(LeetCode-79)

题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相…

iOS安全和逆向系列教程 第19篇:ARM64汇编语言基础与逆向分析

引言 在成功掌握iOS应用脱壳技术后,我们获得了可以进行静态分析的二进制文件。然而,要真正理解iOS应用的底层逻辑,我们必须深入到汇编语言层面。ARM64(也称为AArch64)是苹果在iPhone 5s及以后设备中使用的指令集架构。本篇文章将深入探讨ARM64汇编语言的基础知识,并结合…

使用Gitlab CI/CD结合docker容器实现自动化部署

Gitlab CI/CD基本介绍 核心概念 持续集成&#xff08;CI&#xff09;&#xff1a;每次代码提交后自动触发构建、测试和代码检查&#xff0c;确保代码质量 持续交付/部署&#xff08;CD&#xff09;&#xff1a;在 CI 基础上自动将代码部署到测试或生产环境&#xff0c;支持人工…

初学者运行Pycharm程序可能会出现的问题,及解决办法

文章目录 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm报错&#xff1a;“Original error was: DLL load failed: 找不到指定的模块“ 的解决办法四、ImportError: cannot…

Android开发中的Java与Kotlin:全面对比与深度解析

Android开发中的Java与Kotlin&#xff1a;全面对比与深度解析 在Android开发领域&#xff0c;Java和Kotlin是两种主流编程语言。自Google在2017年宣布Kotlin为Android官方支持语言以来&#xff0c;Kotlin凭借其现代语法特性和与Java的无缝兼容性&#xff0c;逐渐成为开发者的新…

为应对激烈竞争环境,IBMS系统如何提升企业管理效率

IBMS智能管理系统&#xff1a;赋能企业高效运营&#xff0c;决胜竞争新时代 在瞬息万变的商业环境中&#xff0c;效率就是竞争力&#xff01;企业如何快速响应市场变化、优化内部流程、降低成本并实现精准决策&#xff1f;IBMS智能管理系统以创新科技为引擎&#xff0c;为企业…

2.3 ASPICE的架构与设计

在ASPICE中&#xff0c;架构与设计是汽车软件开发过程中非常重要的一环&#xff0c;它涉及到定义和设计软件系统的整体结构、组件以及其相互关系。良好的架构与设计可以帮助团队更好地理解和管理软件系统&#xff0c;提高系统的可维护性、可扩展性和性能。以下是ASPICE中架构与…

生益PCB耐高温PCB板材怎么样?

在5G基站昼夜不停地吞吐数据时&#xff0c;在新能源汽车电池管理系统经受极寒酷暑考验时&#xff0c;在航空航天器穿越大气层承受2000℃热浪冲击时&#xff0c;一块优质PCB板材的“抗热基因”正在决定着整个系统的生死存亡。生益科技研发的耐高温PCB板材&#xff0c;正是在这场…

Java Spring ApplicationEvent 概述

一、Spring 事件机制核心概念 1. 事件驱动架构模型 发布-订阅模式&#xff1a;解耦事件生产者和消费者观察者模式&#xff1a;监听器监听特定事件事件驱动优势&#xff1a; 组件间松耦合系统扩展性好支持异步处理事件溯源支持 2. 核心组件 组件作用实现方式ApplicationEve…

Spring核心框架完全指南 - 基础知识全解析

📖 目录 🌟 Spring框架简介 🏗️ IoC容器详解 💉 依赖注入(DI)深入理解 ⚙️ Bean配置与管理 🎯 Bean的作用域 🔄 Bean生命周期 🎭 面向切面编程(AOP) 📝 Spring注解详解 📁 资源管理 📢 事件机制 🔤 SpEL表达式语言 🎯 实战案例 📚 总…

Parasoft C++Test软件集成测试(部件测试)_操作指南

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…

聊一聊 Linux 上对函数进行 hook 的两种方式

一&#xff1a;背景 1. 讲故事 前两篇我们介绍了 Minhook 在 Windows 平台上的强大功效&#xff0c;这一篇我们来聊一聊如何在 Linux 上对函数进行hook&#xff0c;这里介绍两种方式。 轻量级的 LD_PRELOAD 拦截 LD_PRELOAD是一种共享库拦截&#xff0c;这种方式的优点在于…

【免费分享】GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究

一、模型组成原理 1. 灰狼优化算法&#xff08;GWO&#xff09; 核心思想&#xff1a;模拟灰狼群体的社会等级和狩猎行为&#xff08;包围、跟踪、攻击猎物&#xff09;&#xff0c;通过α、β、δ三级领导层引导种群搜索最优解。算法流程包括&#xff1a; 社会分层&#xff…