单片机电子钟实训报告模版.doc_第1页
单片机电子钟实训报告模版.doc_第2页
单片机电子钟实训报告模版.doc_第3页
单片机电子钟实训报告模版.doc_第4页
单片机电子钟实训报告模版.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

实训报告课程名称: 弹片机工程实训 学生姓名: 肖忠亮 学 号: 8000610040 专业班级: 计算机软件101 2012年 9月 14日目录 南昌大学实训报告学生姓名: 学 号: 专业班级: 实训类型: 验证 综合 设计 创新 实训日期: 10.9.610.9.14 实验成绩: 一、实训项目名称 电子钟二、实训目的 1了解弹片2.了解如何对电路的布局3对硬件电路的实时操作4提高自己对代码的编写能力三、实训要求1. 熟悉仿真开发软件Proteus及仿真调试软件Kill的使用;2. 画好“电子钟”的原理图;3. 根据原理图,编写C51语言程序,实现“计时 调时 闹钟 秒表 月份”功能,并用Proteus做仿真调试;4. “ 电路运行 ”功能要求:四、实训基本原理(附原理图、源程序清单) 原理:通过一个6位的数码管来显示计时。每2位作为时位 分位 和秒位。总共有5个功能模块,各用相应的内存来定义.所有的代码功能总体上是:2个定时器,一个用于计数1秒的时间来给计时加时间,第二个使用与每隔1000us来扫描数码管,让其显示正常,一个算法函数,用来给时间进位的问题但有2种进位方式一种是计时进位,另种是秒表的进位方式,还有一个是点击按钮的函数,各功能的实现,还有闹钟到时的处理函数,就是灯泡亮的函数,这是主要的功能模块。 代码: #include reg51.h #define uchar unsigned char sbit p11=P10; sbit p12=P11; sbit p13=P12; sbit p18=P17; uchar lamp12=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf; /增加了一个空白的位和月份的一杠 uchar time1=0; /用来标志总共计了多少次,总共20次才是1秒 uchar time2=0; /用来给秒表计时 uchar time3=0; /用来给闹钟灯光闪烁的时间间隔。 uchar time4=0; /用来显示月份的时间 。 uchar beginend=0; /用来暂停和运行秒表的运行 uchar wei=1; /用来刷新第几位更 uchar a1=0,a2=0,a3=0,a4=0,a5=0,a6=0; /用来指明要显示的哪一位。 uchar b1=0,b2=0,b3=0,b4=0,b5=0,b6=0; /用来表明显示时钟的6位 uchar c1=1,c2=2,c3=0,c4=0,c5=0,c6=0; /用来显示闹钟的时间 uchar d1=0,d2=9,d3=11,d4=0,d5=8,d6=0; /用来保存年月份的时间 uchar operation=0; /用来显示4中功能是哪一种 uchar hour=0; /用来显示校对的是时还是分。 uchar model1=1; /用来显示时钟的什么模式。 uchar model2=0; /用来显示月份的模式 bit timeflag=0; /用来表示什么时候开始闹钟的倒计时 bit mounthflag=0; /用来显示当前的年月日 uchar year=0; /用来显示调月还是时的 bit flag=0 ; /标识月份void jude(uchar *a1,uchar *a2,uchar *a3,uchar *a4,uchar *a5,uchar *a6,uchar num);time0(void) interrupt 1 using 1 /每隔一秒进行加一秒 TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(time1=20) time1=0;a6+; else time1+; if(timeflag=1) if(time3=10) time3=0; else time3+; if(flag=1) if(time4=60) time4=0;operation=1; model2=0; else time4+; time11(void) interrupt 3 using 2 /进行刷新 TH1=(65536-1000)/256; TL1=(65536-1000)%256; if(operation=1) if(model1=1) b1=a1,b2=a2,b3=a3,b4=a4,b5=10,b6=10; /第一种,模式不带秒的 if(model1=2) b1=a1,b2=a2,b3=a3,b4=a4,b5=a5,b6=a6; /第二种,模式 是带秒的 if(model1=3) b1=10,b2=10,b3=10,b4=10,b5=10,b6=10; /第三种模式的省电模式 if(model2=1) b1=d1,b2=d2,b3=d3,b4=d4,b5=d5,b6=d6;operation=5; if(operation=5) b1=d1,b2=d2,b3=d3,b4=d4,b5=d5,b6=d6; if(d1=0) b1=10; if(d6=0) b6=10; switch(wei) case 1: P2=0xfe; /刷新第一位 if(operation=1) /此功能的作用是消去时钟的时位0; if(b1=0) P3=0xff; else P3=lampb1; else P3=lampb1; /第一位是什么数据 wei=2; break; case 2: P2=0xfd; if(operation=1|operation=4) if(operation=1) if(model1=3) P3=lampb2; else P3=lampb2&0x7f; else P3=lampb2; wei=3; if(operation=2|operation=3) /校对的时候要不就是时位要不就是分位 if(hour=1) wei=1; if(operation=5) /当是调月份的时候变位 if(year=1) wei=1; break; case 3: P2=0xfb; P3=lampb3; wei=4; break; case 4: P2=0x0f7; if(operation=1|operation=4) if(operation=1) if(model1=1|model1=3) P3=lampb4; else P3=lampb4&0x7f; else P3=lampb4;wei=5;if(operation=2|operation=3)if(hour=2)wei=3; break; case 5: P2=0xef;P3=lampb5;wei=6; if(operation=5)if(year=2)wei=4; break; case 6: P2=0xdf;P3=lampb6;wei=1;break; if(operation=4) if(beginend=1) if(time2=10) time2=0; b6+; jude(&b1,&b2,&b3,&b4,&b5,&b6,10); /这里为了防止b6加的太快 而出现还没有判断b6加都了10以上的数了。 else time2+; void jude(uchar *a1,uchar *a2,uchar *a3,uchar *a4,uchar *a5,uchar *a6,uchar num)/1-4种功能的使用if(*a6=10)*a6=0;(*a5)+;if(*a5=num) *a5=0; (*a4)+; if(*a4=10) *a4=0; (*a3)+; if(*a3=6) *a3=0; if(operation=1|operation=4) /只是用来表示当功能为1和4时时分为才开始进位 (*a2)+; if(*a2=10) *a2=0; (*a1)+; if(*a1=2)if(*a2=4) *a2=0; *a1=0; void jude2() /年月日的判断 if(a1=2&a2=4) d5+; if(d5=10) d5=0; d4+; if(d4=3&d5=2) d2+; d4=0; d5=1; if(d2=10) d1+; d2=0; if(d1=1&d2=3)d1=0,d2=1;void desplay() /去斗延时 40ms。uchar i=0,j=0;for(j=0;j200;j+)for(i=0;i200;i+);void selectop() /用来显示4是种功能中的哪一种if(p11=0) desplay(); if(p11=0) operation+; TR0=1; /当按了功能键就可以开始时钟的计数了 TR1=1; /只有点击开始就可以开始运行 hour=0; /将原来的时位校对从新置0 year=0; /将原来的月时教0 if(operation=1) d1=b1,d2=b2,d4=b4,d5=b5; /月份的数据备份 b1=a1,b2=a2,b3=a3,b4=a4,b5=a5,b6=a6; if(operation=2) time4=0; flag=0;model2=0; model1=1; b1=a1,b2=a2,b3=a3,b4=a4,b5=0,b6=0; if(operation=3) a1=b1,a2=b2,a3=b3,a4=b4; /当校对好了就可以覆盖原来的数据了。 b1=c1,b2=c2,b3=c3,b4=c4,b5=c5,b6=c6; /闹钟是从以前开始定时的 beginend=0; /秒表开始运行前要进行初始化 time2=0; if(operation=4) c1=b1,c2=b2,c3=b3,c4=b4,c5=b5,c6=b6; /将闹钟的时间存起来。 b1=0,b2=0,b3=0,b4=0,b5=0,b6=0; /秒表开始都是以全0开始的time2=0; if(operation=5) mounthflag=1; b1=d1,b2=d2,b3=d3,b4=d4,b5=d5,b6=d6; if(operation=6)operation=1;if(operation=1) if(p12=0) desplay(); if(p12=0) model1+; if(model1=4) /总共3种模式, model1=1; if(p13=0)desplay(); if(p13=0) flag=1; model2=1; time4=0; if(operation=2|operation=3)if(p12=0) desplay(); if(p12=0) hour+; if(hour=3) hour=1;if(p13=0)desplay();if(p13=0) if(hour=1) b2+; if(hour=2) b4+; if(operation=4) if(p12=0) desplay(); if(p12=0) if(beginend=1) beginend=0; else beginend=1; if(p13=0) desplay(); if(p13=0) b1=0,b2=0,b3=0,b4=0,b5=0,b6=0; /秒表的从新开始计时 time2=0; beginend=0; if(operation=5) if(p12=0) desplay(); if(p12=0) year+; if(year=3) year=1; if(year=2) wei=4; if(p13=0) desplay(); if(p13=0) if(year=1) d2+; if(year=2) d5+; void clock() if(a1=c1&a2=c2&a3=c3&a4=c4)/ if(a2=c2)/ if(a3=c3)/ if(a4=c4) timeflag=1; /表示可以进行灯光的闪烁了 p18=!p18; /闹钟的灯管就可以亮了 else timeflag=0; /标明闪光灯的灭掉。 p18=0; /闹钟响完了一分钟就可以不响了 void main()TMOD=0x11;EA=1;ET0=1;ET1=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;/TR0=1;/TR1=1; p18=0;while(1) jude(&a1,&a2,&a3,&a4,&a5,&a6,6); /时钟的计时 if(operation=4) jude(&b1,&b2,&b3,&b4,&b5,&b6,10); /只对于秒表的使用而其他的都不使用由于秒表的100ms else jude(&b1,&b2,&b3,&b4,&b5,&b6,6); /显示器各位的显示 jude2(); selectop(); clock(); 电路图:五、主要仪器设备、软件及耗材提供器件如下表器件名称数量单片机AT89C521数码管(6个一排)1按键4晶振12M130P电容210电容1电阻8.2K1电阻5.1K3排阻200*82驱动芯片ULN2803140脚IC插座218脚IC插座128脚IC插座1排座180孔插线若干外加一个灯泡和1k的电阻六、实训步骤注意个这三个按钮:一个是功能按钮,第二个使确认按钮,第三个是加数按钮(这里的名字只是随意取的没有很大的实际意义,由于功能多,按钮用到的地方多,方式又不一样)15个功能的使用 a点击功能按钮.没点击一下就是一种功能,当点击了6下时功能会返回。 b点击一下功能键,进入计时功能,现在可以看到了计时的效果 代码中默认的是没有带秒位功能的计时, c点击功能键进入调时功能 效果如下 d .点击功能按钮进入闹钟功能模式,效果如下默认的情况下是从12点开始定闹钟的,(后面会教你如何的更改闹钟的时间)e点击功能按钮进入秒表功能按钮,效果如下默认的情况是从0开始的(实际上也是这样的)d .点击功能按钮进入月份模式,效果如下默认的情况是都是0 ,前面一个0时月份,后面2个0是表示日子。2.计时功能下的多种功能演示a .带秒表的计时工能点击第二个按钮(就是确认按钮)出现了秒位了b .在a的基础下点击确认按钮进入黑屏状态(这种状态是省电模式,就是将数码管的灯消失,但计时依然进行,但进入黑屏模式下可以国一定时间再按确认键,就可以看到时间是否在走动(这里自己演示)c .点击第三个按钮(就是加数按钮)进入零时显示月份的,显示3秒的月份后就自动进入计数模式。效果如下 :三秒后的现实自动回位到初始没有带秒的功能计时模式3.调时的功能模式(先进入调时功能模式)a 点击确认按钮进入对时位调数还是对分位调时

温馨提示

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

评论

0/150

提交评论