资源描述:
《设计秒表的实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于Freescale的秒表设计实验报告姓名:车永发学号:0802040112专业年级:资源勘查工程08级学院(系):资源与环境学院基于Freescale的秒表设计实验目的:1.了解Freescale单片机使用。2.熟悉开发环境,理解和掌握时钟中断、数码显示、键盘输入等相关知识。3.实现秒表精确显示百分之一秒,并口在千分之一秒进行显吋更新。4.秒表实现清零、暂停等功能。实验平台:Freescale(飞思卡尔)MS9S12XS128MAL单片机开发板一套,Freescale程序下载器一个,直流稳压电源一个,计算机一台。
2、实验步骤:1、查找并阅读Freescale的相关技术资料。2、学习Freescale的学习课件。3、明确实验目的,并确定、优化实验方案。4、参阅Freescale的相关技术资料,编写最佳设计方案的程序代码。5、结合已编写的程序,连接电路,再接通电源。6、将程序下载到Freescale单片机中,并进行测试。7、整理学习资料,撰写实验报告。设计思路:本实验通过数码管的不断扫描显示秒表时间,单片机通过接收键盘输入清零与暂停指令,以实现相应的功能。但对于内部的准确计时方式主要有以下两种方案:方案一:主要采用用户编写的延时函数
3、,通过不同的循环方式,记录系统执行程序所需要的时间来实现秒表的计时。方案二:主要采用单片机的时钟中断功能,通过设定时钟中断间隔,记录循环次数来实现秒表的准确计时。方案比较:由于单片机的执行速度非常快,执行简单语句的时间远远小于秒,因此,方案j通过设定特定的循环次数,可以实现秒表的计时,但是,系统的运行速度会受到系统环境的影响,也即是说其时间的准确性极容易受到系统环境的影响。与方案一相比,尽管方案二也会受到系统环境的影响,但是,在釆用时钟中断的情况下,相应程序的执行时间会大大减少,因此对时间准确性的影响程度远远低于方案
4、一。基于方案比较,我们采用方案二,由时钟中断程序控制时间的更新频率,以下为其设计思路的框图:电路原理图1(―♦-mmrnojrnn*~丄程序流程图:依据以上设计,初步完成了相关程序的编写。实验测试:(-)结合程序把单片机的扩充板上的相关接口用导线正确连接,并且连接好下载器,接通电源。(-)把程序下载到单机中,进行测试。(三)通过测试发现清零的实现有两种情况:1)跑秒过程中即可以清零也可以暂停;2)跑秒过程中不可以清零,只有暂停之后才可以清零。由于在跑秒过程屮清零,不具有实际意义,因此,我们确定用第二种方法实现清零与暂
5、停。实验结论:本实验用单片机简单实现了秒表的精准计吋,在人们对吋间的准确性要求越來越高的当今世界具有重要的现实意义。尤其是在现代工业的精确定时领域和体育赛事过程中应用较为广泛。附录:程序代码#include"Cpu.h"#include"Events.h"include“Tll.h”includeuPE_Types.huincludenPE_Error.hu#include"PE_Const.h"#include"10_Map.h"#defineled_datPTP#defineled_lPTT.PTTO#defin
6、eled_2PTT_PTT1#defineled_3PTT_PTT2#defineled_4PTT_PTT3constbytea[16]={0xC0,0xF9,0xA4,0xb0,0x99,0x92,0x82,OxF8,0x80,0x900X08,0X03,0X46,0X21,0X06,0X0E};#definePOTPTP.PTP7externbytesec=0,ms=0,dem=2;bytekey=O;bytetemp=0;voiddisplay(byteal,bytea2,bytea3,bytea4,byted
7、em){PTT=0XFF;led_dat=a[al];led_l=0;if(dem=l)POT=0;elsePOT=1;Cpu_Delayl00US(30);PTT二0XFF;led_dat=a[a2J;led_2=0;if(dem==2)POT=0;elsePOT=1;Cpu_Delayl00US(30);PTT=0XFF;led_dat=a[a3];led_3=0;if(dem==3)POT=0;elsePOT=1;PTT=0XFF;led_dat=a[a4];led_4=0;if(dem==4)POT=();e
8、lsePOT=1;Cpu_Delayl00US(30);}voidkeyscan(){bytei=0,temp=0;do{switch(i){caseO:temp=()xFE;break;case1:temp=OxFD;break;case2:temp=0xFB;break;case3:temp=0xF7;break;)i++;DDRA=0XF