课程设计题九: 倒计时时钟设计

2019-09-29来源: eefocus关键字:倒计时  时钟  STC89C51

1)设计任务:完成倒计时时钟的设计。


2)指标要求


(1)能够分钟级的倒计时,分钟和秒显示。


(2)倒计时的起始值可以设置。


(3)具有暂停和清零按钮,倒计时结束报警。


(4)供电电压3.3V/5V。


一、Protues仿真图:

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

/*******************************************************************************

================================================================================

【平    台】STC89C51_sumjess平台

【编    写】sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2019年06月10日

【相关信息参考下列地址】

【网    站】

           https://blog.csdn.net/qq_38351824

           http://www.51hei.com/bbs/mcu-2-1.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.02及以上版本

【Target  】STC89C51

第一次修订:2019/05/09

第二次修订:2019/05/21

第三次修订:2019/06/10

【problem 】

    (1)库内补充的不全面;

    (2)库内解释部分不全面;

    (3)库内还存在一定的bug;

【direction】

      下一步的目标就是把库继续集成!

【explain 】

      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!

【warning】

      目前程序中暂无错误 !   

---------------------------------------------------------------------------------

没有完美的代码,只有不断的奉献,大家一起努力;

赠人玫瑰手留余香,欢迎大家反馈bug!

================================================================================

********************************************************************************/

#include

 

#define uchar unsigned char

#define uint  unsigned int

 

#define duan P1 //段选

#define wei  P3 //位选

sbit key1 = P2^3;   //设置

sbit key2 = P2^4;   //加

sbit key3 = P2^5;   //减

sbit key4 = P2^6;   //启动

sbit key5 = P2^7;   //手动

sbit out  = P2^2;   //输出控制 ,低电平有效

sbit di   = P2^0;   //蜂鸣器

 

bit flag=0,flag1=0,shan=0;

uchar knum,shan_cont,i;

uchar shi=0,fen=0,miao=0;  //时分秒

uint cont,cont1,cont2;

uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴段码表

                   //  0  1 2   3    5 6 7   8   9

uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};           //位码        加反相器用

   //  1   2    3    4   5     6    7    8

uchar LedBuff[]={0,0,0,0,0,0,0,0};                                      //数码管显示缓冲区

 

void init() //定时器初始化

{

TMOD |= 0x01;             //设置定时器0为工作方式1(M1M0为01)

TH0 = (65536-1000)/256;   //1ms初值 @12MHz

TL0 = (65536-1000)%256;

EA = 1;   //开总中断

ET0 = 1;   //开定时器0中断

TR0 = 1;          //启动定时器0

}

 

void dis()          //显示函数

{

        LedBuff[0] = duanma[miao%10];

        LedBuff[1] = duanma[miao/10];

        LedBuff[2] = 0x40;

        LedBuff[3] = duanma[fen%10];

        LedBuff[4] = duanma[fen/10];

        LedBuff[5] = 0x40;

        LedBuff[6] = duanma[shi%10];

        LedBuff[7] = duanma[shi/10];

}

 

 

void keysan() //按键扫描函数

