单片机MC51多功能秒表设计报告.doc

上传人:jian****018 文档编号:9089290 上传时间:2020-04-03 格式:DOC 页数:19 大小:657KB
返回 下载 相关 举报
单片机MC51多功能秒表设计报告.doc_第1页
第1页 / 共19页
单片机MC51多功能秒表设计报告.doc_第2页
第2页 / 共19页
单片机MC51多功能秒表设计报告.doc_第3页
第3页 / 共19页
点击查看更多>>
资源描述
单片机课程设计报告设计题目: 多功能秒表 班 级: 09电信(1)班 姓 名: 黄伟昭 学 号: 20094081032 指导教师: 邵海龙 调试地点: 调试时间: 成 绩: 一、实验要求1.硬件电气原理图一张(含元器件清单一份;所有引脚标注清楚)2、软件程序清单一套(含主要程序流程图,全部源程序及详细的注释)3、使用功能说明书一份(含功能描述及操作指南和收获体会)4、软件在开发板上调试成功,并能成功表演,仿真成功达到设计课题的要求。二、实现要求秒表功能1、设计可以显示0.01秒59分59秒00的秒表,最小单位为毫秒;2、通过按键控制秒表清零、暂停、继续、退出、时间设置、记录等功能;3、具有倒计时、正计时功能;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,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 u20302X输入电流: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内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用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五、主程序#include #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;char 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 delay(uint z)/12mhz延时 1msuint y;while(z-)for (y=89;y0;y-);void beep1(uchar z)uchar i;for(i=0;iz;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;dula=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=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);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;TMOD=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 (!key5)for(i=0;i9;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(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_l0)sec_l=9;sec_h-;if(sec_h0)sec_h=5;min_l-;if(min_l0)min_l=9;min_h-;if(min_h0)min_h=5;if(flag3=1)min_l-;if(min_l0)min_l=9;min_h-;if(min_h0)min_h=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)&(TR0=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=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;i6;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=tablesec_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;i6;i+)tempdatei=0;TR1=0;TR0=0;for(i=0;i10;i+)/end显示disn(3,14);disn(4,16);disn(5,13);beep1(50);for(i=0;i0&tt%5=1) sec_pl-;if(sec_pl0)sec_pl=9;sec_ph-;if(sec_ph0)sec_ph=9;sec_l-;if(sec_l0)sec_l=9;sec_h-;if(sec_h0)min_l-;sec_h=5;if(min_l0)min_l=9;min_h-;if(min_h0)&(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;sec_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、正计时:多功能秒表一开机,默认为正计时工作方式,当按下key1(开始/暂停)键后,秒表开始计时。在计时过程中,可以通过key1(开始/暂停)键,来控制计时的暂停或开始,亦可以通过key2(记录)键来记录时间数据,用户每按一次key2(记录)键,喇叭响一声,则记录一组时间数据,一共可以记录7组数据。若时间数据存满以后,计时停止,再按一次key2(记录)键可以返回查看原先记录的数据(若需要记录的数据不足七组,可以在记录数据组数到达所需要求时先暂停计时然后按下key2(记录)键进入查看数据,未记录的数据组默认显示为(0000.00)。在查看数据时,按住key2(记录)键最后一位数码管将会显示要显示的数据组数,如图三,当放开key2(记录)键后将显示的是记录下的第二组数据。图三2、倒计时:首先使秒表暂停,然后按住key4(模式切换)键,此时最后一位数码管显示“d”,放开该键,则秒表进入倒计时模式,再次按住key4(模式切换)键,最后一位数码管显示“A”,放开该键则可以切换回正计时模式(如图四所示)。倒计时模式下也可以记录7组数据,记录和查看方法与正计时相同。图四当倒计时时间进入最后10秒倒计时时,每隔一秒喇叭响一声。当再度跳为0000.00时,计时停止,在数码管上闪烁”End”喇叭长响(如图五所示)。图五3、时间设置首先使秒表暂停,长按key5(时间设置),直到最后一位数码管显示“A”且喇叭响一声(如图六所示)。放开该键,后可以看到秒的个位为长亮,其它数码管闪烁显示,此时按一下key1(开始/暂停)键可以使秒加1,按一下key2(记录)键,可以使秒减一,按下key3(复位)键可以看到分个位变为常亮,其余闪烁显示,此时按一下key1(开始/暂停)键可以使分加1,按一下key2(记录)键,可以使分减一。当时间设置完成后再长按key5(时间设置)键,直到最后一位数码管显示“A“,且喇叭响一声后松开退出时间设置。图六七、心得体会设计的过程中,我受益匪浅。首先,我意识到平时扎实的基础是关键,只有平时学得牢,在面对课题时思路才会敏捷,在面对问题时才会快速找到症结所在并找到解决之道。其次,程序设计是个很复杂的过程,在大的构思实现之后我们往往还要在很多的细节上对程序加以改进。在过去的大学学习中,我们大多数接触的是专业课,我们在课堂上学习的也都是专业课的理论知识,为了锻炼我们的实践能力把所学的专业理论知识运用到实践中去,课程设计为我们搭建了这样一个练习的平台。在这次课程设计中,我们培养了在实践中研究问题、分析问题和解决问题的能力,并意识到程序设计不仅要注重整体,更要注重细节;当程序运行过程中遇到问题时,我们要打开思路,发挥创新精神,力求用最有效简洁的方法解决;遇到难以解决的困难时,我们要多多请教书本、老师、同学,坚持不懈,就算程序运行失败了也不要气馁。这一次的课程设计实验,让我体会到知识的应用所带来的成就感。与此同时,单片机课程设计也使我们体会到了团结的力量,再复杂的程序在我们的讨论中也可以得到答案。课程设计所带来的经验可以让我更好的学习。八、整体电路仿真图
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!