51秒表计数器+倒计时(数码管两位数)

一:简介
我们实践的效果是用数码管显示0~99并在按下“转换键”后,实现60秒倒计时,并用蜂鸣器报警提示,兼并计数器和倒计时两种功能。
主要内容包括:
1.认识数码管
2.进行按键扫描
3.利用计时器计算分秒,利用中断将计算结果显示在数码管上。

二.硬件介绍

  1. 数码管相当于多个发光二极管组合,设想用它拼成了一个“8”,使用类型分为共阴和共阳。
    (共阳,即高电平接在一起,需要其他管脚输出相应低电平,即可点亮),共阴反之。

三.仿真电路图

功能介绍:
四,程序代码

#include "reg52.h"
#include "intrins.h"#define uint unsigned int
#define uchar unsigned charuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit L4=P2^3;
sbit L3=P2^2;sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
sbit K4=P1^0;
sbit K5=P1^1;
sbit K6=P1^2;
sbit beep=P2^4;uchar num,mum,n=0,m=60,shi,ge,shiw,gew;void delay(uint xms)               //延时子函数
{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);
}void Init()                            //初始化子函数
{TMOD=0X01;                        //设定定时器0的工作方式为1TH0=(65536-50000)/256;          //定时器装初值一个周期50msTL0=(65536-50000)%256;TH1=(65536-50000)/256;          //定时器装初值一个周期50msTL1=(65536-50000)%256;EA=1;                           //开总中断
}
void scankey()                                                //键盘检测子函数
{if(K1==0)                         //检测键是否被按下{ET0=1;TR0=1;}if(K2==0){ET0=0;TR0=0;}if(K3==0){ET0=0;TR0=0;n=0;num=0;ge=0;shi=0;P0=table[0];  }if(K5==0)                         //检测键是否被按下{ET1=1;TR1=1;}if(K6==0){ET1=0;TR1=0;}}void main()
{Init();          //初始化子函数调用    while(1)
{    scankey();         //不断键盘扫描            if(K4==1)          //不断键盘扫描   { L4=1;                          //打开数码管个位位选   P0=table[ge];               //数码管个位赋值delay(1);                  //延时 送入数据的反应时间L4=0;                        //关闭数码管个位位选delay(1);L3=1;                       //打开数码管十位位选   P0=table[shi];               //送入数据delay(1);                     L3=0;                          //关闭数码管十位位选delay(1);}else{   L4=1;                          //打开数码管个位位选  P0=table[gew];              //数码管个位赋值delay(1);                  //延时 送入数据的反应时间L4=0;                        //关闭数码管个位位选delay(1);L3=1;                       //打开数码管十位位选   P0=table[shiw];                  //送入数据delay(1);                     L3=0;                          //关闭数码管十位位选delay(1);}}}
void Timer0()interrupt 1
{TH0=(65536-50000)/256;               //定时器重装初值TL0=(65536-50000)%256;num++;if(num==20)                          //定时器每进行一个周期num加1,运行20个周期即为1s{num=0;                        //到1秒,num清0重新开始n++;                        //倒计时1秒if(n==99)n=0;shi=n/10;               //两位数分离赋给数码管十位显示ge=n%10;                   //两位数分离赋给数码管个位显示}
}   void Timer1()interrupt 3
{TH1=(65536-50000)/256;               //定时器重装初值TL1=(65536-50000)%256;mum++;if(mum==200)                 //之前的是20,运行不能实现,不过写200实测准确{mum=0;                        //到1秒,num清0重新开始m--;                          //倒计时1秒if(m==0){m=60;beep=0;delay(20);}shiw=m/10;                  //两位数分离赋给数码管十位显示gew=m%10;                      //两位数分离赋给数码管个位显示}
}   说明:1.代码并非最简,不过便于理解。
(详细工程已上传到下载中心,需要的可以自提)

51单片机0-99秒表计数器+60秒倒计时(数码管两位数)相关推荐

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

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

  2. 基于51单片机的电子秒表

    基于51单片机的电子秒表 电子秒表 基于51单片机的电子秒表 摘要 1 引言 段数码管以及按键的使用 2 总体设计方案 2.1 设计思路 2.2 设计方框图 3 设计原理分析 3.1 时钟电路的设计 ...

  3. 51单片机数码管显示60秒倒计时(C语言)

    51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...

  4. 0 99的计数器的C语言程序,单片机0~99计数器.doc

    单片机0~99计数器 目录 设计任务-------------------- .3 00~~99手动计数器设计程序框图-----------3 00~~99手动计数器的主程序------------- ...

  5. 利用51单片机制作一个秒表的详细过程

    利用51单片机制作一个秒表的详细过程 前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大 ...

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

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

  7. 利用51单片机+0.96寸iic接口oled显示图片或动图

    利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...

  8. 基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯

    基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯仿真设计 (程序+proteus仿真+报告) Proteus仿真版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C ...

  9. 数码管显示倒计时c语言程序,1~99秒倒计时数码管显示C程序+Proteus仿真

    1~99秒倒计时数码管显示C程序+Proteus仿真文件. 优化了程序,使用51单片机内部定时器,可以实现1-99秒内倒计时. 仿真效果为: 源程序为: /* 调试环境:Proteus 7.8AT89 ...

最新文章

  1. 城市智能化发展中,AI公司应该做什么?
  2. nofollow标签_网站nofollow标签的应用 - 最蜘蛛池博客
  3. 几种支持REST的Java框架
  4. 如何计算像素当量_基于非线性标定的桥梁裂缝精确视频测量技术研究
  5. 修改某个appointment已经存在的opportunity relation
  6. 如何高效学习前端新知识,我推荐这些~
  7. [No0000DB]C# FtpClientHelper Ftp客户端上传下载重命名 类封装
  8. java常用的统计_(OJ)Java常用类-统计数字次数
  9. 2的幂次方表示(信息学奥赛一本通-T1208)
  10. 用Dart搭建HTTP服务器(3)
  11. J2EE 读取资源文件properties的三种方式
  12. python json转xml_Python实现XML到JSON的转换并编写,python,xml,转化,为,Json,进行,写入
  13. ubuntu下git使用
  14. Kubernetes 中pod绑定node节点:固定节点nodeName和nodeSelector调度详解
  15. 免疫算法(matlab)
  16. 亲测:真正免费的音频转文字软件
  17. 常见的四种硬盘接口介绍
  18. ES基于Hbase二级索引
  19. java基础—java由来
  20. 联盛德 HLK-W806 (十二): Makefile组织结构和编译流程说明

热门文章

  1. 在matlab中find是什么意思,Matlab中find函数的使用说明
  2. 【数据分析】数据分析方法论
  3. 为安全起见 出差时可以将涉密计算机,张某因组织聚众扰乱公共秩序被公安机关行政拘留15日。张某提起行政诉讼的时限应自获得人身自由之日起...
  4. vb6.0 CLng,CInt等的bug及其解决办法
  5. 四级作文之观点评述型文章
  6. 计算机科学版面费,《计算机科学》版面费
  7. Python+Django基于python摄影展示个人相册系统#毕业设计(源码+系统+mysql数据库+Lw文档)
  8. 上传附件----q-uploader
  9. 【JMeter】阶梯式压测
  10. 介绍一款好用的头像上传插件