{

static bit  kf1=0,kf2=0,kf3=0;   //自锁标志,这里一定要加static(或者用全局变量),否则按键不灵

static uint i=0,j=0,k=0,l=0,m=0; //消抖延时变量

//////////////////////////////////////启动/暂停键//////////////////////////////////////

if(knum==0)    //只要时分秒都不等于0

{

    if(key4 == 1)    //启动 暂停键

    {

        m=0;    //按键消抖计时变量清零

        kf2=0;    //按键自锁标志清零

    

    }

    else if(kf2 == 0 ) //有按键按下,且是第一次被按下

    {

        ++m;  //消抖

        if( (m>20) && ((miao != 0) || (fen != 0) || (shi != 0)) )

        {       

   //时分秒都为0时,不能启动输出,只要其中之一不为0,就能启动输出

                m=0;    //按键消抖计时变量清零

                kf2=1;    //自锁按键置位,避免一直触发

                flag = !flag;  //启动、暂停计时标志

                out  = !out;   //LED状态取反

        }

    }        

}          

 

//////////////////////////////////////启动/暂停键//////////////////////////////////////         

if(out==1)            //加这句,只有在输出关闭的时候,才能设置计时时间,在倒计时的过程中是不能设置的

{

    if(key1==1)   //设置   //IO是高电平,说明按键没有被按下,这时要及时清零一些标志位

    {

        i=0;           //按键消抖计时变量清零

        kf1=0;         //按键自锁标志清零

    }

    else if(kf1 == 0)  //有按键按下,且是第一次被按下

    {

        ++i;    //消抖

        if(i>12)

        {

            i=0;    //按键消抖计时变量清零

            kf1=1;         //自锁按键置位,避免一直触发

            knum++;    //调节时分秒--->123

            if(knum==4) knum = 0;  //按第四次关闭设置

        }        

    }

}

//////////////////////////////////////加1按键//////////////////////////////////////

if(key2==0)                     //加1按键 快速加数

{

        j++;

        if(j >= 3000)           //长按,数码管扫描放中断里面,这里的值就要取得大才行

        {                       //因为没用delay延时,CPU跑的很快

                if(knum==1)

                {

                    miao++; //秒钟加1

                    if(miao==60) miao = 0; //超过60s变成0

                }

                if(knum==2)

                {

                        fen++; //分钟加1

                        if(fen==60) fen=0; //超过60变0

                }

                if(knum==3)

                {

                        shi++; //小时加1

                        if(shi==24) shi=0; //超过24变0

                }

                j=1000;           //这里j的值可以设置连加的快慢,j的值越大就越快

        }                         //因为初值越大,加到3000的时间就越短

}          

else //慢速加数

                if(knum==1)

                {

                    miao++; //秒钟加1

                    if(miao==60) miao = 0; //超过60s变成0

                }

                if(knum==2)

                {

                        fen++; //分钟加1

if(fen==60) f

[1] [2] [3]
关键字:倒计时  时钟  STC89C51 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476082.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:课程设计题十:简易电子琴设计
下一篇:课程设计题八:篮球比赛计分器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

分享一个按键消抖和数码管显示都不用延时函数的倒计时器
最近一直在研究程序中怎么取消延时函数,经过一段时间的摸索,终于有所收获,随手写了个倒计时器,倒计时器在生活中很多地方都会用到,只要把电路稍加改进,就可以做成很实用的东西,程序仿真通过,等有时间做成实物,先把程序发上来分享一下。随便截了几张图。仿真界面:程序界面:源程序,写得比较粗糙,喜欢的可以共同研究一下
发表于 2019-10-17
分享一个按键消抖和数码管显示都不用延时函数的倒计时器
新iPhone亮相倒计时,供应链迎备货潮
苹果今年新iPhone将在9月的秋季发布会上亮相,台湾供应链预计7月底、8月初迎接备货潮。据悉,今年新iPhone供应链大致与去年一样,核心处理器由台积电代工,声学元件是康控、美律,镜头模组以大立光为主,机壳由鸿准、可成、铠胜三家供货,组装代工则是鸿海、和硕等负责。业内人士认为,依照往年iPhone拉货时程,7月底应该是零组件小量出货,8月开始大量交货,9月则是由组装厂出货。若10月实际销售状况优于预期,零组件厂有可能获得追加订单,整体而言,苹果供应链下半年业绩优于上半年。针对新iPhone出货动态,国内供应链厂商均不愿评论,但按过往惯例,7、8月将是零组件厂积极交货的关键时间点。据悉,苹果新iPhone型号已在欧亚经济委员会(EC
发表于 2019-07-09
慕尼黑上海电子展与电子生产设备展开展倒计时
亚洲电子行业重要盛事——慕尼黑上海电子展(electronica China)与慕尼黑上海电子生产设备展(productronica China)将于2019年3月20-22日在上海新国际博览中心拉开帷幕。上千家全球知名的电子半导体与电子制造业领军企业、预计超过8万名各应用领域的电子研发工程师和企业决策者集聚一堂,与您零距离互动交流。  ● 展会时间:2019.3.20-22● 展会地点:上海新国际博览中心E1/E2/E3/E4/E5/E6/C1/C2/C3/C4/W1馆● 展商数量:超1,500家● 观众人数:近85,000名● 展示面积:90,000平方米
发表于 2019-03-18
慕尼黑上海电子展与电子生产设备展开展倒计时
慕尼黑上海电子展倒计时,一睹未来电子新科技
作为亚洲重要的电子行业展会,慕尼黑上海电子展(electronica China)是向各应用行业发布新产品及解决方案的理想平台。涵盖了半导体、传感器技术、微纳米系统、电源、无源元件、开关及连接器技术,全方位展示电子产业链的关键环节。今年3月慕尼黑上海电子展将在上海新国际博览中心将联合同期的慕尼黑上海电子生产设备展(productronica China)再次举行。上千家全球知名的电子元器件公司,近8万名各应用领域的电子研发工程师和企业决策者集聚一堂,与您零距离互动交流。 慕尼黑上海电子展展会时间:2019.3.20-22展会地点:上海新国际博览中心C1/C2/C4/E4/E5/E6馆展商数量:超1,500&nbs
发表于 2019-03-04
慕尼黑上海电子展倒计时,一睹未来电子新科技
iQOO新品发布会倒计时1天
3月1号,iQOO旗舰级手机新品将于深圳正式亮相,发布会整体进入倒计时。作为vivo全新子品牌,iQOO定位于互联网新一代的对科技、极致性能在意的人群,配置全面、性能强悍是iQOO的最大特点。采用骁龙855处理器、12G运存的iQOO旗舰手机运行流畅不卡顿,44W快充和4000毫安超大锂电池为iQOO保驾护航,Super HDR、4D震动、NFC等配置进一步提升用户体验。处理器,手机产品最核心部件。iQOO采用高通最先进的骁龙855处理器,性能强悍、功耗较低,在保证手机性能的同时延长续航。电池部分,iQOO使用了4000毫安超大锂电池,是骁龙855处理器和12G运存组合最有力的续航保证,特效全开的情况下最大限度提高用户体验,不再为
发表于 2019-03-01
iQOO新品发布会倒计时1天
PIC单片机上实时时钟PCF8563测试程序
..............................PCF8563测试程序主函数..........................................................................................................................................................................................#include#include "pcf8563.h"#include "IIC.h"__CONFIG(FOSC_INTOSC&W
发表于 2019-11-15
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved