数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表1数理与信息工程学院《单片机原理及应用》期末课程设计题目:基于单片机设计的秒表专业:计算机科学与技术班级:计本072班姓名:郑进伟学号:07220146指导老师:余水宝数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表2成绩:(2010.1)目录第1节引言…………………………………………………………………………31.1秒表功能概述………………………………………………………………31.2本设计任务和主要内容……………………………………………………3第2节系统主要硬件电路设计……………………………………………………42.1系统组成框图………………………………………………………………42.2控制系统电路………………………………………………………………42.2.1晶振的使用…………………………………………………………52.2.2控制电路……………………………………………………………62.3控制电路与晶振的连接……………………………………………………62.4数码管显示系统电路………………………………………………………7数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表3第3节系统软件设计………………………………………………………………93.1计时主程序设计……………………………………………………………93.2数码管显示程序设计………………………………………………………12第4节结束语………………………………………………………………………15参考文献………………………………………………………………………………16基于单片机设计的秒表数理与信息工程学院计算机科学与技术072郑进伟指导教师:余水宝第1节引言秒表虽然是一个简单的小工具,但是给我们的生活带来许多方便,体育比赛中秒表是必不可少的裁判工具。其核心是基于单片机的控制部分和晶振共同组成,加以软件编程实现。秒表的设计程序用AT89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。该系统结构简单,易于操作,可靠性高,用途广泛。1.1秒表设计概述秒表虽然是一个简单的小工具,市面上随处可见。但麻雀虽小,五脏俱全。它亦数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表4是一个完整,精密的小系统。加上秒表使用范围广,如果能用更加稳定,优异的设计来实现,使其能够更精确,或者能将其模块化添加到其他的电子产品中,如手表,手机等,可以创造许多经济效益。1.2本设计任务和主要内容本论文主要研究基于单片机的秒表设计,主要是控制电路设计,数码管显示的设计,和软件程序的编写。第2节系统主要硬件电路设计2.1系统组成框图数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表5图2-1秒表系统原理框图2.2控制系统电路AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效的微控制器。数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表6图2-2单片机秒表系统图2.2.1晶振的使用单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,这个频率经过频率发生器的倍频或分频后就成了各种不同的总线频率。我们可以使用晶振来作为计时的工具。晶振也是很多电子设备中不可缺少的一部分。数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表7图2-2-1单片机秒表系统图2.2.2控制电路本次秒表设计要实现的功能具体是:用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。具体要用AT89C51芯片实现。MCS-51单片机的复位是靠外部电路实现的。MCS-51单片机工作之后,只要在他的RST引线上加载10ms以上的高点平,单片机就能有效地复位。MCS-51单片机通常采用上电自动复位和按键复位两种方式。最简单的复位电路如下图:上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上的高电平,就能使单片机有效的复位。在应有系统中,有些外围芯片也需要复位。如果这些芯片复位端的复位电平与单片机的复位电平的要求一致,则可以将复位信号与之相连。2.3控制电路与晶振的连接晶振分为有源晶振和无源晶振。无源晶振只有两个引脚,没有所谓的正负极。有源晶振需要接电源才能工作,一般有四个引脚,其中有两个电源输入引脚,有正负极之分。本设计采用的是无源晶振,无源晶振,两个电容分别接到晶振的两端,每个电容的另一端再接到地。一般的电容为15p或12.5p。再与芯片引数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表8脚相连。2.4数码管显示系统电路微机化测控系统中常用的测量数据的显示器有发光二极管显示器(简称LED或数码管)和液晶显示器(简称LCD)。这两种显示器都具有线路简单、耗电少、成本低、寿命长等优点,本系统输出结果选用2个LED显示。LED数码管的外形结构如图2-4,外部有10个引脚,其中3,8脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字((0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。由于系统要显示的内容比较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图2-4所示。二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。共阴极共阳极图2-4LED数码管结构原理图数码管显示器有两种工作方式,即静态显示方式和动态扫描显示方式。为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需要解决多位LED数码管的“段控”和“位控”问题,本电路的通过P1口实现:而每一位的公共端,数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表9即LED数码管的“位控”,则由P3口控制。这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开头”状态。因AT89C51单片机I/O口资源有限,必须对其Il0口进行扩展才能满足实现系统功能,如图2-7所示为用8155扩展1/0口的4个8位LED动态显示器,显示扫描由程控实现,其中PA口输出字型码,PC口输出位选信号即扫描信号,图中片选线CE和AT89C51的P2.7口相连,IO/M选通输入线与P2.4口相连,该系统中当P2.7=0且P2.4=1时,选中8155芯片内三个I/O口。表2-18155端口地址分配数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表10第3节系统的软件设计AT89C51显示00~99汇编语言程序。要实现两位数码管显示00~99依次循环的秒表设计,必须得将AT89C51芯片写入程序,只有将程序写进AT89C51芯片,才能实现其秒表的原理功能。3.1计时主程序设计A_BITEQU20H;数码管个位数存放内存位置B_BITEQU21H;数码管十位数存放内存位置TEMPEQU22H;计数器数值存放内存位置;开机初始化MOVP3,#0FFH;对P3口初始化,设置为高电平,用于输入MOVP0,#0FFH;使显示时间数码管熄灭CLRF0CLRF1MOVDPTR,#NUMTAB;指定查表启始地址;等待按键输入;根据按键的输入判断执行什么功能;按键1按下则执行功能1MOVP3,#0FFH;对P3口初始化,设置为高电平,用于输入MOVP0,#0FFH;使显示时间数码管熄灭START:JBP3.6,START1;循环判断开始按钮K1是否按下?ACALLDELAY10;延时10毫秒触点消抖JBP3.6,START;如果是干扰就返回JNBP3.6,$;等待按键松开LJMPGN1;按键2按下则执行功能2START1:JBP3.7,START;循环判断开始按钮K2是否按下?ACALLDELAY10;延时10毫秒触点消抖JBP3.7,START1;如果是干扰就返回数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表11JNBP3.7,$LJMPGN2;数码管显示秒表时间的程序GN1:;先初始化S1:MOVA,#0MOVTEMP,AGOON1:MOVR2,#2JS1:MOVR3,#250TIME1:MOVA,TEMP;将TEMP中的16进制数转换成10进制MOVB,#10;10进制/10=10进制DIVABMOVB_BIT,A;十位在AMOVA_BIT,B;个位在BLCALLDPLOP1;插入判断按键输入的程序段C1:JBP3.6,B1ACALLDELAY10;延时10毫秒消抖JBP3.6,C1JNBP3.6,$;等待按键松开CPLF0ZT1:MOVP3,#0FFH;对P3口设置为高电平,用于输入JBP3.6,$;循环判断开始按钮K1是否按下?ACALLDELAY10;延时10毫秒触点消抖JBP3.6,ZT1;如果是干扰就返回JNBP3.6,$;等待按键松开LCALLDPLOP1B1:JBP3.7,LOOP1ACALLDELAY10;延时10毫秒消抖JBP3.7,B1JNBP3.7,$;等待按键松开AJMPOVERLOOP1:DJNZR3,TIME1;2毫秒循环执行250次,时间约0.5秒DJNZR2,JS1;循环执行2次,时间为1秒钟数理与信息工程学院《单片机原理及应用》期末课程设计——基于单片机设计的秒表12INCTEMP;满一秒钟对时间加1MOVA,TEMPCLRCSUBBA,#60JNZGOON1;判断TEMP的数值是否为60?不为60循环ACALLOVERRETGN2:MOVA,#14H;设定倒计时的时间20SMOVTEMP,A;数码管显示倒计时时间的程序;初始化MOVP3,#0FFH;对P3口初始化,设置为高电平,用于输入MOVP0,#14H;使显示时间为设定的倒计时时间GOON2:MOVR2,#2JS2:MOVR3,#250TIME2:MOVA,TEMP;将TEMP中的十六进制数转换成10进制MOVB,#10;10进制/10=10进制DIVABMOVB_BIT,A;十位在AMOVA_BIT,B;个位在BMOVDPTR,#NUMTAB;指定查表启始地址DPL