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) fen=0; //超过60变0 } if(knum==3) { shi++; //小时加1 if(shi==24) shi=0; //超过24变0 } j=0; } //////////////////////////////////////减1按键////////////////////////////////////// if(key3==0) //减1按键 快速减数 { k++; if(k >= 3000) //长按,数码管扫描放中断里面,这里的值就要取得大才行 { //因为没用delay延时,CPU跑的很快 if(knum==1) { miao--; //秒钟减1 if(miao==255) miao = 59; //小于0就等于59 } if(knum==2) { fen--; //分钟减1 if(fen==255) fen=59; //小于0就等于59 } if(knum==3) {
上一篇:课程设计题十:简易电子琴设计
下一篇:课程设计题八:篮球比赛计分器
推荐阅读
史海拾趣
为了进一步扩大市场份额,CML Microcircuits公司开始积极拓展全球市场。通过与当地代理商和分销商建立合作关系,CML的产品逐渐进入了全球各地的电子市场。同时,公司还设立了多个海外研发中心和销售中心,以便更好地服务全球客户。这些举措不仅提升了CML的品牌知名度,也为其带来了更多的商业机会。
在LED产业蓬勃发展的背景下,统明亮(DOMINANT)公司在2000年应运而生。它的诞生源于欧司朗(OSRAM)在马六甲工厂的分拆,加上马来西亚财团的加持,这家新公司迅速崭露头角。统明亮公司从成立之初就专注于LED技术的研发和生产,凭借其卓越的技术实力和创新能力,逐渐在电子行业中树立了良好的口碑。经过数年的不懈努力,统明亮在全球贴片式LED领域取得了领先地位,特别是在车用LED封装领域,其产品质量和技术水平均处于行业前列。
Euroquartz在技术创新方面始终保持领先地位。公司推出的新款超薄MEMS滤波器系列产品,就是其技术实力的最好体现。这些滤波器在制造过程中,对互调失真及相位和振幅匹配等特性进行了优化,提供了从音频到3GHz的宽泛可选频率范围,最大功率可达200W。这些创新产品不仅满足了市场的需求,也进一步巩固了Euroquartz在电子元器件行业的领先地位。
面对不断变化的市场环境和客户需求,Euroquartz始终保持敏锐的洞察力和快速的反应能力。公司不断投入研发力量,推动产品创新和技术升级。同时,Euroquartz也注重与客户的沟通和合作,深入了解市场需求,为客户提供更加专业和贴心的服务。这种持续发展的动力,使Euroquartz在电子行业始终保持领先地位,并为公司的未来发展奠定了坚实的基础。
请注意,由于篇幅限制,以上每个故事都是基于Euroquartz公司的重要事件和事实进行概括和简化的。如果需要更详细的信息或更深入的分析,建议查阅相关报道或公司官方资料。
随着电子行业的快速发展,驰兴电感紧跟市场趋势,不断拓展产品应用领域。除了传统的消费电子和通讯领域外,驰兴电感还成功将产品应用于汽车电子、网络通讯、智能家居等新兴领域。这些领域的拓展不仅为公司带来了更广阔的市场空间,也进一步提升了驰兴电感在电子行业中的地位。
Carlisle Interconnect Components公司深知品质是赢得市场的关键。因此,公司建立了严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都严格把控。这种对品质的执着追求,使得公司的产品在国际市场上获得了良好的口碑。同时,公司还积极拓展海外市场,与多家国际知名企业建立了稳定的合作关系,进一步提升了公司在全球电子连接器市场的影响力。
找人陪我一同参加美国NI公司的电源开关研讨会,我已经报名了。 美国NI公司将于2009年08月14日在东莞举办消费电子测试——开关电源测试专题免费技术研讨会。这次是中国电子工程科技网主办的,大家可以到http://www.360eet.com/em/dg0814/报名。以前参加过她们的会议,感觉很不错的哦。 要不是觉得论坛里的人好, ...… 查看全部问答∨ |
|
大家好: 小弟机电类本科毕业1年多了,现在决定从事单片机研发类工作,但是没有相关工作经验,也没项目经历,这样的情况应该怎样才能踏入这行,迈过这个门槛呢? 望前辈们赐教啊… 查看全部问答∨ |
|
建了个《Linux内核0.11完全注释/剖析》学习群:33261729 顺便散点分,呵呵! 首先声明我很菜的(业余时间正在自学保护模式和引导部分),以前学过点Win32 SDK/MFC,可惜从未有机会用过,目前做Window应用(C#.Net) 在Windows下做开发,总有种蒙蒙眬眬,说不清道不明的感觉,所以想看看Linux,希望能找到答案,当然也是从个 ...… 查看全部问答∨ |
摘要 :介绍了一种基于LPC2104微控制器及嵌入式实时操作系统 IzC/OS2的转速测量装置。说明其工作原理的同时,着重分析了测量精度;并就系统总体结构、硬件选择、txC/OS2的应用作了论述。 I 前言 频率 (转速)是电力 ...… 查看全部问答∨ |