单片机综合试验_第1页
单片机综合试验_第2页
单片机综合试验_第3页
单片机综合试验_第4页
单片机综合试验_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

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

文档简介

1、单片机综合实验-设计报告课题:多功能数字时钟班级:班组员:指导老师:二。八年十一月十八日内容:设计一个数字时钟,显示范围为00:00:0023:59:59。通过5个开关进行控制,K2用于其中开关K1用于切换时间设置(调节时钟)和时钟运行(正常运行)状态;开关切换修改时、分、秒数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定闹钟,闹钟同样可以设定初值,并且设定好后到时间通过实验箱音频放出一段乐曲作为闹铃。选做增加项目:还可增加秒表功能(精确到0.01s)或年月日设定功能。电路:(只连粗实线部分)。273371SJ1!i="->一一一JJIJ.卜If|t

2、'Jrlb'I.卜FFDCH273FFDDHDB(D0-D7)数码LED显示器电路(不需接线)电子音响电路要求:开关K3进行加1调节时,当加至最大值(时为24,分和秒均为60)时要能正常归零。开关K4进行减1调节时,当减至最小值00时,均能再回到从相应最大值(时为23,分、秒均为59)。闹钟乐曲自定。组员任务分配情况:小组成员:在经过小组成员对课题的研究探讨后,根据各个成员的能力方向作出一下任务分配。任务分配:实验电路及功能说明:电路图如图a所示:D1设置'Ie卡分加时加秒表切换秒表开始、复位秒表暂停清零P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT

3、1-P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.4/T0P3.5/T1P3.6/WRP3.7/RD图a(注:若不清楚可以放大)该数字钟是用一片AT89C51A单片机通过编程去驱动8个数码管实现的。通过8个开关控制时间的设置,时、分、秒的校准,秒表的切换,秒表的开始、复位,暂停键,闹钟的切换,清零键。1 .控制键分别与P0口连接见图a.2 .通过P2口和P3去控制数码管的显示如图所示P

4、2口接数码管的ag端,P3口接数码管的18端.3 .从P0_7LS1输出一个信号使二极管发光亮灭交替,二极管发光就相当于设置的闹钟时间到了,若输出去驱动扬声器就可以实现滴、滴、滴的闹铃。功能说明:1 .各个控制键的功能:可对时间进行校准调节;按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间,时加一、分加一键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的。再按下设置就进入日历画面,继续按一次进入日历日设置,按第2次进入月设置,第3次进入年设置,第4次就返回时钟画面;在时钟模式下需要用到秒表时就按下秒切换键就可以进入秒表模式,按下秒表开始、复位键就开始计时如需要暂停则只需按下秒表暂停键

5、,如果要继续计时可以按下暂停或者秒表开始。如果要重新对秒计时则可以按秒表开始、复位,再按一下又开始计时了;清零键可以对时钟、闹钟清零;关闹钟键是当闹钟响时按下就关闭响声了(图中发光二极管亮时,按下此键二极管立即熄灭)。2 .AT89C51单片机,通过编写程序对数码显示进行控制。3 .八个7段数码管显示时钟和秒表信号。实验程序流程图:1.主程序流程图:2.时钟中断程序流程图:时钟程序3.秒表中断程序流程图:秒表程序(因后来程序有所改动,故有所区别)4.按键程序流程图:按键流程图1(时间调节与闹钟设置)实验结果分析:A1设置U119XTAL118XTAL2RST7*分加时加秒表切换-J=L<

6、秒表开始、复位秒表暂停9PSEN1ALEEAP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDAI89C51清零关闹钟1:(秒表画面)此设计是利用protues仿真软件进行仿真。该多功能数字钟实现的时钟显示、闹

7、钟设置和秒表功能,校准时钟时设计了时加键和分加键以及清零键,没有设置减分减时键。在用硬件实现闹钟时,本设计是采用一个发光二极管实现,当所设置的时间到来,二极管不停亮灭,代替扬声器发出的嘀嘀嘀,不足之处是没有输出一段乐曲。在第一次调试过程中,由于软件构置问题,cpu的使用率几乎满载(可能导致系统无法响应),而且时间显示值比实际值有明显的延时。在经过改进后是cpu的利用率处于10%左右,较为理想。而且到24:00:00能成顺利清零,在时间显示上,由于中断响应的处理不当所耗掉的时间对时间的精确显示有很大影响,在调试改进后有了显著的提升。在秒表的调试中,起初不能暂停后继续以及秒表显示不直观,都加以了改

