基于51单片机的倒计时定时器

要求:设计一个能够完成计时系统的系统,并且满足以下基本要求:
◉数码管上显示计时的时间。
◉可以通过按键实现1小时内初始时间的设定(以秒为分度),并且完成计时。
◉可随时暂停并且重新设置计时时间。
◉其他扩展功能

本人初学51单片机,有不当之处,欢迎在评论区指出。

主程序

/******************************
本程序是以一个倒计时定时器(计时完毕放歌)
******************************/
#include <STC89C5xRC.H>
#include "Delay.h"typedef unsigned char uchar;
typedef unsigned int  uint;void Smg_Xs();
void ShuZiJia();
void ShuZiJian();
void Song();
void timer0();
void timer1();uchar code g_caSmg_nodot[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code g_caSmg_dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint code Score[]={0,64400,64463,64524,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,65297,65311,65323,65335,65346,65357,65367,65377,65385};
uchar code suoyin[]=
{//1p,4+4,p,2,m3,1,m3,1,m3,2,m2,1,m2,1,m2,2,m1,2,l6,2,m1,2,p,2,m3,1,m3,1,m3,2,m2,2,m2,2,m1,1,m1,1,m5,2,m1,2,//2p,2,m1,1,m1,1,m1,2,m1,2,m1,2,l5,2,l5,2,m1,2,l7,2,l7,2,l7,2,m3,2+2,m2,2,l6,2,m1,1,0xff
};uchar g_cMiao1=0,g_cMiao2=0,g_cFen1=0,g_cFen2=0;
uchar g_cNum=0;
uint g_cJiShu=0;
uint suoyin_choice=0,Score_choice=0   ;void main()
{   while(1){Smg_Xs();if(P24==0)                  //按键1短按秒加一,长按秒持续加    {while(P24==0){Smg_Xs();timer0();Delay(10);while(P24==0){Smg_Xs();}Delay(10);if(g_cNum!=20){g_cNum=0;ShuZiJia();TR0=0;}else{g_cNum=0;TR0=0;}           }}if(P25==0)                  //按键2短按秒减一,长按秒持续减{while(P25==0){timer0();Delay(10);while(P25==0){Smg_Xs();}Delay(10);if(g_cNum!=20){g_cNum=0;ShuZiJian();TR0=0;}else{g_cNum=0;TR0=0;}}}if(P26==0)                 //按键3开始倒计时{Delay(10);while(P26==0)Smg_Xs();Delay(10);while(1){                    Delay(1);               Smg_Xs();g_cJiShu++;if(g_cJiShu==350)   //用Delay函数计时一秒,并是数码管数字减小{g_cJiShu=0;ShuZiJian();if(g_cFen1==0&&g_cFen2==0){if(g_cMiao1==0&&g_cMiao2==0){Song();}}       }if(P24==0||P25==0)break;if(P26==0||P27==0)break;}                                                                          }if(P27==0)                   //按键4短按分加一,长按分持续加{timer0();Delay(10);while(P27==0){Smg_Xs();}Delay(10);if(g_cNum!=20){g_cNum=0;g_cFen2++;if(g_cFen2==10){g_cFen2=0;g_cFen1++;if(g_cFen1==6 && g_cFen2==0){g_cFen1=0;g_cFen2=0;g_cMiao1=0;g_cMiao2=0;  }}TR0=0;}else{g_cNum=0;TR0=0;}           }}
}/******************************
*函数名称:Smg_Xs()
*函数功能:数码管动态显示
*函数调用:Smg_Xs();
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void Smg_Xs()
{P20=0;P0=g_caSmg_nodot[g_cFen1]; Delay(1); P20=1;P0=0xff;P21=0;P0=g_caSmg_dot[g_cFen2];      Delay(1); P21=1;P0=0xff; P22=0;P0=g_caSmg_nodot[g_cMiao1];  Delay(1); P22=1;P0=0xff; P23=0;P0=g_caSmg_nodot[g_cMiao2];  Delay(1); P23=1;P0=0xff;
}
/******************************
*函数名称:ShuZiJia()
*函数功能:数码管数字加
*函数调用:ShuZiJia();
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void ShuZiJia()
{g_cMiao2++;if(g_cMiao2==10){g_cMiao2=0;g_cMiao1++;if(g_cMiao1==6){g_cMiao1=0;g_cFen2++;                                    if(g_cFen2==10){g_cFen2=0;g_cFen1++;if(g_cFen1==6 && g_cFen2==0){g_cFen1=0;g_cFen2=0;g_cMiao1=0;g_cMiao2=0;                                    }}                                          }}
}
/******************************
*函数名称:ShuZiJian()
*函数功能:数码管数字减
*函数调用:ShuZiJian();
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void ShuZiJian()
{g_cMiao2--;if(g_cMiao2==-1){g_cMiao1--;g_cMiao2=9;                          if(g_cMiao1==-1){g_cFen2--;g_cMiao1=5;                                                                                               if(g_cFen2==-1){g_cFen1--;g_cFen2=9;                                 if(g_cFen1==-1){g_cFen1=0;g_cFen2=0;g_cMiao1=0;g_cMiao2=0;                    }}}}
}/******************************
*函数名称:Song()
*函数功能:蜂鸣器放歌
*函数调用:Song();
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void Song()
{timer1();while(1){suoyin_choice=0;Score_choice=0;while(1){   if(suoyin[suoyin_choice]!=0xff){       Score_choice=suoyin[suoyin_choice];suoyin_choice++;Delay1(130*suoyin[suoyin_choice]);suoyin_choice++;TR1=0;Delay1(5);TR1=1;  }else{          TR1=0;Delay1(1000);suoyin_choice=0;Score_choice=0;           }           }   }
}
/******************************
*函数名称:timer0()
*函数功能:计时检测按键状态(长按短按)
*函数调用:timer0();
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void timer0()
{TMOD=0x11;TH0=(65536-10000)/256;TL0=(65536-10000)%256;  EA=1;ET0=1;TR0=1;TF0=0;
}
/******************************
*函数名称:timer0_Routine()
*函数功能:计时器中断函数,实现按键长按数字持续增加或减少
*函数调用:
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void timer0_Routine() interrupt 1
{   char l_cJiShu=0;TH0=(65536-10000)/256;TL0=(65536-10000)%256; g_cNum++;if(g_cNum==20){if(P24==0){while(P24==0){l_cJiShu++;Smg_Xs();if(l_cJiShu==15){  l_cJiShu=0;Smg_Xs();ShuZiJia();}}TR0=0;}if(P25==0){while(P25==0){l_cJiShu++;Smg_Xs();if(l_cJiShu==15){    l_cJiShu=0;Smg_Xs();ShuZiJian();}}TR0=0;}if(P27==0){while(P27==0){l_cJiShu++;Smg_Xs();if(l_cJiShu==15){   l_cJiShu=0;Smg_Xs();g_cFen2++;if(g_cFen2==10){g_cFen2=0;g_cFen1++;if(g_cFen1==5 && g_cFen2==10){g_cFen1=0;g_cFen2=0;g_cMiao1=0;g_cMiao2=0;  }}}}TR0=0;}}
}
/******************************
*函数名称:timer1()
*函数功能:控制蜂鸣器声音频率
*函数调用:timer();
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void timer1()
{TMOD=0X11;TF1=0;TL1=0X00;TH1=0X00;TR1=1;ET1=1;EA=1;
}
/******************************
*函数名称:timer1_Routine()
*函数功能:控制蜂鸣器声音频率
*函数调用:
*参数表列:
*返回值:
*结果:
*备注:
******************************/
void timer1_Routine() interrupt 3
{if(Score[Score_choice]){TL1=Score[Score_choice]%256;TH1=Score[Score_choice]/256;P36=!P36;}
}

头文件

#ifndef  _DELAY_H_
#define  _DELAY_H_void Delay(unsigned char i);
Delay1(unsigned int ms);#define  p 0
//低音
#define l1  1
#define l1_ 2
#define l2  3
#define l2_ 4
#define l3  5
#define l4  6
#define l4_ 7
#define l5  8
#define l5_ 9
#define l6  10
#define l6_ 11
#define l7  12
//中音
#define m1  13
#define m1_ 14
#define m2  15
#define m2_ 16
#define m3  17
#define m4  18
#define m4_ 19
#define m5  20
#define m5_ 21
#define m6  22
#define m6_ 23
#define m7  24
//高音
#define h1  25
#define h1_ 26
#define h2  27
#define h2_ 28
#define h3  29
#define h4  30
#define h4_ 31
#define h5  32
#define h5_ 33
#define h6  34
#define h6_ 35
#define h7  36#endif

Delay函数

/******************************
*函数名称:Delay(unsigned char i)
*函数功能:延时
*函数调用:Delay(i);
*参数表列:i
*返回值:
*结果:
*备注:i=1延时0.5ms,i=2延时1ms
******************************/void Delay(unsigned char i)
{   unsigned char j;for(i;i;i--){for(j=249;j;j--);}}
void Delay1(unsigned int ms)        //@12.000MHz
{while(ms){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);ms--;}
}

本程序倒计时因要求使用Delay函数实现(还可用定时器实现,请自行探索)

51单片机倒计时计时器(计时结束闹钟)相关推荐

  1. 51单片机通过计时器实现倒计时

    51单片机通过计时器实现倒计时 文章目录 51单片机通过计时器实现倒计时 实验环境 仿真图 代码实现 成果图 实验环境 软件: Keil5+Proteus7 元件: AT89C51 * 1,7SEG- ...

  2. 秒表系统的设计c语言程序,51单片机秒表计时器课程设计报告(含C语言程序).doc...

    51单片机秒表计时器课程设计报告(含C语言程序) XXXXXX学院 51单片机系统设计 课程设计报告 题 目: 秒表系统设计 专业.班级: 学生姓名: 学 号: 指导教师: 分 数 : [摘要]本设计 ...

  3. 单片机c语言编程30倒计时,急求51单片机倒计时三十秒程序

    急求51单片机倒计时三十秒程序 关注:117  答案:2  手机版 解决时间 2021-01-31 06:56 提问者青春统帅 2021-01-30 16:36 第二位同志请补充一下注释 谢谢 最佳答 ...

  4. 基于51单片机的篮球赛计时计分器(仿真+源程序+原理图+PCB+论文)

    资料编号:207 功能介绍(全套毕设资料齐全) 采用51单片机一种篮球赛计时计分器的设计方法,即单片机带外围扩展来驱动数码管工作的电路.电路采用单片机作为核心元件,利用两个供阴的三位一体数码管来显示两 ...

  5. c语言时钟加秒表报告,51单片机秒表计时器课程设计报告(含C语言程序)-20210419061005.docx-原创力文档...

    XXXXXX学院 51单片机系统设计课程设计报告 题 目:秒表系统设计 专业.班级: 学生姓名: 学号: 指导教师: 分数: [摘要]本设计是一个秒表计时器,采用51单片机实现.电路包括以下儿部分:单 ...

  6. 单片机 c语言怎么写一个简易秒表?用一个键盘按键开始暂停的,51单片机秒表计时器课程设计报告(含C语言程序)...

    任务书 1.任务 设计一个秒表计时器,在51单片机的控制作用下,采用4个LED数码管显示时间,计时范围设置为00.0~60.0秒,即精确到0.1秒,用按键控制秒表的"开始".&qu ...

  7. c语言时钟加秒表报告,51单片机秒表计时器课程设计报告(含C语言程序)...docx

    - - PAGE # - - - PAGE # - XXXXX)学院 51单片机系统设计 课程设计报告 目:秒表系统设计 目: 专业.班级: 学生姓名: 学 号: 指导教师: [摘要] 本设计是一个秒 ...

  8. 五十九秒的秒表C语言程序,51单片机秒表计时器课程设计报告(含C语言程序)解读.doc...

    XXXXXX学院 51单片机系统设计 课程设计报告 题 目: 秒表系统设计 专业.班级: 学生姓名: 学 号: 指导教师: 分 数 : [摘要]本设计是一个秒表计时器,采用51单片机实现.电路包括以下 ...

  9. 秒表系统的设计c语言程序,51单片机秒表计时器课程设计报告(含C语言程序)详细分解.doc...

    XXXXXX学院 51单片机系统设计 课程设计报告 题 目: 秒表系统设计 专业.班级: 学生姓名: 学 号: 指导教师: 分 数 : [摘要]本设计是一个秒表计时器,采用51单片机实现.电路包括以下 ...

最新文章

  1. POJ 1556 The Doors(计算几何+最短路)
  2. 全球第三大手机操作系统!倒闭!
  3. VC6在64位Win7下调试无法退出的问题(缺少TLLOC.DLL和DM.dll)
  4. lambda层保存模型出错_保存您的lambda,以备不时之需-保存到文件
  5. 已知段地址,求CPU寻址范围
  6. 大数据之-Hadoop3.x_MapReduce_MapJoin案例需求分析---大数据之hadoop3.x工作笔记0133
  7. lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用
  8. snapgene怎么比对序列_找不到相似序列?快来Blast一下!
  9. 【LeetCode】【数组】题号:*448,没有出现数组中的数字
  10. python可以下载百度文库_百度文档,用Python一键免费下载
  11. R-CNN 原理详解
  12. 计算机专业导论论文范文,计算机新导论论文范文
  13. idea lanyu方式激活
  14. esp8266保存html文件,八,ESP8266 文件保存数据
  15. 第二篇:Haploview做单倍型教程2--分析教程
  16. 软考高级,考网规还是考项管?
  17. C和C++语言的注释
  18. 计算机网络MAC地址的作用
  19. 独家 | 哪个更好:一个通用模型还是多个专用模型?
  20. 电脑更新后突然检测不到外接显示器

热门文章

  1. 从事计算机视觉必知的「大牛」有哪些?
  2. 网页商品SKU(规格)选择
  3. python边缘坐标提取_python-从Shapely中的多边形中提取点/坐标
  4. 【Simapro软件教程】参数进行灵敏度分析
  5. 【Windows系统相关问题记录一】在原有Win10 EFI分区还在的前提下,使用DiskGenius误删EFI文件夹
  6. 批量添加AD账号(一)
  7. 这篇文章告诉你三个能给视频去水印的软件
  8. 视频分辨率、帧率和码率三者之间关系详解
  9. 有一种蓝叫 APEC 蓝
  10. windows系统开启虚拟化