51单片机通过级联74HC595实现倒计时秒表Protues仿真设计
一、设计背景
近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了51单片机通过级联74HC595实现倒计时秒表设计,倒计时精度达0.05s,解决了传统的由于倒计时精度不够造成的误差和不公平性,是各种体育竞赛的必备设备之一。本设计采用51单片机为中心器件,利用其定时器/计数器定时和记数的原理,使用两片74HC595级联实现LED数码管的控制以及利用外部中断来设计倒计时器。将软、硬件有机地结合起来,使得系统能够实现八位LED显示,倒计时精度为0.05秒,能正确地进行倒计时,复位后倒计时重新回到初始状态。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在KEIL5中调试运行,硬件系统利用Protues强大的功能来实现,简单易于观察,在仿真中就可以观察到实际的工作状态。
二、实现功能
以51单片机为控制核心,设计一种可调倒计时秒表。整个系统包括51单片机芯片、晶振电路、时钟电路、功能按键以及74HC595数码管控制显示电路。该系统利用共阳数码管实时显示时、分、秒倒计时,通过独立按键键盘设计控制倒计时秒表的启停、定时时间的设计。可具体实现以下功能:
(1) 按下设置键后,在数字闪烁的过程中,采用启动外部中断,能对增、减按键产生响应,。
(2) 按下启动键后,启动定时器;按下暂停键后,停止定时器。
(3)·定时器定时50ms,20次定时可产生1秒钟计时。
(4) 倒计时结束后,停止定时器。
(5) 最大定时99时59分59秒。
三、仿真演示
初始化定时时间0时0分0秒。
按下时间设置按键可以设置倒计时时间,通过连续按下时间设置按键可在时、分、秒设置来回切换,利用闪烁效果提示当前设置单位。
设置好倒计时时间后,利用启动键和停止键实现倒计时秒表的启停。

