基于单片机设计的多功能数字钟设计报告_第1页
基于单片机设计的多功能数字钟设计报告_第2页
基于单片机设计的多功能数字钟设计报告_第3页
基于单片机设计的多功能数字钟设计报告_第4页
基于单片机设计的多功能数字钟设计报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多功能数字钟设计报告目录1. 设计任务与要求2. 设计原理及方案3. 主要元器件清单4. 电路原理图5. 原理说明6. 系统软件部分7. 整机调整过程8. 总结六位多功能数字钟制作报告一设计任务与要求。1.任务。设计制作一个24小时制多功能数字钟。示意图如下(仅供参考): 2要求.基本要求(1)具有时间设置(小时和分钟)、闹钟时间设置、闹钟开、闹钟关功能。(2)数字显示小时、分钟,有am、pm指示器,闹钟就绪灯,蜂鸣器。(3)220v供电。发挥部分(1)键盘切换现场环境温度显示。(060 1)(2)键盘切换电网频率、电压显示。 (3)电压欠压、过压报警(220v 10)功能。二,设计原理及方案

2、1,计数原理 数字计中是一个对标准频率进行校准的计数电路。它的计时周期是24小时,由于计数器的起始时间不可能与标准时间一致,所以采用校准功能和报时功能。 数字钟电路主要由译码显示器、校准电路、报时电路、时计数、分计数、秒计数器,振荡器和单脉冲产生组成。其中电路系统由秒信号产生器是整个系统基本信号,它直接决定计数器的精度,用石英振荡器加分频器来实现,将标准秒信号送入秒计数器。分、秒计数器采用60进制,时计数器采用24进制,。译码器显示电路将时、分、秒计数器的输出状态通过三个两位共阳数码管显示出来。整点报时电路根据计时系统的输出状态产生一个脉冲信号,用蜂鸣器输出。二、模块电路设计与比较1、 时钟方

3、案选择采用带 ram的时钟芯片at89c2051。该芯片可以进行时分秒的计数,可编程接口,还具有报警功能和掉电保存功能,并且可以对其方便的进行程序控制,完全能满足题目的要求。c程序:#includecode senen_seg10=0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0; /p1.7(冒号)口高电平bit key1_enter=0,key2_enter=0,key3_enter=0,countdown_mark=0,stopwatch_mark=0,count_mark=0,bell_mark=0; /状态标志unsigned cha