8、进。另外,当在时钟显示时,若切入秒表显示并开始秒表计时时,时钟的计时已经暂停(或者在时钟显示界面时,若直接按下秒表计时开始,这时时钟显示会停止,要按下秒表切换才能进入秒表显示),这对于一款电子钟而言,已经失去精确计时的作用。在看过程序后,发现其使用了2个定时器,时钟使用定时其0,秒表用定时其1。这样,当使用秒表时,为了是定时器1产生的中断不被定时器0产生的中断所影响,就必须关闭定时器0的中断。如此时钟的显示就“被迫”停止。于是,将时钟和秒表的定时标准都以定时器0作为标准,加入判断变量temp1是否为1来判断秒表计时是否开始。由于与时钟在同一中断中,而且出于同一“地位”,他们的计时显示达到了互不

9、影响。后续附加上了日历显示及调节,经初步调试,能实现其功能。实验体会:程序清单:/位定义#include<reg51.h>sbitP0_7=P0A7;sbitP1_0=P1A0;/位定义sbitP1_1=P1A1;/位定义sbitP1_2=P1A2;/位定义sbitP1_3=P1A3;/位定义sbitP1_4=P1A4;/位定义sbitP1_5=P1A5;/位定义sbitP1_6=P1A6;/位定义sbitP17=P1A7;位定义unsignedcharp=0,q=0,m=0,n=0,h=0,w=0;时钟初值,P、q为秒显示位,m、n是分显示位,h、w是时显示位unsignedch

10、arm1=0,n1=0,h1=0,w1=0,q1=0,p1=0;/闹钟初值,P1、q1为秒显示位,m1、n1是分显示位,h1、w1是时显示位unsignedcharj=0,j1=0,j2=0,s=0,s1=0,s2=0,s3=9,s4=5,s5=9,s6=5,k=10,e=0;/s1、s2、s3、s4是秒表显示位,k是表示时、分、秒之间的间隔位unsignedchartemp=0,temp1=0,temp2=1,temp3=0,shutdown=0;/显示程序变量,temp3为日历修改位标志unsignedcharshow=0x40,0x79,0x24,0x30,0x19,0x12,0x02,