四、源程序
#include <REGX52.H>
#include <intrins.h>#define false 0
#define true 1
#define uchar unsigned char //0——255
#define uint unsigned int //0——65535
#define ulong unsigned long //0——4294967295sbit SDA1 = P3^6; //串行数据输入,对应595的14脚SER
sbit SCL1 = P3^7; //移位寄存器时钟输入,对应595的11脚SCK
sbit SCL2 = P2^4; //存储寄存器时钟输入,对应595的12脚RCKsbit start_key = P3^0; //启动按钮
sbit pause_key = P3^1; //停止按钮
sbit set_key = P3^5; //停止按钮uchar state; //状态:0-停止,1-启动,2-暂停
ulong ms = 0; //存储毫秒值uchar shi = 0; // 小时数
uchar fen = 0; //分钟数
uchar miao = 0; //秒数
uchar set_flag = 0;uchar smg_c = 0; //数码管闪烁时间计数
bit smg_f = 0; //数码管闪烁标志unsigned char code disp[17]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0x40}; /***数码***///0 1 2 3 4 5 6 7 8 9
unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void displayTime(void); //刷新时间显示
void disPlay(uchar num, uchar loc); //数码管、led显示函数
void Exint_Init(void);
void Timer_Init(void);
void delay2ms(void);
void Delay1ms(unsigned int n);void Delay1ms(unsigned int n)
{unsigned char i, j; for (; n>0; n--)for(i=0;i<10;i++)for(j=0;j<33;j++);
}void delay2ms(void)
{unsigned char i,j;for(i=133;i>0;i--)for(j=6;j>0;j--);
}void c595_in(unsigned char Data)
{unsigned char i;for(i = 0; i < 8; i++) //循环8次,刚好移完8位{SCL1 = 0; //先将移位寄存器控制引脚置为低 _nop_();if((Data & 0x80)== 0x80)SDA1 =1;elseSDA1 =0;Data <<= 1; //将数据的次高位移到最高位SCL1 = 1; //再置为高,产生移位时钟上升沿,上升沿时数据寄存器的数据移位_nop_();}
}void c595_out(void)
{SCL2 = 0; //先将存储寄存器引脚置为低_nop_();SCL2 = 1; //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。
}void Timer_Init(void)
{TMOD=0x11; //0110 0001 //方式一TH0= (65536-50000)/256;TL0= (65536-50000)%256; // 50msTH1= (65536-50000)/256;TL1= (65536-50000)%256; // 50msTR0=1; //开启T0TR1=1; //开启T1//ET0=1; //T0中断允许//ET1=1; //T1中断允许EA=1; //总中断开启
}void T0_INT0(void) interrupt 1
{ ms++;if(ms == 20) //1s时间到{ms = 0;if(miao > 0){miao--;}if(miao == 0) //秒数计时为0{if(fen == 0) //没有分钟数{if(shi == 0){TR0 = 0;} //判断是否还有时数,若没有,倒计时结束,停止计时 else{ shi--;fen = 60;}}if(fen > 0) //有分钟数{fen--;miao = 59;}}}
}void T0_INT1(void) interrupt 3
{ smg_c++;if(smg_c == 10){smg_c = 0;smg_f = ~smg_f;}
}/*********外部中断0、1初始化***********/
void Exint_Init()
{IT0 = 1;IT1 = 1; //下降沿触发EX0 = 1;EX1 = 1;PX0 = 1; // 中断优先级设置PX1 = 0;
}/*********外部中断0服务函数***********/
void Exint0_Service() interrupt 0
{if(set_flag == 3) {miao++;if(miao == 60){miao = 59;}}if(set_flag == 2) {fen++;if(fen == 60){fen = 59;} //按键加}if(set_flag == 1) {shi++;if(shi == 100) {shi = 99;}}
}/*********外部中断1服务函数***********/
void Exint1_Service() interrupt 2
{if(set_flag == 3) {if(miao > 0){miao--;}}if(set_flag == 2) {if(fen > 0){fen--;} //按键减}if(set_flag == 1) {if(shi > 0){shi--;}}
}void displayTime(void) //刷新时间显示
{if(((smg_f == 0) && (set_flag == 1))|| (set_flag == 0) || (set_flag == 2) || (set_flag == 3)){c595_in(wei[0]); //先传位码c595_in(disp[shi/10]); //再传段码c595_out();delay2ms();c595_in(wei[1]); //先传位码c595_in(disp[shi%10]); //再传段码 c595_out();delay2ms();} c595_in(wei[2]); //先传位码c595_in(disp[16]); //再传段码 c595_out();delay2ms();if(((smg_f == 0) && (set_flag == 2))|| (set_flag == 0) || (set_flag == 1) || (set_flag == 3)){c595_in(wei[3]); //先传位码c595_in(disp[fen/10]); //再传段码c595_out();delay2ms();c595_in(wei[4]); //先传位码c595_in(disp[fen%10]); //再传段码c595_out();delay2ms();}c595_in(wei[5]); //先传位码c595_in(disp[16]); //再传段码 c595_out();delay2ms();if(((smg_f == 6) && (set_flag == 3))|| (set_flag == 0) || (set_flag == 1) || (set_flag == 2)){c595_in(wei[6]); //先传位码c595_in(disp[miao/10]); //再传段码c595_out();delay2ms();c595_in(wei[7]); //先传位码c595_in(disp[miao%10]); //再传段码c595_out();delay2ms();}
}void main(void)
{Timer_Init();Exint_Init();while(1){displayTime(); //刷新时间显示//检测启动按钮if(start_key == 0) //按下了启动、停止按钮{Delay1ms(10); //延时消抖if(start_key == 0){ET0 = 1; //T0中断允许打开,开始计时set_flag = 0;TR0 = 1;while(start_key == 0) displayTime(); //防止按键重复检测}}//检测停止按钮if(pause_key == 0) //已启动计时,并且暂停按钮按下{Delay1ms(10); //延时消抖if(pause_key == 0){ET0 = 0; while(pause_key == 0) displayTime(); //防止按键重复检测}}if(set_key == 0) //已启动计时,并且暂停按钮按下{Delay1ms(10); //延时消抖if(set_key == 0){ET1=1; set_flag++;if(set_flag == 4){set_flag = 1;}while(set_key == 0) displayTime(); //防止按键重复检测}}}
}
仿真源文件与keil工程百度网盘链接:https://pan.baidu.com/s/1L-FwKgHhRAUiHs6nwD4cBA
提取码:fqjd
相关文章:
51单片机通过级联74HC595实现倒计时秒表Protues仿真设计
一、设计背景 近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了51单片机通过级联74HC595实现倒计时秒表设计,倒计时精度达0.05s,解决了传统的由于倒计时精度不够造成的误差和不公平性,是各种体育竞赛的必备设…...
深信服技术认证“SCCA-C”划重点:深信服云计算关键技术
为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。“考试重点”内容框架,帮助大家快速get重点知识。 划重点来啦 *点击图片放大展示 深信服云计算认证(…...
Redis stream特性了解
在发布订阅中我们了解到发布订阅模式存在的无法持久化保存消息和对于离线重连的客户端不能读取历史消息的缺陷,以下就来了解一下stream是如何解决这个问题的 steam是类似于仅添加log的数据结构,提供了以下基本命令 XADD: 添加新条目到stream # 语法xadd…...
苍穹外卖项目可以写的简历和如何优化简历
文章目录 重点写中规写添加自己个性的项目面试会问道的问题 我是一名双非大二计算机本科生,希望我的分享对你有帮助,点赞关注不迷路。 简历编写一直是很多人求职人的心病,我自己上学期有一门课程是去校内企业面试,当时我就感受出…...
C++:智能指针
C在用引用取缔掉指针的同时,模板的引入带给了指针新的发挥空间 智能指针简单的来说就是带有不同特性和内存管理的指针模板 unique_ptr 1.不能有多个对象指向一块内存 2.对象释放时内部指针指向地址也随之释放 3.对象内数据只能通过接口更改绑定 4.对象只能接收右值…...
用户界面(UI)、用户体验(UE)和用户体验(UX)的差异
对一个应用程序而言,UX/UE (user experience) 设计和 UI (user interface) 设计非常重要。UX设计包括可视化布局、信息结构、可用性、图形、互动等多个方面。UI设计也属于UX范畴。正是因为三者在一定程度上具有重叠的工作内容,很多从业多年的设计师都分不…...
react 之 UseReducer
UseReducer作用: 让 React 管理多个相对关联的状态数据 import { useReducer } from react// 1. 定义reducer函数,根据不同的action返回不同的新状态 function reducer(state, action) {switch (action.type) {case INC:return state 1case DEC:return state - 1de…...
C++:this隐藏参数
你是否有一个问题:C中成员函数中究竟是如何访问成员变量的? 其实了解后回答起来这个问题很简单,通过一个不受限的隐藏参数this,this是类的指针,通过它可以访问到类内的各种成员。 明白了这个问题就很好理解ÿ…...
MySQL事务原理-相关日志
文章目录 前言一、什么是事务?1.1 事务概念1.2 事务的四大特性1.3 事务的隔离级别 二、实现原理2.1 TODO2.2 TODO 前言 事务是由MySQL的引擎来实现的,通过show engines命令查看MySQL存储引擎类别,观察只有InnoDB存储引擎支持事务。 一、什么…...
内核Oops的几种定位方法
反汇编 报错信息 [ 1.826455] ------------[ cut here ]------------ [ 1.831091] Kernel BUG at c011fef0 [verbose debug info unavailable] [ 1.837344] Internal error: Oops - BUG: 0 [#1] PREEMPT THUMB2 [ 1.843108] Modules linked in: [ 1.846158] C…...
外包干了10个月,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...
2024美赛C完整思路
首先,题目明确表示可以自行选择额外的玩家信息或其他数据。因此最好找一些其他选手的数据以扩大数据集,与其他选题人作出数据集上的区分。大数据集可以帮助后续的建模实验更准确。 第一问本质就是开发一个评价模型,主要针对运动员得分的时刻…...
Backtrader 文档学习- Broker - Cheat-On-Open
Backtrader 文档学习- Broker - Cheat-On-Open 1.概述 V1.9.44.116增加了Cheat On Open的支持。对于全押的人来说,这似乎是一个必需的功能,用bar的收盘价后进行计算,希望与开盘价相匹配。 当开盘价差距(上涨或下跌,取…...
基于微信浙江杭州某停车场车位预约小程序系统设计与实现 研究背景和意义、国内外现状
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
编程流程图
对于复杂流程,我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下: processOn: 这个是我之前 一直的选择,他可以画上面的这些,流程图,网页操作,但是他不是免费的,查过…...
2024年1月29日-2月4日(全面进行+收集虚幻商城免费资源)
从上周发现,一轮轮推就行,每轮多个时间片,每个时间片一门。周一到周五一轮,周六日多轮(比如上下午各一轮)。 周一: 7:09–9:20卫星导航定位(p3)&a…...
【python接口自动化】- 正则用例参数化
🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 …...
Java中的四种线程池详解及使用场景
前言 在Java并发编程中,JDK提供了一套强大的线程池工具类java.util.concurrent.ThreadPoolExecutor以及它的四个便捷工厂方法,这四种线程池分别对应不同的使用场景和特性。下面将详细介绍每种线程池的创建方式、工作原理以及适用场景。 1. CachedThrea…...
Google Chrome 常用的几个参数
1 右键--Google Chrome--属性--目标 参数作用--disable-infobars此计算机将不会再收到 Google Chrome 更新,因为 Windows XP 和 Windows Vista 不再受支持。适用于 xp、2003 的 49.x.x.x 版本。示例1--ingore-certificate-errors忽略证书错误--disable-background-…...
Keil软件某些汉字输出乱码,0xFD问题,51单片机
1. 问题 keil软件输入某些汉字的时候会输出乱码,例如:升、 数 2. 原因 keil软件会忽略0xFD。 升的GB2312编码为 0xc9fd,keil解析为0xc9数的GB2312编码为 0xcafd,keil解析为0xca 关于Keil软件中0xFD问题的说明 3. 解决方案1 …...
打工人必看!电脑突然罢工?阳光电脑维修上门服务救我于水火[特殊字符]
作为每天靠电脑办公的打工人,最崩溃的事情莫过于——电脑突然罢工,而手里还有紧急工作要赶!前几天晚上加班,台式机突然黑屏,按开机键没反应,键盘鼠标也没亮,急得我差点哭出来,第二天…...
FINCH聚类算法实战:5分钟搞定无参数聚类(附Python代码)
FINCH聚类算法实战:5分钟搞定无参数聚类(附Python代码) 在数据科学和机器学习领域,聚类分析一直是探索性数据分析的重要工具。传统聚类方法如K-means、DBSCAN等虽然广泛应用,但都面临一个共同挑战:需要人工…...
霜儿-汉服-造相Z-Turbo实战体验:输入一句话,秒获专属汉服少女AI写真
霜儿-汉服-造相Z-Turbo实战体验:输入一句话,秒获专属汉服少女AI写真 1. 惊艳效果展示:从文字到古风美图的魔法 想象一下,你只需要输入"霜儿,古风汉服少女,月白霜花刺绣汉服,江南庭院&quo…...
开源像素艺术工具推荐:Pixel Fashion Atelier vs Automatic1111定制化对比
开源像素艺术工具推荐:Pixel Fashion Atelier vs Automatic1111定制化对比 1. 工具概览 1.1 Pixel Fashion Atelier简介 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站。它采用独特的复古日系RPG界面设计,将AI图像生…...
Audio Pixel Studio效果惊艳集锦:10类垂直场景语音生成+分离真实案例
Audio Pixel Studio效果惊艳集锦:10类垂直场景语音生成分离真实案例 1. 引言:当声音创作变得触手可及 想象一下,你正在为一个短视频项目寻找合适的旁白配音,但预算有限,专业配音师的价格让你望而却步。或者ÿ…...
SWF逆向工程工作流优化:JPEXS Free Flash Decompiler效率提升技巧
SWF逆向工程工作流优化:JPEXS Free Flash Decompiler效率提升技巧 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler(简称FFDec&#…...
SEO_从基础到精通,系统学习SEO的完整路径解析
<h2>SEO的基础:了解搜索引擎优化的核心概念</h2> <p>搜索引擎优化(SEO)是一个广泛且复杂的领域,它的核心在于提升网站在搜索引擎结果页面(SERP)中的自然排名。了解SEO的基础概念是每一个…...
Qwen3-0.6B-FP8快速上手:无需CUDA环境的CPU友好型大模型对话工具指南
Qwen3-0.6B-FP8快速上手:无需CUDA环境的CPU友好型大模型对话工具指南 想体验大模型对话,但被动辄几十GB的模型和昂贵的显卡劝退?今天给大家介绍一个“小钢炮”——Qwen3-0.6B-FP8对话工具。它只有6亿参数,经过FP8量化后体积小巧&…...
B站视频下载终极指南:BilibiliDown的完整使用教程
B站视频下载终极指南:BilibiliDown的完整使用教程 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...
OpenClaw终端整合:QwQ-32B命令行操作增强方案
OpenClaw终端整合:QwQ-32B命令行操作增强方案 1. 为什么需要终端智能助手 作为开发者,我们每天要处理大量命令行操作。从简单的目录跳转、文件操作,到复杂的管道命令组合,再到调试报错信息,这些重复性工作消耗了大量…...
