单片机实现秒表计数器

最近博主在学习单片机的课程,这快到期末考试了,老师让做个简单的课设,我看了看老师给的课题,感觉这个比较容易实现,今天下午花了两个小时左右的时间,把仿真程序电路图画好了,现在分享大家,希望大家批评改正。
实验器材:**单片机、按钮、电阻、PNP型三极管、有源蜂鸣器、共阴极数码管

实现的功能

  1. 通过按键实现倒计时

  2. 逐秒倒计时

  3. 使用4为一体数码管显示时间

  4. 时间到发出警报声,或者在数码管闪烁显示0000

仿真电路图:推荐使用网络标号连接电路图,这样作图较为专业,适合以后的大点的作图方式。网络标号相同的即为相连接的,图貌似不是很清晰,如果看不清,评论区留言,我发给你proteus仿真文件。

程序代码:148行程序,不是太长

//尽本人最大的努力,将程序中的每条语句较为详细的讲解
#include <reg51.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
uchar count=0,minute=0,second=3,flag=0,stop=0;
uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
uchar disbuf[4]={0};//位选定义一个四位的数组,循环扫描显示相应的内容
sbit buzzer=P1^0;//定义单片机的相应引脚
sbit P1_1=P1^1;
sbit P1_2=P1^2;void delay_ms(uint x) //延时消抖函数
{uint t; while(x--) for(t = 0; t < 120; t++);
}void display()//模块化书写函数,进行相应的调用,实现模块化编程
{uchar i,j;uchar sel;disbuf[0]=second%10; //disbuf[]每一个元素赋值,对秒赋值disbuf[1]=second/10;disbuf[2]=minute%10;//对分钟赋值disbuf[3]=minute/10;P2=0XFF;     //P2口接数码管的位选端,选择哪个数码管工作  共阴极数码管,位选0时有效  先置FF,使为选段为高电平,数码管不工作sel=0x01;//定义一个扫描的位选端for(i=0;i<4;i++){j=disbuf[i];  //扫描依次显示四个数码管  上面的赋值已经将disbuf数值更改,也就是1~9P0=table[j]; //将字形码发送到P0端口,显示位的数据P2=(sel^0xff); // ^异或相异为1,保证每次都有一个数码管点亮delay_ms(1); // 延时后,防止程序运行太快,跑飞P2=0XFF;sel=sel<<1;  //  左移运算  0x01左移,1将依次在四位上循环}
}void modify_time()//更改计时器时间的函数,修改初始定时时间
{if(flag==0)//修改秒{second++;if(second==60)//秒的最大为60,然后会发生进位{second=0;disbuf[0]=0;disbuf[1]=0;}}else//修改分钟{minute++;if(minute==60)//分钟最大为60,到60以后会发生进位{minute=0;disbuf[2]=0;disbuf[3]=0;}}}
void main(void)//主函数{ TMOD=0x01;//定时器T0,工作方式1,为16位定时器TH0=(65536-50000)/256;//高8位赋值TL0=(65536-50000)%256;//低8位赋值TR0=0;//默认情况下,定时器不工作,在外部的触发情况下,定时器,工作,开始减1运算ET0=1;//打开定时器T0的中断IT0=1;//设置外部中断0的触发方式EX0=1;//打开外部中断的中断IT1=1;//设置外部中断0触发方式EX1=1;//打开外部中断1中断EA=1;//总中断while(1){if(stop==1)//当计时倒计时完成以后,屏幕闪烁显示{while(1){P2=~P2;delay_ms(150);}}elsedisplay();//调用显示函数,依次减一if(!P1_1)//判断更改时间按键是否按键  进行相应的消抖{while(!P1_1)  delay_ms(10);  if(P1_1)modify_time();//调用调日期时间的函数}    }}void inter1() interrupt 1//定时器T0的中断
{count++;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(count==20)//50ms   20次即为1s{   count=0;second--;if(second==0)//该处的程序结构应该仔细看下{if(minute!=0)//防止minute最后为0的时候,还执行minute--,使程序出错。{minute--;second=60;second--;if(second==0){    if(minute==0){second=0;minute=0;TR0=0;count=0;buzzer=0;stop=1;}}}else{second=0;minute=0;TR0=0;count=0;buzzer=0;stop=1;}}}
}void inter0() interrupt 0//外部中断0
{flag=~flag;//flag参数的作用,是修改定时时间的时,确定是分钟位还是小时位。}void inter2() interrupt 2//外部中断1
{TR0=~TR0;//按键3,奇数次按下,定时器开始工作,偶数次关闭。
}

所用器材的介绍
PNP型三极管:判断的依据,可根据,箭头方向来判断,箭头向外NPN,箭头向内PNP
蜂鸣器:选择无源蜂鸣器 并且将电压设置为2V,如果不这样设置,可能蜂鸣器不发声。
需要源程序和仿真文件的评论区留言哦。我可以私发给你呢。

工程文件自取:
https://pan.baidu.com/s/15O345ks9apFupH5Q-4swNw
提取码:4qfb

点赞、点赞、点赞

单片机实现秒表倒数计数器相关推荐

  1. 基于单片机的音乐倒数计数器

    目录 1 设计任务书 1.1 基本设计要求 1.2 选做项目 2 设计阐明 2.1设计内容 2.2设计要求 2.3设备及工作环境 3 系统方案整体设计 3.1 设计思路 3.2 系统整体框图 4 硬件 ...

  2. 单片机秒表c语言,单片机制作秒表计时器(c语言)

    利用计数器中断,外部中断(按钮)编写的机遇c语言的秒表计时器 利用单片机制作秒表计时器 (c语言) #include//包含单片机对应的头文件 int MM=0,SS=0,MS=0; int time ...

  3. 单片机 中断秒表 c语言程序,51单片机c语言的秒表设计.doc

    51单片机c语言的秒表设计.doc 课程设计报告 基于AT89C51单片机的秒表设计 院 系 电子信息工程学院 专 业 电子信息工程 1 姓 名 摘 要 本设计是设计一个单片机控制的多功能秒表系统. ...

  4. 单片机c 语言0-99,单片机“0~99”加法计数器程序的设计51单片机原理及应用.doc...

    单片机"0~99"加法计数器程序的设计51单片机原理及应用 课 程 设 计 课程名称51单片机原理及应用题目名称单片机"0~99"加法计数器程序设计专业班级学生 ...

  5. 51单片机内部定时器/计数器实验

    51单片机内部定时器/计数器实验 一.实验内容 使用MCS-51内部定时/计数器,定时1秒钟,CPU运用定时中断方式,实现每1秒钟输出状态发生一次反转,即发光管每隔1秒钟亮一次(P1.7接LED). ...

  6. c51单片机秒表程序c语言,利用51单片机制作秒表的详细过程

    前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才 ...

  7. 基于51单片机实现秒表_☆往事随風☆的博客

    基于51单片机实现秒表 前言 一.实现功能 二.关键程序 (1)key函数 (2)display函数 (3)中断函数 三.完整程序 四.仿真 五.效果展示 六.项目地址 前言 基于51单片机实现一个共 ...

  8. 51单片机0-99秒表计数器+60秒倒计时(数码管两位数)

    51秒表计数器+倒计时(数码管两位数) 一:简介 我们实践的效果是用数码管显示0~99并在按下"转换键"后,实现60秒倒计时,并用蜂鸣器报警提示,兼并计数器和倒计时两种功能. 主要 ...

  9. 51单片机 简易秒表计时器(100秒) 小数点后四位

    51单片机制作简易秒表,精确到小数点后四位(即0.0001s)的制作,使用到单片机定时器部分,数码管部分. 程序上分为: 1.延时函数 用来延时让数码管动态显示 2.定时器/计数器初始化函数 3.显示 ...

最新文章

  1. Jsp中的动态INCLUDE和静态INCLUDE的区别?
  2. JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码)
  3. 李宏毅机器学习完整笔记发布,AI界「最热视频博主」中文课程笔记全开源
  4. Android学习之网上商城(上)
  5. OpenShift 4 - 解决 OpenShift 中 elasticsearch 环境的 Log4j 漏洞
  6. ADO.NETv2.0的一些特征
  7. 0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚
  8. 翻译www.djangobook.com之第一章:Django介绍
  9. WAP1.X/WAP2.0以及WAP浏览器的协议版本
  10. 2020年日历电子版(打印版)_2020年日历全年表黄历-2020年日历打印版下载 A4横版带农历--pc6下载站...
  11. HIGEN海坚驱动器维修FDA7045伺服变频器维修
  12. 5GHz WIFI DFS测试介绍
  13. 看了《麦田里的守望者》
  14. 寒假每日一题题解(1.29)摘花生(DP水题)
  15. mfc 中如果存在sleep延时后按钮无法响应解决方案
  16. 和风天气 (简易版)
  17. 转载的一篇存储图片等信息的还不错的文章
  18. 想拿互联网大厂的前端offer, 除了技术,你还差什么?
  19. prism RegionContext(区域上下文)
  20. cass转换jpg_cass怎么把图变成整体

热门文章

  1. 新标准 USB4 2.0 有多快?
  2. 官网快速下载VScode
  3. 太好了!好多好多偏方
  4. 实验一:linux 系统安装与初用
  5. android 新浪财经截屏分享,QQ浏览器HD 2.2:独创截屏分享至微博
  6. 乐视体感astra pro深度摄像头在ros系统获取 深度图像 彩色图像 无色彩点云数据 彩色点云数据
  7. 自己写富文本编辑器jss_JSS选择器和语法规则
  8. realtek是什么意思_Realtek是什么意思
  9. Copyleaks:AI抄袭和内容检测工具
  10. 记事本 App 之我见