单片机MC51多功能秒表设计报告_第1页
单片机MC51多功能秒表设计报告_第2页
单片机MC51多功能秒表设计报告_第3页
单片机MC51多功能秒表设计报告_第4页
单片机MC51多功能秒表设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、.单片机课程设计报告设计题目: 多功能秒表 班 级: 09电信(1)班 姓 名: 黄伟昭 学 号: 20094081032 指导教师: 邵海龙 调试地点: 调试时间: 成 绩: 一、实验要求1.硬件电气原理图一张(含元器件清单一份;所有引脚标注清楚)2、软件程序清单一套(含主要程序流程图,全部源程序及详细的注释)3、使用功能说明书一份(含功能描述及操作指南和收获体会)4、软件在开发板上调试成功,并能成功表演,仿真成功达到设计课题的要求。二、实现要求秒表功能1、设计可以显示0.01秒59分59秒00的秒表,最小单位为毫秒;2、通过按键控制秒表清零、暂停、继续、退出、时间设置、记录等功能;3、具有

2、倒计时、正计时功能;4、秒表可以分组存储,批量显示;三、硬件原理:1、显示模块:(1) 七段共阴数码管:在共阴极结构中,各段发光二极管的阴极连在一起,将此公共点接地,某一段发光二极管的阴极为高电平时,该段发光。LED显示09某个字符时,则要求在adp送固定的字段码,如要使LED显示“0”,则要求a、b、c、d、f各引脚为高电平,g和dp为低电平,字段码为“0x3f” 。dp g f e d c b a0 0 1 1 1 1 1 1 0x3f共阴极字符015七段码如下:字符: 0 1 2 3 4 5 6 7 8 9 A B C D E F字段码:0x3f,0x06,0x5b,0x4f,0x66,

3、0x6d,0x7d,0x070x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,(2) 74HC573(八进制 3 态非反转透明锁存器)    高性能硅门 CMOS 器件输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。 当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。 ×u36755X出能直接接到 CMOS,NMOS 和 TTL 接口上 ×u25805X作电压范围:2.0V6.0V ×u2030

4、2X输入电流:1.0uA ×CMOS 器件的高噪声抵抗特性 2、按键模块:本次设计采用独立按键。3、80c51芯片:80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(PUSH)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP(Dual In Line Package),内有128个RAM单元及4K的ROM。80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。80C51

5、内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用12MHz的晶振频率。由于80C51的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故采用来作为控制核心。四、流程图Key3=0?清零复位数都=0?Key2=0?YYYNYNYYYYYNYNYY开始扫描按键Key5=0?Flag2=!Flag2Flag2=0?Key1=0?Flag=!FlagTR0=!TR0TR0=1?Flag=0?倒计时正计时显示EndKey3=0?Flag3=!Flag3Flag3=0?Key1=0?Key2=0?Key1=0?秒+1秒-1分+1分-1显示Y五、主程序#includ

6、e <reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x37,0x00;uchar code table1=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar tempdate8;uchar i,x,tt,tt1,w,n,flag,flag1,flag2,flag3,keyn;c

7、har min_h,min_l,sec_h,sec_l,sec_ph,sec_pl;uchar tmin_h8,tmin_l8,tsec_h8,tsec_l8,tsec_ph8,tsec_pl8;uchar minh1,minl1,sech1,secl1,secph1,secpl1;char minh,minl,sech,secl,secph,secpl;sbit wela=P26;sbit dula=P27;sbit key1=P20;sbit key2=P21;sbit key3=P22;sbit key4=P23;sbit key5=P24;sbit beep=P25;void dela

8、y(uint z)/12mhz延时 1msuint y;while(z-)for (y=89;y>0;y-);void beep1(uchar z)uchar i;for(i=0;i<z;i+)beep=1;delay(1);beep=0;delay(1);/*- 显示函数,用于动态扫描数码管 输入参数 w 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 n表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void dis(uchar w,n) /显示 static unsigned char i=0;P1=0x00;dula=1;d

9、ula=0;P1=table1i+w;wela=1;wela=0;P1=tempdatei;if(i=3)&(key2!=0)&(key4!=0)&(key5!=0)P1=tempdatei+0x80;dula=1;dula=0;i+; if(i=n) i=0;if(flag2=1)&(i=4)&(flag3=0)delay(50);if(flag2=1)&(i=2)&(flag3=1)delay(50);void disn(uchar y,x)P1=table1y;wela=1;wela=0;P1=tablex;dula=1;dula=

10、0;delay(2);P1=0x00;dula=1;dula=0;void disb(uchar minh1,minl1,sech1,secl1,secph1,secpl1)/查看成绩P1=table10;wela=1;wela=0;P1=tabletmin_hminh1-1;dula=1;dula=0;delay(2);P1=table11;wela=1;wela=0;P1=tabletmin_lminl1-1;dula=1;dula=0;delay(2);P1=table12;wela=1;wela=0;P1=tabletsec_hsech1-1;dula=1;dula=0;delay(2

11、);P1=table13;wela=1;wela=0;P1=tabletsec_lsecl1-1+0x80;dula=1;dula=0;delay(2);P1=table14;wela=1;wela=0;P1=tabletsec_phsecph1-1;dula=1;dula=0;delay(2);P1=table15;wela=1;wela=0;P1=tabletsec_plsecpl1-1;dula=1;dula=0;delay(2);P1=0x00;dula=1;dula=0;void init () /初始化t0keyn=0;tt1=100;flag=1;P1=0xff;EA=1;TMO

12、D=0x11;ET0=1;TR0=0;TH0=(65536-2000)/256;TL0=(65536-2000)%256;ET1=1;TR1=1;TH1=(65536-2000)/256;TL1=(65536-2000)%256;beep=0;void clr() /清零sec_ph=0;sec_pl=0;sec_l=0;sec_h=0;min_l=0;min_h=0; uchar key()uchar y;/if(key5=0)&(TR0=0)/长按KEY5进入(退出)时间设置delay(50);if(key5=0)flag2=!flag2;beep1(10);while (!key

13、5)for(i=0;i<9;i+)tempdatei=0;disn(7,10);/if(flag2=1)if(key3=0)delay(2);if(key3=0)flag3=!flag3;while (!key3);if(key1=0)&(TR0=0)delay(2);if(key1=0&TR0=0)if(flag3=0)sec_l+;if(sec_l=10)sec_l=0;sec_h+;if(sec_h=6)sec_h=0;min_l+;if(min_l=10)min_l=0;min_h+;if(min_h=6)min_h=0;if(flag3=1)min_l+;if(

14、min_l=10)min_l=0;min_h+;if(min_h=6)min_h=0;while(!key1);if(key2=0)&(TR0=0)delay(2);if(key2=0&TR0=0)if(flag3=0)sec_l-;if(sec_l<0)sec_l=9;sec_h-;if(sec_h<0)sec_h=5;min_l-;if(min_l<0)min_l=9;min_h-;if(min_h<0)min_h=5;if(flag3=1)min_l-;if(min_l<0)min_l=9;min_h-;if(min_h<0)min_h

15、=5;while(!key2);/if (flag2=0)if(key1=0) /暂停delay(2);if(key1=0)TR0=TR0;flag1=1;while (!key1);/if(key2=0)&(TR0=0) / 记录delay(2);if(key2=0)keyn=2;minh1+;minl1+;sech1+;secl1+;secph1+;secpl1+;x+;if(minh1=8)minh1=1;minl1=1; sech1=1;secl1=1;secph1=1;secpl1=1;x=1;while(!key2)disn(7,x);/if(key2=0)&(TR

16、0=1)delay(2);if(key2=0&TR0=1)tmin_hminh+=min_h;tmin_lminl+=min_l;tsec_hsech+=sec_h;tsec_lsecl+=sec_l;tsec_phsecph+=sec_ph;tsec_plsecpl+=sec_pl;y+;beep1(20); /喇叭叫if (y=7)TR0=0;while (!key2);/if(key3=0)/清除数据 (复位)delay(2);if(key3=0)clr();flag1=0;flag=1;TR0=0;TR1=1;x=1;y=0;minh=0;minl=0; sech=0;secl

17、=0;secph=0;secpl=0;keyn=3;while (!key3);/if(key4=0)&(TR0=0)/计时模式切换delay(2);if(key4=0)flag=!flag;while (!key4)for(i=0;i<6;i+)tempdatei=0;if(flag=1)disn(7,10);elsedisn(7,13);/return keyn;void main()init();clr();while(1)tempdate0=tablemin_h;tempdate1=tablemin_l;tempdate2=tablesec_h;tempdate3=tab

18、lesec_l;tempdate4=tablesec_ph;tempdate5=tablesec_pl;key();if(flag1=1)&(flag=0)if(sec_pl=0)&(sec_ph=0)&(min_h=0)&(min_l=0)&(sec_h=0)&(sec_l=0)for(i=0;i<6;i+)tempdatei=0;TR1=0;TR0=0;for(i=0;i<10;i+)/end显示disn(3,14);disn(4,16);disn(5,13);beep1(50);for(i=0;i<10;i+)/end显示

19、disn(3,17);disn(4,17);disn(5,17);if(sec_pl=0)&(sec_ph=0)&(min_h=0)&(min_l=0)&(sec_h=1)&(sec_l=0) beep1(10);if(sec_pl=0)&(sec_ph=0)&(min_h=0)&(min_l=0)&(sec_h=0)switch(sec_l)case 9:beep1(10);break;case 8:beep1(10);break;case 7:beep1(10);break;case 6:beep1(10);break

20、;case 5:beep1(10);break;case 4:beep1(10);break;case 3:beep1(10);break;case 2:beep1(10);break;case 1:beep1(10);break;if(keyn=2)TR1=0;disb( minh1,minl1,sech1,secl1,secph1,secpl1);void time0() interrupt 1 /定时器0终断 2msTH0=(65536-2000)/256;TL0=(65536-2000)%256;tt+;if(flag=0)if(tt>0&&tt%5=1) sec

21、_pl-;if(sec_pl<0)sec_pl=9;sec_ph-;if(sec_ph<0)sec_ph=9;sec_l-;if(sec_l<0)sec_l=9;sec_h-;if(sec_h<0)min_l-;sec_h=5;if(min_l<0)min_l=9;min_h-;if(min_h<0)min_h=5;if(flag=1)if(tt>0)&(tt%5=0) sec_pl+;if(sec_pl=10)sec_pl=0;sec_ph+;if(sec_ph=10)sec_ph=0;sec_l+;if(sec_l=10)sec_l=0;s

22、ec_h+;if(sec_h=6)min_l+;sec_h=0;if(min_l=10)min_l=0;min_h+;if(min_h=6)clr();void time1() interrupt 3TH1=(65536-2000)/256;TL1=(65536-2000)%256;dis(0,6);;六、使用说明书多功能秒表使用说明书一 秒表显示方式:多功能秒表可以显示从(0.00秒到59分59秒99),当显示的时间超过1小时后,数码管数据清零,显示情况如下图:图一二 秒表按键设置:多功能秒表共设置有5个按键如图:图二 三 秒表的使用方法:1、正计时:多功能秒表一开机,默认为正计时工作方式,

23、当按下key1(开始/暂停)键后,秒表开始计时。在计时过程中,可以通过key1(开始/暂停)键,来控制计时的暂停或开始,亦可以通过key2(记录)键来记录时间数据,用户每按一次key2(记录)键,喇叭响一声,则记录一组时间数据,一共可以记录7组数据。若时间数据存满以后,计时停止,再按一次key2(记录)键可以返回查看原先记录的数据(若需要记录的数据不足七组,可以在记录数据组数到达所需要求时先暂停计时然后按下key2(记录)键进入查看数据,未记录的数据组默认显示为(0000.00)。在查看数据时,按住key2(记录)键最后一位数码管将会显示要显示的数据组数,如图三,当放开key2(记录)键后将显示的是记录下的第二组数据。图三2、倒计时:首先使秒表暂停,然后按住key4(模式切换)键,此时最后一位数码管显示“d”,放开该键,则秒表进入倒计时模式,再次按住key4(模式切换)键,最后一位数码管显示“A”,放开该键则可以切换回正计时模式(如图四所示)。倒计时模式下也可以记录7组数据,记录和查看方法与正计时相同。图四当倒计时时间进入最后10秒倒计时时,每

温馨提示

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

评论

0/150

提交评论