11、0x78,0x00,0x10,0xbf,0xff);/数码显示09,0xff、0xbf为k的显示,低电平有效unsignedcharmpin口=0,32,29,32,31,32,31,32,32,31,32,31,32;/平年月份最大值unsignedcharmrun口=0,32,30,32,31,32,31,32,32,31,32,31,32;闰年月份最大值unsignedintday=8,mth=8,year=8;日历初值unsignedintday1=8,day2=0,mth1=8,mth2=0,year1=8,year2=0;日历显示位voidrili()日历函数day+;if(yea

12、r%4=0)/判断是否是闰年,是则执行if(day=mrunmth)day=1;mth+;if(mth=13)mth=1;year+;if(year%4!=0)/判断是否是平年,是则执行(if(day=mpinmth)(day=1;mth+;if(mth=13)(mth=1;year+;day1=day%10;day2=day/10;mth1=mth%10;mth2=mth/10;year1=year%10;year2=year/10;voiddisplay();voiddisplay1();voiddisplay2();voiddisplay3();voidkey();voiddelay(u

13、nsignedintk)(unsignedinti,j;for(j=0;j<k;j+)for(i=0;i<10;i+);voidmain()(TMOD=0X01;TH0=0XEC;TL0=0X78;EA=1;TR0=1;ET0=1;P0_7=0;/秒表显不'程序/闹钟显示程序/时钟显示程序按键设置/延时子程序/main主函数/控制方式为1打开中断/开定时计数器0while(1)(/一直显示下面的程序while(temp=0)/当满足temp=0时,显示时钟程序(display2();key();/扫描按键程序当满足temp=1时,显示闹钟设置程序/扫描按键程序/当满足tem

14、p2=0时,显示秒表程序/扫描按键程序)while(temp=1)(display1();key();)while(temp=2)(display3();key();)while(temp2=0)(display();key();)voidtime()interrupt1using1/定时、计数器0中断子程序,时钟程序(TH0=0XEC;TL0=0X78;TR0=1;j+;if(j=10)/10ms的定时器初值,100次中断响应为1s,j*j1*j2=100(j=0;j1+;if(j1=5)(k=11;j2+;j1=0;if(j2=2)(j2=0,k=10;p+;if(p=10)(p=0;q+

15、;if(q=6)(q=0;m+;if(m=10)(m=0;n+;if(n=6)(n=0;h+;if(w<=2)&&(h=10)(h=0;w+;)if(w=2)&&(h=4)当到达24小时时自动清零(日历进位h=0,w=0;rili();)if(w=w1)&&(h=h1)&&(m=m1)&&(n=n1)&&(shutdown=0)/若到达闹钟设置时间,且没按下关闹钟(e+;if(e<2)P0_7=1;elseP0_7=0;if(e=3)(e=0;)if(m1!=m)/若闹钟分与时钟分不相等

16、(P0_7=0;关闭闹钟)if(temp1=1)/按下秒表开始(s1+;/每次中断响应间隔10ms即0.01sif(s1=10)(s1=0;s2+;if(s2=10)(s2=0;s3+;if(s3=10)(s4+;s3=0;if(s4=6)(s5+;s4=0;if(s5=10)(s6+;s5=0;)if(s6=6)(s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;)voiddisplay1()闹钟显示程序(P3=0x01;/p3口第1位显示闹钟秒第1位P2=showp1;delay(1);P3=0x02;P2=showq1;/p3口第2位显示闹钟秒第2位delay(1);P3=0x

17、04;P2=show10;/p3口第3位显示kdelay(1);P3=0x08;P2=showm1;/p3口第4位显示闹钟分第1位delay(1);P3=0x10;P2=shown1;/p3口第5位显示闹钟分第2位delay(1);P3=0x20;P2=show10;/p3口第6位显示kdelay(1);P3=0x40;P2=showh1;/p3口第7位显示闹钟时第1位delay(1);P3=0x80;P2=showw1;/p3口第8位显示闹钟时第2位delay(1);voiddisplay2()/时钟显示程序P3=0x01;/p3口第1位显示时钟秒第1位P2=showp;delay(1);P

18、3=0x02;P2=showq;/p3口第2位显示时钟秒第2位delay(1);P3=0x04;P2=showk;/p3口第3位显示kdelay(1);P3=0x08;P2=showm;/p3口第4位显示时钟分第1位delay(1);P3=0x10;P2=shown;/p3口第5位显示时钟分第2位delay(1);P3=0x20;P2=showk;/p3口第6位显示kdelay(1);P3=0x40;P2=showh;/p3口第7位显示时钟分第1位delay(1);P3=0x80;P2=showw;/p3口第8位显示时钟分第2位delay(1);)voiddisplay3()日历显示(P3=0

19、x01;P2=showday1;delay(1);P3=0x02;P2=showday2;delay(1);P3=0x04;P2=show10;delay(1);P3=0x08;P2=showmth1;delay(1);P3=0x10;P2=showmth2;delay(1);P3=0x20;P2=show10;delay(1);P3=0x40;P2=showyear1;delay(1);P3=0x80;P2=showyear2;delay(1);)voiddisplay()秒表显示程序(P3=0x01;/p3第1位显示秒表第1位0.01sP2=shows1;delay(1);P3=0x02;

20、P2=shows2;/p3第2位显示秒表第2位0.1sdelay(1);P3=0x04;P2=showk;/p3第3位显示秒表第3位kdelay(1);P3=0x08;/p3第4位显示秒表第4位1sP2=shows3;delay(1);P3=0x10;/p3口第5位显示秒表10sP2=shows4;delay(1);P3=0x20;/p3口第6位显示秒表kP2=showk;delay(1);P3=0x40;P2=shows5;/p3口第7位显示秒表1mdelay(1);P3=0x80;P2=shows6;/p3口第8位显示秒表10mdelay(1);voidkey()/按键子程序if(P1_0

21、=0)&&(temp=0)时钟画面按下设置键,进入闹钟画面delay(5);while(P1_0=0)&&(temp=0);temp=1;if(P1_0=0)&&(temp=1)闹钟画面按下设置键,日历画面delay(5);while(P1_0=0)&&(temp=1);temp=2;if(P1_0=0)&&(temp=2)&&(temp3=0)/日历画面按下设置进入日设置delay(5);while(P1_0=0)&&(temp=2)&&(temp3=0);temp

22、=2;temp3=1;if(P1_0=0)&&(temp=2)&&(temp3=1)/日历画面日设置时按下设置进入月设置delay(5);while(P1_0=0)&&(temp=2)&&(temp3=1);temp=2;temp3=2;if(P1_0=0)&&(temp=2)&&(temp3=2)/日历画面月设置时按下设置进入年设置delay(5);while(P1_0=0)&&(temp=2)&&(temp3=2);temp=2;temp3=3;)if(P1_0=

23、0)&&(temp=2)&&(temp3=3)/日历画面年设置时按下设置进入时钟画面(delay(5);while(P1_0=0)&&(temp=2)&&(temp3=3);temp=0;temp3=0;)if(P1_1=0)&&(temp=0)(delay(5);while(P1_1=0)&&(temp=0);m+;if(m=10)(m=0;n+;if(n=6)(n=0;m=0;/时钟下按分加去开关抖动影响/分调时if(P1_2=0)&&(temp=0)时钟下按小时加(delay(

24、5);while(P1_2=0)&&(temp=0);h+;if(w<=2)&&(h=10)(h=0;w+;if(w=2)&&(h=4)(h=0,w=0;)去开关抖动影响/时调节是否到达24小时到达后清零if(P1_1=0)&&(temp=1)闹钟下按分钟加delay;去抖动闹钟分调节while(P1_1=0)&&(temp=1);m1+;if(m1=10)(m1=0;n1+;if(n1=6)(n1=0;m1=0;if(P1_2=0)&&(temp=1)(delay(5);while(P1_2

25、=0)&&(temp=1);h1+;if(w1<=2)&&(h1=10)(h1=0;w1+;if(w1=2)&&(h1=4)(h1=0,w1=0;闹钟下按时钟加去抖动闹钟时调节闹钟设置是否到达24小时到达后清零if(P1_1=0)&&(temp3=1)(delay(5);while(P1_1=0)&&(temp3=1);day+;if(year%4=0)(if(day=mrunmth)(day=1;if(year%4!=0)if(day=mpinmth)(day=1;)day1=day%10;day2=day

26、/10;)if(P1_2=0)&&(temp3=1)(delay(5);while(P1_2=0)&&(temp3=1);day-;if(year%4=0)(if(day=0)(day=(mrunmth-1);)if(year%4!=0)(if(day=0)(day=(mpinmth-1);)day1=day%10;day2=day/10;)if(P1_1=0)&&(temp3=2)(delay(5);while(P1_1=0)&&(temp3=2);mth+;if(mth=13)(mth=1;)mth1=mth%10;mth2=

27、mth/10;)if(P1_2=0)&&(temp3=2)(delay(5);while(P1_2=0)&&(temp3=2);mth-;if(mth=0)(mth=12;)mth1=mth%10;mth2=mth/10;)if(P1_1=0)&&(temp3=3)(delay(5);while(P1_1=0)&&(temp3=3);year+;year1=year%10;year2=year/10;)if(P1_2=0)&&(temp3=3)(delay(5);while(P1_2=0)&&(temp3=3);year-;year1=year%10;year2=year/10;)if(P1_3=0)&&(temp1=1)/按下秒表开始并且temp1=1时执行下面指令(delay(5);while(P1_3=0)&&(temp1=1);/去抖动s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;temp1=0;秒表清零)if(P1_3=0)&&(temp1=0)/按下秒表开始并且te

温馨提示

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

评论

0/150

提交评论