4、r program=0,program_variable=0,count_bit=0,count=0;unsigned char hour=10,minute=10,second=0; /时间变量unsigned char delayed_hour=22,delayed_minute=10,delayed_second=0;/定时变量 unsigned char count_hour=0,count_minute=0,count_second=0; /计时计数变量unsigned char count_time=0,count_count=0; void delay(unsigned int

5、t)/延时子程序 unsigned int i,j; for(i=0;it;i+) for(j=0;j=199) count_time=0; second+; if(second=60) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=24)hour=0; if(delayed_hour=hour & delayed_minute=minute & second=199 & (count_second!=0|count_minute!=0|count_hour!=0)count_count=0;count_second-;if

6、(count_second=60) count_second=59; count_minute-; if(count_minute=60) count_minute=59; count_hour-; if(count_hour=100) count_hour=99; if(count_second=0&count_minute=0&count_hour=0&count_count=15000) count_count=14000; if(stopwatch_mark=1) /秒表程序 count_count+; if(count_count=2)count_count=0;count_seco

7、nd+;if(count_second=100) count_second=0; count_minute+; if(count_minute=60) count_minute=0; count_hour+; if(count_hour=60) count_hour=0; unsigned char show_key (void)unsigned char x=0,y=0;switch (program)case 0: p1&=senen_segsecond%10; /时钟秒的个位 break;case 1: if(count_time=90) p1&=senen_segsecond%10;

8、/校正秒的个位 break;case 2: if(delayed_hour=24) p1=0xfe;/闹钟秒的个位 else p1&=senen_segdelayed_second%10; break;case 3: if(count_bit=0) p1&=senen_segcount_second%10;/倒计时秒的个位 else p1=0xff; break;case 4: p1&=senen_segcount_second%10; /秒表秒的个位break;case 5: p1&=senen_segcount_second%10; /计数器个位break; p3_3=0; delay(1

9、0); if(p3_5=0)/功能键1识别 key1_enter=1;if(count=90) p1&=senen_segsecond/10; /校正秒的十位 break;case 2: if(delayed_hour=24) p1=0xfe; /闹钟秒的十位 else p1&=senen_segdelayed_second/10; break;case 3: if(count_bit=1) p1&=senen_segcount_second/10;/倒计时秒的十位else p1=0xff; break;case 4: p1&=senen_segcount_second/10; /秒表秒的十位

10、break;case 5: p1&=senen_segcount_second/10; /计数器十位break; p3_1=0; delay(10); p3_1=1; p1|=0xff;switch (program) case 0: p1&=senen_segminute%10; /时钟分的个位break;case 1: if(count_time=90) p1&=senen_segminute%10; /校正分的个位break;case 2: if(delayed_hour=24) p1=0xfe;/闹钟分的个位 else p1&=senen_segdelayed_minute%10; b

11、reak;case 3: if(count_bit=2) p1&=senen_segcount_minute%10;/倒计时分的个位else p1=0xff;break;case 4: p1&=senen_segcount_minute%10; /秒表分的个位break;case 5: p1&=senen_segcount_minute%10; /计数器百位break; p3_2=0; delay(10); p3_2=1; p1|=0xff;switch (program)case 0: p1&=senen_segminute/10; /时钟秒的个位break;case 1: if(count

12、_time=90) p1&=senen_segminute/10; /校正秒的个位 break;case 2: if(delayed_hour=24) p1=0xfe;/闹钟秒的个位 else p1&=senen_segdelayed_minute/10; break;case 3: if(count_bit=3) p1&=senen_segcount_minute/10;/倒计时秒的个位else p1=0xff;break; case 4: p1&=senen_segcount_minute/10; /秒表秒的个位break;case 5: p1&=senen_segcount_minute

13、/10; /计数器千位break; p3_5=0; delay(10); p3_5=1; p1|=0xff;switch (program)case 0: p1&=senen_seghour%10; /时钟时的个位break;case 1: if(count_time=90) p1&=senen_seghour%10; /校正时的个位break;case 2: if(delayed_hour=24) p1=0xfe; /闹钟时的个位 else p1&=senen_segdelayed_hour%10; break;case 3: if(count_bit=4) p1&=senen_segcou

14、nt_hour%10;/倒计时时的个位else p1=0xff;break;case 4: p1&=senen_segcount_hour%10; /秒表时的个位break;case 5: p1&=senen_segcount_hour%10; /计数器万位break; p3_0=0; delay(10); if(p3_4=1 & key2_enter=1) x=3; /确认功能键2识别,返回3 key2_enter=0; p3_0=1; p1|=0xff;switch (program) case 0: p1&=senen_seghour/10; /时钟时的个位break;case 1: i

15、f(count_time=90) p1&=senen_seghour/10; /校正时的个位break;case 2: if(delayed_hour=24) p1=0xfe; /闹钟时的个位 else p1&=senen_segdelayed_hour/10; break;case 3: if(count_bit=5)p1&=senen_segcount_hour/10; /倒计时时的个位else p1=0xff;break;case 4: p1&=senen_segcount_hour/10; /秒表时的个位break;case 5: p1&=senen_segcount_hour/10;

16、 /计数器万位break; p3_4=0; delay(10); if(p3_5=1 & key1_enter=1)/确认功能键1识别,执行退出或进入下一个功能 if(count=127) x=1; /确认功能键1为长按,返回1else x=2; /确认功能键1为短按,返回2 key1_enter=0;count=0; if(p3_2=1 & key3_enter=1) x=4; /确认功能键3识别,返回4 key3_enter=0; p3_4=1; p1|=0xff;if(program=100) p1&=0xff;/校时和显示功能时钟时冒号闪烁if(program=1 & count_ti

17、me=24)hour=0;break;case 4: minute+; if(minute=60)minute=0;break; break;case 2: while(program=2) /闹钟菜单 switch(show_key() case 0: break;case 1:program=0; break;case 2:program=3;break;case 3:delayed_hour+;if(delayed_hour=25)delayed_hour=0;break;case 4:delayed_minute+; if(delayed_minute=60)delayed_minut

18、e=0;break; break;case 3: while(program=3) /倒计时菜单 switch(show_key() case 0: break;case 1:program=0; break;case 2:program=4;break;case 3:count_bit+; if(count_bit=7)count_bit=0;break;case 4:switch(count_bit) case 0: count_second+=1; break; case 1: count_second+=10; break; case 2: count_minute+=1; break

19、; case 3: count_minute+=10; break; case 4: count_hour+=1; break; case 5: count_hour+=10; break; case 6: break; if(count_hour=100) count_hour-=100; if(count_minute=60) count_minute-=60; if(count_second=60) count_second-=60; break;if(count_bit=6) countdown_mark=1;else countdown_mark=0; break;case 4: c

20、ount_hour=0;/秒表菜单 count_minute=0;count_second=0; while(program=4) switch(show_key() case 0: break;case 1:program=0; break;case 2:program=5;break;case 3:stopwatch_mark=stopwatch_mark;break;case 4:if(stopwatch_mark=0) count_hour=0; count_minute=0; count_second=0;break; break; /计数器菜单case 5: count_hour=

21、0; count_minute=0;count_second=0; while(program=5) switch(show_key() case 0: break;case 1:program=0; break;case 2:program=0;break;case 3:count_second+; if(count_second=100) count_second=0; count_minute+; if(count_minute=100) count_minute=0; count_hour+; if(count_hour=100)count_hour=0; break;case 4:c

22、ount_hour=0; count_minute=0; count_second=0;break;if(p3_7=0)while(p3_7=0) show_key(); count_second+; if(count_second=100) count_second=0;count_minute+;if(count_minute=100) count_minute=0; count_hour+; if(count_hour=100)count_hour=0; break;if(program!=3) countdown_mark=0;if(program!=4) stopwatch_mark

23、=0;2、 电压有效值方案选择采用7805五伏稳压电源,电路图如下:3、 显示模块的选择 采用数码管显示。数码管亮度高、体积小、重量轻,但其显示信息简单、有限,在本题目中应用受到很大的限制。 数码管三,主要元器件清单 序号名称规格位号数量序号名称规格位号数量1单片机at89c2051u1113三极管9012q1q772三端集成稳压78l05u2114电阻220r3r9732位共阳数码管红色0.4寸led1led33151kr2、r10r1574发光二极管红色3d1d44162kr17、r1825蜂鸣器5v有源u31175.1kr1616瓷片电容30pfc2、c321810kr1170.1ufc

24、4、c5219按键6*6*5s1、s2、s3382位排针间距2.54j1j3320电池盒4节5号19集成电路插座20pu1121dc插座5.5*2.1110电解电容10ufc1122电源线双色2p带热缩管111100ufc6123电路板105*55112晶振12mhzy1124说明书a4双面1四、电路原理图五、原理说明: 1、显示原理:显示部分主要器件为3只两位一体共阳极数码管,驱动采用 pnp 型三极管驱动,各端口配有限流电阻,驱动方式为动态扫描,占用 p3.0p3.5 端口,段码由p1.0p1.6输出。冒号部分采用 4 个 3.0的红色发光二极管,驱动方式为独立端口p1.7驱动。 2、键盘

25、原理:按键 s1s3 采用复用的方式与显示部分的 p3.5、p3.4、p3.2 口复用。其工作方式为,在相应端口输出高电平时读取按键的状态并由单片机消除抖动并赋予相应的键值。 3、迅响电路及输入、输出电路原理:迅响电路由有源蜂鸣器和 pnp 型三极管组成。其工作原理是当 pnp 型三极管导通后有源蜂鸣器立即发出定频声响。驱动方式为独立端口驱动,占用p3.7端口。输出电路是与迅响电路复合作用的,其电路结构为有源蜂鸣器,5.1k定值电阻r6,排针j3并联。当有源蜂鸣器无迅响时j3输出低电平,当有源蜂鸣器发出声响时j3输出高电平,j3可接入数字电路等各种需要。驱动方式为迅响复合输出,不占端口。输入电路是与迅响电路复合作用的,其电路结构是在迅响电路的 pnp 型三极管的基极电路中接入排针j2。引脚排针可改变单片机i/o口的电平状态,从而达到输入的目的。驱动方式为复合端口驱动,占用p3.7端口。 4、单片机系统: 本产品采用了单片机at89c2051为核心器件,并配合所有的外围电路,具有上电复位的功能,无手动复位功能。六、系统软件部分 为实现系统功能,系统软件共设六个运行状态和各部分功能描述如下: 1、功能按键说明:s1为功能选择按键,s2为功能扩展按键,s3为数值加一按键。 2、功能及操作说明:操作时,连续短时间(小于1秒)按动s1,即可在以上的6个功能中连续循环。中途如果长按(大于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论