基于单片机的秒表系统设计组员:一.设计内容:1.设计精度为0.1s的秒表系统2.设置启动、暂停、清零按钮3.秒表的最长计时长度为9:59:9,超过此长度,则报警二.方案设计1.总体方案本设计是基于AT89C51单片机设计的,我们是分为几个模块来设计的。首先对秒表的硬件进行了设计,它包括时钟电路设计、控制电路设计以及外部显示电路。利用89C51单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。计时精度为0.1s。其次是软件进行了设计,软件系统采用汇编语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等。这次的试验要求进行计时并且在数码管上显示时间,先要基本了解硬件内在结构,确定用p2并行端口进行数码管控制输入,使用P1.6,P1.5,P1.4,P1.3进行选择0.1秒位,秒位,十位秒位,分钟位,以P3.0为开始控制,P3.1为停止控制,以P3.2为清零控制。本次实验设计的基本思路是要求借助AT89C51单片机做出一个0-9.59.9s的秒表从十位秒到0.1位秒数这些计时的位数是存在一个内嵌的结构,就是0.1秒位满足条件然后进行跳位使秒位加一的过程,当0.1s到0.9s时该位自动清零并且秒位加一,秒位达到9时也自动清零并向十秒位加一。当计数超过范围是所有数码管全部清零重新计数。其次开始控制,停止控制,清零控制等功能,我们采用蜂鸣器进行提示,该信号由P1.0输出由7406非门与外加电源驱动,通过一个延时子程序加以控制。最后就是根据硬件的条件进行编程,要求软硬件相互兼容。2.硬件设计本系统中,硬件电路主要有晶振电路,复位电路,显示电路以及一些按键控制电路。(1)晶体振荡电路利用12分频的晶振的一个机器周期为一微妙,通过循环延时产生0.1秒的延时,通过XTAL1和XTAL2外接晶体振荡器构成内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。振荡电路(2)复位电路采用上电加按键复位电路,也就是手动复位,上电后,由于电容充电,使RET持续一段高电平时间,当单片机运行时,按下复位键也能使RET持续一段时间的高电平,从而实现上电加开关复位的操作。上电加复位电路(3)按键控制电路我们只需要实现秒表的启动、暂停、清零、复位功能。用四个按键可以实现,因此采用按键电路。利用部分P3口进行控制,用P3.0、P3.1、P3.2分别作为S1、S2、S3的电路接口。按下S1时启动,按下S2时暂停,按下S3清零.(4)LED显示电路我们用LED数码管显示结果,用4个共阳极LED显示,用P2并行端口进行数码管的控制输入,使用P1.6、P1.5、P1.4、P1.3进行选择0.1秒位、秒位、十秒位、分钟位。电路原理图(网上参考图)3.软件设计主程序流程图三.计划书第一周(9月10日-16日):选好课题,熟悉任务要求。第二周(9月17日-23日):总体方案设计第三周(9月24日-30日):硬件设计,即画出电路原理图,软件设计,做好流程图就可以,列出实验所需清单。第四周(10月1日-7日):国庆放假第五周(10月8日-14日):完成软件编程,用C语言或汇编都可以第六周(10月15日-21日):完成系统的硬件组装,焊接实体电路第七周(10月22日-28日):系统调试,改进、完善电路,整理实验设计报告第八周(10月29日——):课堂考核开始有进位吗?初始化有暂停指令吗?Y有清零指令吗?0.1秒位加一NNNY有进位吗?NY秒位加一十秒位加一Y有进位吗?NY声音提示四.器材清单AT89C51单片机(双列直插)×174LS244芯片(双列直插)×17406芯片(双列直插)×5晶振12MHz×1电容(30pF)×2,22pF×1电阻470Ω×18.2kΩ×110kΩ×5按键开关×5LED数码管×5蜂鸣器×1导线若干五.源程序HAOMIAOEQU34HMIAOEQU35HSHIMIAOEQU36HORG0000HAJMPSTARTORG0030HSTART:CLRCSETBP1.6SETBP1.5SETBP1.4MOVHAOMIAO,#0MOVMIAO,#0MOVSHIMIAO,#0MOVDPTR,#TABLEMOVA,#00HMOVCA,@A+DPTRCLRP1.6MOVP2,AMOVA,#00HMOVCA,@A+DPTRCLRP1.4MOVP2,AMOVDPTR,#TABLE1MOVA,#00HMOVCA,@A+DPTRCLRP1.5MOVP2,ALCALLKAISHILCALLMAINSHIWEI:SETBP1.5MOVDPTR,#TABLE;十秒位显示MOVMIAO,#0;使秒位从零位重新循环INCSHIMIAOMOVA,SHIMIAOCLRCSUBBA,#6JZSTARTAJMPMAINRETTINGZHI:MOVA,#00H;判断是否有清零指MOVA,P3ANLA,#04HJZSTARTMOVA,#00H;判断是否有停止指令MOVA,P3CLRCANLA,#02HLCALLYANSHIJZMAINLJMPTINGZHISTART1:LJMPSTARTSHIWEI1:LJMPSHIWEIMAIN:SETBP1.5SETBP1.4SETBP1.6MOVA,#00H;判断是否有清零指令MOVA,P3ANLA,#04HJZSTART1MOVA,#00H;判断是否有停止指令MOVA,P3CLRCANLA,#02HJZTINGZHIMOVDPTR,#TABLE;0.1位秒显示INCHAOMIAO;加一,可查下一位数据MOVA,HAOMIAO;判断是否进位CLRCSUBBA,#10JZMIAOZHENLCALLYANSHI;延时0.1秒AJMPMAINRET;继续计时MIAOZHEN:SETBP1.4MOVDPTR,#TABLE1;秒位显示MOVHAOMIAO,#0;使0.1秒从零重新循环INCMIAO;加一,可查下一位数据MOVA,MIAO;判断是否进位CLRCSUBBA,#10JZSHIWEI1LCALLSNDAJMPMAIN;返回0.1秒计YANSHI:MOVR6,#30DL2:MOVA,#00H;判断是否有清零指令MOVA,P3ANLA,#04HJZSTART1MOVDPTR,#TABLEMOVA,SHIMIAOMOVCA,@A+DPTRCLRP1.6MOVP2,AACALLYIHAOMIAOSETBP1.6MOVA,HAOMIAOMOVCA,@A+DPTRCLRP1.4MOVP2,AACALLYIHAOMIAOSETBP1.4MOVDPTR,#TABLE1MOVA,MIAOMOVCA,@A+DPTRCLRP1.5MOVP2,AACALLYIHAOMIAOSETBP1.5DJNZR6,DL2RETYIHAOMIAO:MOVR7,#250CV:NOPNOPDJNZR7,CVRETKAISHI:MOVA,#0MOVA,P3ANLA,#01HJNZKAISHIRETSND:SETBP1.0MOVR1,#1EHDL:MOVR0,#0F9HDL1:DJNZR0,DL1DJNZR1,DLCLRP1.0RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0,1,2,3,4,5,6,7,8,9TABLE1:DB0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H,0FFH,0EFHEND