用STC89c52单片机,12M晶振。计时用T2定时器,16位自动重装模式 基本功能如下: 可以显示年份、月、日、时间,有闹钟功能,有倒计时功能。 上电默认显示时间,可通过按键切换显示年份、日期、闹钟、倒计时,显示一定时间后自动返回到时间显示。 在相应的显示状态下按设置键进行相应的设置。如在时间显示时按设置键可调整时间。其余类推倒计时最多可以倒数99小时59分59秒,设置完倒计时时间后进入倒数状态,闪烁显示倒数时间,中途可按键退出,倒数结束后铃响1分钟返回时间显示。 闹钟可选择开或关,闹铃响1分钟停止。
电路原理图如下:
制作出来的实物图如下:
单片机源程序如下:
#include #define uchar unsigned char #define uint unsigned int #define DispOFF 10; //显示关 #define POINT 21; //显示小点 #define F 22; #define H 23; #define M 24; #define N 25; #define O 26; sbit buzzer=P3^7; //蜂鸣器控制脚 uchar T2Count; uint T0Count; uchar key,key_new,key_old,KeyPressTime; uchar status; uchar month,day,hour,min,sec,AlarmHr,AlarmMin; uchar LastDay; uchar AlmTime,AlmCount,DispTime; uchar CountHr,CountMin,CountSec,CountSetSta=0; uint year; bit TimeAdj,AlarmAdj,AlarmSta; bit adjust,DigiBit; //数码管显示代码 uchar code LedCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff, 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f, 0x8e,0x89,0xc8,0xab,0xa3 }; uchar Disp[4]; void LedScan(void); void KeyScan(void); void years(void); void date(void); void timer(void); void alarmClock(void); void CountDown(void); void ring(void); uchar DaysCount(void); void Init(void) { TH2=0x3c;TL2=0xb0; RCAP2H=0x3c;RCAP2L=0xb0; EA=1;ET2=1; TR2=1; TMOD=0x01; //TH0=0x3c; //TL0=0xb0; ET0=1; P1=0xff; year=2011; month=1; day=1; hour=0; min=0; status=2; buzzer=1; } /************主函数*************/ void main(void) { Init(); while(1) { KeyScan(); LastDay=DaysCount(); switch(status) //显示状态 { case 0:years();break; //显示年 case 1:date();break; //显示日期 case 2:timer();break; //显示时间 case 3:alarmClock();break; //显示闹钟时间 case 4:CountDown();break; //显示倒计时 } LedScan(); ring(); } } /***************定时器T0中断函数,用于倒计时**************/ void timer0(void) interrupt 1 using 2 {TH0=0x3c; TL0=0xb0; T0Count++; if(CountHr||CountMin||CountSec) {if(T0Count==20) {CountSec--;T0Count=0;} if(CountSec>=60) {CountSec=59;CountMin--;} if(CountMin>=60) {CountMin=59;CountHr--;} } if(T0Count==1200) {TR0=0; T0Count=0; } } /**************定时器T2中断函数,用于计时**************/ void timer2(void) interrupt 5 using 1 { TF2=0; if(++T2Count==20) {sec++;T2Count=0;} if(!TimeAdj) //时间调整时,暂停计时 {if(sec==60) {min++;sec=0;} if(min==60) {hour++;min=0;} if(hour==24) {day++;hour=0;} if(day>LastDay) {month++;day=1;} if(month>12) {year++;month=1;} } } void delay(uchar x) { uchar k; while(x--) for(k=0;k<123;k++); } /***********数码管扫描显示函数***************/ void LedScan(void) { uchar i; uchar temp=0x08; for(i=0;i<4;i++) { P0=LedCode[Disp[i]]; //送段码 P2=~temp;temp>>=1; //LED显示位控制 delay(3); //延时 P2=0xff; //关显示 } } /**********按键扫描程序***************/ void KeyScan(void) { if((P1&0x0f)!=0x0f) //如果按下按键 {if(KeyPressTime>0) //延时 { switch(~(P1|0xf0)) //判断键值 { case 0x01:key_new=1;break; case 0x02:key_new=2;break; case 0x04:key_new=3;break; case 0x08:key_new=4;break; } } KeyPressTime++; //按键时间加1 } else //如果没有按键按下 {key_new=0; //键值清零 KeyPressTime=0; //按键时间清零 } if(key_new!=key_old) //如果前后两次键值不同 {key=key_new; //键值等于本次键值 } else //如果前后两次键值相同(按住按键未释放) {key=0; //键值清零 if(KeyPressTime>100) //按键时间大于100,差不多1秒(作长按键处理) {KeyPressTime-=30; //按键时间减30,当累加到100再次动作,相当于300毫秒按键一次, key=key_new; //得到本次键值 } } key_old=key_new; //记住本次键值 } /***********计算本月有多少天**************/ uchar DaysCount(void) { if(month==4||month==6||month==9||month==11) //4、6、9、11月为30天 return 30; else if(month!=2) //1、3、5、7、8、10、12月为31天 return 31; if(month==2) {if((year%4==0&&year%100!=0)||(year%400==0)) return 29; //闰年2月为29天 else return 28; //非闰年2月为28天 } } /**************年函数**************/ void years(void) { if(adjust) //设置,调整年 { switch(key) //处理按键 {case 1:{ year++; //年加1 break; } case 2:{ year--; //年减1
上一篇:基于51单片机的红外智能风扇程序
下一篇:51单片机控制12864液晶显示屏显示图片
推荐阅读
史海拾趣
Amphenol Corporation,通常简称为Amphenol,是一家全球领先的连接技术公司,提供广泛的连接器解决方案,涵盖了航空航天、汽车、通信、工业、医疗和军事等多个领域。以下是关于Amphenol公司发展的五个相关故事:
创立与起步阶段:Amphenol公司成立于1932年,总部位于美国康涅狄格州沃拉姆。最初,公司致力于生产无线电连接器,并通过不断的创新和技术改进,逐步发展成为连接器行业的领导者之一。在第二次世界大战期间,Amphenol公司为美国军队提供了大量的军用连接器,为公司的发展奠定了坚实的基础。
技术创新与产品多样化:随着电子技术的不断进步和市场需求的不断变化,Amphenol公司不断进行技术创新,拓展产品线的多样性。除了传统的连接器产品,公司还开发了许多新型连接器,如光纤连接器、高速数据连接器、环境密封连接器等,以满足不同行业的需求。
全球化发展与市场拓展:Amphenol公司在全球范围内建立了广泛的销售网络和生产基地,实现了全球化布局和市场覆盖。公司在美国、欧洲、亚洲和其他地区设有多个生产工厂和研发中心,为客户提供当地化的服务和支持。通过不断扩大市场份额和提升产品质量,Amphenol公司成为了全球连接器市场的主要参与者之一。
客户合作与定制化解决方案:Amphenol公司与客户建立了紧密的合作关系,根据客户的需求和应用场景,提供定制化的连接器解决方案。公司的工程团队与客户共同设计和开发符合特定要求的产品,为客户提供专业化和个性化的服务。这种定制化解决方案能够满足客户多样化的需求,增强了公司在市场上的竞争优势。
质量管理与持续改进:Amphenol公司高度重视产品质量管理,严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系通过了ISO 9001质量管理体系认证,并持续进行质量改进和技术创新。此外,Amphenol公司的产品还通过了各种行业认证和标准,如航空航天领域的AS9100认证等,确保产品的可靠性和稳定性。
这些故事展示了Amphenol公司从创立初期到如今在技术创新、产品多样化、全球化发展、客户合作与定制化解决方案以及质量管理与持续改进等方面取得的重要进展。
HI Microwave Technology Limited自2004年在中国成立以来,便以“Hertz Infinite”(赫兹无限)为愿景,致力于将产品范围扩展至30 KHz至110 GHz+(针对GaAs、HEMT、PHEMT和MMIC基产品)以及220 GHz+(针对毫米波产品和子系统)。这一宏伟愿景不仅为公司指明了发展方向,也激励着每一位员工不断追求技术创新和产品卓越。在初创阶段,HI Microwave通过引进国际先进的生产设备和技术人才,迅速在微波通信领域站稳脚跟。
在稳固国内市场的同时,HI Microwave积极开拓国际市场,与全球多家知名企业建立了长期稳定的合作关系。公司凭借优质的产品和服务,赢得了国内外客户的广泛赞誉。此外,HI Microwave还积极参与国际展览和交流活动,不断提升品牌知名度和影响力。通过与国际同行的交流与合作,公司不断吸收先进的管理理念和技术成果,为企业的持续发展注入了新的活力。
随着电子行业的快速发展,对高性能磁性材料的需求日益增长。Amecon Magnetics公司敏锐地捕捉到这一市场机遇,加大了在技术研发上的投入。通过不断的技术创新,公司成功开发出一系列具有高性能、高稳定性的磁性材料产品,满足了市场对于高质量磁性材料的需求,从而赢得了客户的信任和市场的认可。
在竞争激烈的电子行业中,品质是企业生存和发展的关键。Amecon Magnetics公司始终将品质管理放在首位,建立了严格的质量管理体系,确保从原材料采购到产品出厂的每一个环节都符合高标准的质量要求。这种对品质的执着追求使得公司的产品赢得了客户的广泛好评和信赖,为公司树立了良好的品牌形象。
乔光电子成立于2009年,起初专注于过压、过流保护元器件的研发、生产和销售。公司凭借对技术的执着追求和对市场的敏锐洞察,迅速在行业内站稳脚跟。在创立初期,乔光电子就建立了先进的EMC实验室,致力于为客户提供顶级性能的过压、过流保护元器件和完整的电路保护解决方案。这一时期,乔光电子在福建和东莞建立了生产基地,为后续的快速发展奠定了坚实基础。
在输入电压220V、50Hz、电压变化范围+15%~-15%条件下; a、 输出电压可调范围:+3V~+15V; b、 最大输出电流:2A; c、 电压调整率≤0.2%(输入电压变化范围+15%~-15%下,满载); d、 负载调整率≤1% e、 纹波电压(峰- ...… 查看全部问答∨ |
在使用FPGA的过程中,画PCB是一件苦差事,尤其是刚开始时建Symbol. 凡是能够回复此帖的,俺将来可以帮助你生成画原理图的symbol. 仅支持mentor和Cadence的PCB工具。… 查看全部问答∨ |
这个程序的作用是 ;把V/F转换得到的脉冲送到单片机的T0口计数, ;计数的结果放到R2,R3中 ;求出计数值的万,千,百,十,个位,然后分别放在74H,73H,72H,71H,70H中 ;最后把结果通过4094串行移位寄存器显示出来 ORG 0000H LJM ...… 查看全部问答∨ |
|
我在www.pudn.com下载的AT91RM9200(DKEK)VxWorksBSP.RAR,但下载下来才知道只是一份开发者指南,不是源码。我现在准备上AT91RM9200,也准备买一块评估板,但都没有VxWorks的BSP,大家能送我一份吗?我们可以交换源码的。 谢谢! … 查看全部问答∨ |
1 单点 接地,为许多在一起的电路提供公共电位参考点,由于只有一点接地,所以构成不了地回路的问题,因此就几乎不存在干扰的问 题,在通信速率低于1000KHZ时,选用一点接地效果比较好。 2 ...… 查看全部问答∨ |