基于单片机设计的多功能数字钟设计报告.doc

上传人:仙人指路1688 文档编号:4148786 上传时间:2023-04-07 格式:DOC 页数:17 大小:726.50KB
返回 下载 相关 举报
基于单片机设计的多功能数字钟设计报告.doc_第1页
第1页 / 共17页
基于单片机设计的多功能数字钟设计报告.doc_第2页
第2页 / 共17页
基于单片机设计的多功能数字钟设计报告.doc_第3页
第3页 / 共17页
基于单片机设计的多功能数字钟设计报告.doc_第4页
第4页 / 共17页
基于单片机设计的多功能数字钟设计报告.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《基于单片机设计的多功能数字钟设计报告.doc》由会员分享,可在线阅读,更多相关《基于单片机设计的多功能数字钟设计报告.doc(17页珍藏版)》请在三一办公上搜索。

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可接入数字电路等各种需要。驱动方式为迅响复合输出,不占端口。输入电

26、路是与迅响电路复合作用的,其电路结构是在迅响电路的 PNP 型三极管的基极电路中接入排针J2。引脚排针可改变单片机I/O口的电平状态,从而达到输入的目的。驱动方式为复合端口驱动,占用P3.7端口。 4、单片机系统: 本产品采用了单片机AT89C2051为核心器件,并配合所有的外围电路,具有上电复位的功能,无手动复位功能。六、系统软件部分 为实现系统功能,系统软件共设六个运行状态和各部分功能描述如下: 1、功能按键说明:S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。 2、功能及操作说明:操作时,连续短时间(小于1秒)按动S1,即可在以上的6个功能中连续循环。中途如果长按(大于2秒)

27、S1,则立即回到时钟功能的状态。 1)时钟功能:上电后即显示10:10:00 ,寓意十全十美。 2)校时功能:短按一次 S1,即当前时间和冒号为闪烁状态,按动 S2 则小时位加 1,按动 S3则分钟位加1,秒时不可调。 3)闹钟功能:短按二次S1,显示状态为22:10:00,冒号为长亮。按动S2刚小时位加1,按动S3则分钟位加1,秒时不可调。当按动小时位超过23时则会显示-:-:-,这个表示关闭闹钟功能。闹铃声为蜂鸣器长鸣3秒钟。 4)倒计时功能:短按三次S1,显示状态为 0,冒号为长灭。按动S2则从低位依此显示高位,按动S3则相应位加1,当S2按到第6次时会在所设定的时间状态下开始倒计时,再

28、次按动S2将再次进入调整功能,并且停止倒计时。 5)秒表功能:短按四次 S1,显示状态为 00:00:00,冒号为长亮。按动 S2 则开始秒表计时,再次按动S2则停止计时,当停止计时的时候按动S3则秒表清零。 6)计数器功能:短按五次S1,显示状态为00:00:00,冒号为长灭,按动S2则计数器加1,按动S3则计数器清零。 七.整机调整过程各功能模块均调整通过后,进行整机调试,其过程如下:将调好的各功能模块连接在一起,用函数信号发生器模拟交流电压信号,先用仿真机代AT89C2051 单片机进行模拟调试,对每一芯片的片选、启动进行检测,并对数据线和地址线也进行检测。调试成功后再将程序写到单片机中进行调试。八.总结本系统以AT89C2051为核心部件,利用软件编程,通过键盘控制和数码管显示实现了时钟功能、闹钟功能,并完成了对环境温度和市电信号频率及有效值的测量显示,能实现题目的基本要求。尽量做到硬件电路简单稳定、减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。由于时间有限和本身知识水平的限制,无法完成发挥部分,而且由于材料的购取有限,导致有些部分不是很达标,我们认为本系统还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件测量算法进一步地改进与完善等。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号